/* * View a file in the current area, menu 103. * If a file name is given, display direct, * else ask for filename to view. */ void ViewFile(char *name) { char *File, *temp, *arc; int count, total, rc, found = FALSE; FILE *fp; struct _fdbarea *fdb_area = NULL; Syslog('+', "ViewFile(%s)", printable(name, 0)); if (Access(exitinfo.Security, area.LTSec) == FALSE) { Enter(1); /* You don't have enough security to list this area */ pout(YELLOW, BLACK, (char *) Language(236)); Enter(2); Pause(); return; } File = calloc(PATH_MAX, sizeof(char)); if ((name != NULL) && strlen(name)) { strcpy(File, name); } else { Enter(2); /* Please enter filename: */ pout(YELLOW, BLACK, (char *) Language(245)); colour(CFG.InputColourF, CFG.InputColourB); GetstrC(File, 80); if ((strcmp(File, "")) == 0) { free(File); return; } if (*(File) == '.' || *(File) == '*' || *(File) == ' ' || *(File) == '/') { Enter(1); /* Illegal Filename! */ pout(CFG.HiliteF, CFG.HiliteB, (char *) Language(247)); Enter(2); Pause(); free(File); return; } Strlen = strlen(File); Strlen--; if (*(File + Strlen) == '.' || *(File + Strlen) == '/' || *(File + Strlen) == ' ') { Enter(1); /* Illegal Filename! */ pout(CFG.HiliteF, CFG.HiliteB, (char *) Language(247)); Enter(2); Pause(); free(File); return; } if ((!strcmp(File, "files.bbs")) || (!strcmp(File, "00index")) || (strstr(File, (char *)".html"))) { Enter(1); /* Illegal Filename! */ pout(CFG.HiliteF, CFG.HiliteB, (char *) Language(247)); Enter(2); Pause(); free(File); return; } } /* * Now check if this file is present */ if ((fdb_area = mbsedb_OpenFDB(iAreaNumber, 30)) == NULL) { free(File); return; } while (fread(&fdb, fdbhdr.recsize, 1, fdb_area->fp) == 1) { if (((strcasecmp(File, fdb.Name) == 0) || (strcasecmp(File, fdb.LName) == 0)) && (!fdb.Deleted)) { found = TRUE; break; } } mbsedb_CloseFDB(fdb_area); if (!found) { Enter(1); /* File does not exist, please try again ... */ pout(CFG.HiliteF, CFG.HiliteB, (char *) Language(296)); Enter(2); free(File); Pause(); return; } snprintf(File, PATH_MAX, "%s/%s", sAreaPath, fdb.LName); arc = GetFileType(File); Syslog('+', "File to view: %s, type %s", fdb.LName, printable(arc, 0)); if (arc != NULL) { found = FALSE; temp = calloc(PATH_MAX, sizeof(char)); snprintf(temp, PATH_MAX, "%s/etc/archiver.data", getenv("MBSE_ROOT")); if ((fp = fopen(temp, "r")) != NULL) { fread(&archiverhdr, sizeof(archiverhdr), 1, fp); while (fread(&archiver, archiverhdr.recsize, 1, fp) == 1) { if ((strcmp(arc, archiver.name) == 0) && (archiver.available)) { found = TRUE; break; } } fclose(fp); } if (!found || (strlen(archiver.varc) == 0)) { Syslog('+', "No archiver view for %s available", File); Enter(1); /* Archiver not available */ pout(CFG.HiliteF, CFG.HiliteB, Language(442)); Enter(2); free(File); free(temp); Pause(); return; } /* * Archiver viewer is available. Make a temp file which we will * display to the user. */ snprintf(temp, PATH_MAX, "%s/%s/temptxt", CFG.bbs_usersdir, exitinfo.Name); rc = execute_str(archiver.varc, File, NULL, (char *)"/dev/null", temp, (char *)"/dev/null"); Syslog('+', "Display temp file %s", temp); DisplayTextFile(temp); unlink(temp); free(temp); } else { /* * Most likely a textfile, first check. */ total = count = 0; if ((fp = fopen(File, "r"))) { while (TRUE) { rc = fgetc(fp); if (rc == EOF) break; total++; if (isascii(rc)) count++; } fclose(fp); } if (((count * 10) / total) < 8) { Syslog('+', "This is not a ASCII textfile"); Enter(1); pout(CFG.HiliteF, CFG.HiliteB, Language(17)); Enter(2); Pause(); free(File); return; } Syslog('+', "Display text file %s", File); DisplayTextFile(File); } free(File); }
void CRenderDevice::End (void) { #ifndef DEDICATED_SERVER // Moved to m_pRenderEnd() //VERIFY (HW.pDevice); //if (HW.Caps.SceneMode) overdrawEnd (); // #ifdef INGAME_EDITOR bool load_finished = false; #endif // #ifdef INGAME_EDITOR if (dwPrecacheFrame) { ::Sound->set_master_volume (0.f); dwPrecacheFrame --; pApp->load_draw_internal (); if (0==dwPrecacheFrame) { #ifdef INGAME_EDITOR load_finished = true; #endif // #ifdef INGAME_EDITOR //Gamma.Update (); m_pRender->updateGamma(); if(precache_light) precache_light->set_active (false); if(precache_light) precache_light.destroy (); ::Sound->set_master_volume (1.f); pApp->destroy_loading_shaders (); m_pRender->ResourcesDestroyNecessaryTextures (); Memory.mem_compact (); Msg ("* MEMORY USAGE: %d K",Memory.mem_usage()/1024); Msg ("* End of synchronization A[%d] R[%d]",b_is_Active, b_is_Ready); #ifdef FIND_CHUNK_BENCHMARK_ENABLE g_find_chunk_counter.flush(); #endif // FIND_CHUNK_BENCHMARK_ENABLE CheckPrivilegySlowdown (); if(g_pGamePersistent->GameType()==1)//haCk { WINDOWINFO wi; GetWindowInfo(m_hWnd,&wi); if(wi.dwWindowStatus!=WS_ACTIVECAPTION) Pause(TRUE,TRUE,TRUE,"application start"); } } } g_bRendering = FALSE; // end scene // Present goes here, so call OA Frame end. if (g_SASH.IsBenchmarkRunning()) g_SASH.DisplayFrame(Device.fTimeGlobal); m_pRender->End(); //RCache.OnFrameEnd (); //Memory.dbg_check (); //CHK_DX (HW.pDevice->EndScene()); //HRESULT _hr = HW.pDevice->Present( NULL, NULL, NULL, NULL ); //if (D3DERR_DEVICELOST==_hr) return; // we will handle this later //R_ASSERT2 (SUCCEEDED(_hr), "Presentation failed. Driver upgrade needed?"); # ifdef INGAME_EDITOR if (load_finished && m_editor) m_editor->on_load_finished (); # endif // #ifdef INGAME_EDITOR #endif }
void Chg_Password() { char *temp1, *temp2, *args[16]; temp1 = calloc(PATH_MAX, sizeof(char)); temp2 = calloc(PATH_MAX, sizeof(char)); ReadExitinfo(); DisplayFile((char *)"password"); Enter(1); /* Old password: */ language(WHITE, BLACK, 120); colour(CFG.InputColourF, CFG.InputColourB); Getpass(temp1); if (!strcmp(exitinfo.Password, temp1)) { while (TRUE) { Enter(1); /* New password: */ language(LIGHTBLUE, BLACK, 121); colour(CFG.InputColourF, CFG.InputColourB); Getpass(temp1); if((strlen(temp1)) >= CFG.password_length) { Enter(1); /* Confirm new password: */ language(LIGHTBLUE, BLACK, 122); colour(CFG.InputColourF, CFG.InputColourB); Getpass(temp2); if(( strcmp(temp1,temp2)) != 0) { /* Passwords do not match! */ Enter(2); language(LIGHTRED, BLACK, 123); Enter(1); } else { break; } } else { colour(LIGHTRED, BLACK); /* Your password must contain at least %d characters! Try again.*/ snprintf(temp2, PATH_MAX, "\r\n%s%d %s\r\n\r\n", (char *) Language(42), CFG.password_length, (char *) Language(43)); PUTSTR(temp2); } } Syslog('+', "%s/bin/ftnpasswd %s ******", getenv("FTND_ROOT"), exitinfo.Name); snprintf(temp1, PATH_MAX, "%s/bin/ftnpasswd", getenv("FTND_ROOT")); memset(args, 0, sizeof(args)); args[0] = temp1; args[1] = exitinfo.Name; args[2] = temp2; args[3] = NULL; if (execute(args, (char *)"/dev/null", (char *)"/dev/null", (char *)"/dev/null") != 0) { WriteError("Failed to set new Unix password"); } else { memset(&exitinfo.Password, 0, sizeof(exitinfo.Password)); strcpy(exitinfo.Password, temp2); exitinfo.tLastPwdChange = time(NULL); Enter(1); /* Password Change Successful */ language(LIGHTGREEN, BLACK, 124); Syslog('+', "User changed his password"); WriteExitinfo(); } } else { Enter(1); /* Old password incorrect! */ language(LIGHTRED, BLACK, 125); } free(temp1); free(temp2); Enter(2); Pause(); }
static HRESULT StreamPause( aout_stream_t *s, bool pause ) { return Pause( s->sys, pause ); }
int PlayLaserGame(int diff_level) { int i, img, done, quit, frame, lowest, lowest_y, tux_img, old_tux_img, tux_pressing, tux_anim, tux_anim_frame, tux_same_counter, level_start_wait, num_cities_alive, num_comets_alive, paused, picked_comet, gameover; Uint16 key_unicode; SDL_Event event; Uint32 last_time = 0; Uint32 now_time = 0; SDLKey key; SDL_Rect src, dest; /* str[] is a buffer to draw the scores, waves, etc. (don't need wchar_t) */ char str[64]; LOG( "starting Comet Zap game\n" ); DOUT( diff_level ); SDL_ShowCursor(0); laser_load_data(); /* Clear window: */ SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 0, 0, 0)); SDL_Flip(screen); /* --- MAIN GAME LOOP: --- */ done = 0; quit = 0; src.w = src.h = 0; /* Prepare to start the game: */ wave = 1; score = 0; gameover = 0; level_start_wait = LEVEL_START_WAIT_START; /* (Create and position cities) */ for (i = 0; i < NUM_CITIES; i++) { cities[i].alive = 1; cities[i].expl = 0; cities[i].shields = 1; } /* figure out x placement: */ calc_city_pos(); num_cities_alive = NUM_CITIES; num_comets_alive = 0; /* (Clear laser) */ laser.alive = 0; /* Reset remaining stuff: */ laser_reset_level(diff_level); /* --- MAIN GAME LOOP!!! --- */ frame = 0; paused = 0; picked_comet = -1; tux_img = IMG_TUX_RELAX1; tux_anim = -1; tux_anim_frame = 0; tux_same_counter = 0; ans_num = 0; MusicPlay(musics[MUS_GAME + (rand() % NUM_MUSICS)], 0); do { frame++; last_time = SDL_GetTicks(); old_tux_img = tux_img; tux_pressing = 0; /* Handle any incoming events: */ while (SDL_PollEvent(&event) > 0) { if (event.type == SDL_QUIT) { /* Window close event - quit! */ exit(0); } else if (event.type == SDL_KEYDOWN) { key = event.key.keysym.sym; if (key == SDLK_F10) { SwitchScreenMode(); calc_city_pos(); recalc_comet_pos(); } if (key == SDLK_F11) SDL_SaveBMP( screen, "laser.bmp"); if (key == SDLK_ESCAPE) paused = 1; /* --- eat other keys until level wait has passed --- */ if (level_start_wait > 0) key = SDLK_UNKNOWN; key_unicode = event.key.keysym.unicode; //key_unicode = event.key.keysym.unicode & 0xff; DEBUGCODE { fprintf(stderr, "key_unicode = %d\n", key_unicode); } /* For now, tuxtype is case-insensitive for input, */ /* with only uppercase for answers: */ if (key_unicode >= 97 && key_unicode <= 122) key_unicode -= 32; //convert lowercase to uppercase if (key_unicode >= 224 && key_unicode <= 255) key_unicode -= 32; //same for non-US chars LOG ("After checking for lower case:\n"); DEBUGCODE { fprintf(stderr, "key_unicode = %d\n", key_unicode); } /* Now update with case-folded value: */ ans[ans_num++] = key_unicode; } } /* Handle answer: */ for (;ans_num>0;ans_num--) { /* Pick the lowest shootable comet which has the right answer: */ lowest_y = 0; lowest = -1; for (i = 0; i < MAX_COMETS; i++) if (comets[i].alive && comets[i].shootable && comets[i].expl == 0 && comets[i].ch == ans[ans_num -1 ] && comets[i].y > lowest_y) { lowest = i; lowest_y = comets[i].y; } /* If there was an comet with this answer, destroy it! */ if (lowest != -1) { /* Destroy comet: */ comets[lowest].expl = COMET_EXPL_START; /* Make next letter in word shootable: */ comets[lowest].shootable = 0; if (comets[lowest].next) comets[lowest].next->shootable = 1; /* Fire laser: */ laser.alive = LASER_START; /* this is a hack so drawing to the center of the screen works */ if (abs(comets[lowest].x - screen->w/2) < 10) { laser.x1 = screen->w / 2; laser.y1 = screen->h; laser.x2 = laser.x1; laser.y2 = comets[lowest].y; } else { laser.x1 = screen->w / 2; laser.y1 = screen->h; laser.x2 = comets[lowest].x; laser.y2 = comets[lowest].y; } PlaySound(sounds[SND_LASER]); /* 50% of the time.. */ if (0 == (rand() % 2)) { /* ... pick an animation to play: */ if (0 == (rand() % 2)) tux_anim = IMG_TUX_YES1; else tux_anim = IMG_TUX_YAY1; tux_anim_frame = ANIM_FRAME_START; } /* Increment score: */ laser_add_score( (diff_level+1) * 5 * ((screen->h - comets[lowest].y)/20 )); } else { /* Didn't hit anything! */ PlaySound(sounds[SND_BUZZ]); if (0 == (rand() % 2)) tux_img = IMG_TUX_DRAT; else tux_img = IMG_TUX_YIPE; laser_add_score( -25 * wave); } } /* Handle start-wait countdown: */ if (level_start_wait > 0) { level_start_wait--; if (level_start_wait > LEVEL_START_WAIT_START / 4) tux_img = IMG_TUX_RELAX1; else if (level_start_wait > 0) tux_img = IMG_TUX_RELAX2; else tux_img = IMG_TUX_SIT; if (level_start_wait == LEVEL_START_WAIT_START / 4) PlaySound(sounds[SND_ALARM]); } /* If Tux pressed a button, pick a new (different!) stance: */ if (tux_pressing) { while (tux_img == old_tux_img) tux_img = IMG_TUX_CONSOLE1 + (rand() % 3); PlaySound(sounds[SND_TOCK]); } /* If Tux is being animated, show the animation: */ if (tux_anim != -1) { tux_anim_frame--; if (tux_anim_frame < 0) tux_anim = -1; else tux_img = tux_anim + 1 - (tux_anim_frame / (ANIM_FRAME_START / 2)); } /* Reset Tux to sitting if he's been doing nothing for a while: */ if (old_tux_img == tux_img) { tux_same_counter++; if (tux_same_counter >= 20) old_tux_img = tux_img = IMG_TUX_SIT; if (tux_same_counter >= 60) old_tux_img = tux_img = IMG_TUX_RELAX1; } else tux_same_counter = 0; /* Handle comets: */ num_comets_alive = 0; distanceMoved += speed; for (i = 0; i < MAX_COMETS; i++) { if (comets[i].alive) { num_comets_alive++; comets[i].x = comets[i].x + 0; comets[i].y = comets[i].y + speed; if (comets[i].y >= (screen->h - images[IMG_CITY_BLUE]->h) && comets[i].expl == 0) { /* Disable shields or destroy city: */ if (cities[comets[i].city].shields) { cities[comets[i].city].shields = 0; PlaySound(sounds[SND_SHIELDSDOWN]); laser_add_score(-50 * (diff_level+1)); } else { cities[comets[i].city].expl = CITY_EXPL_START; PlaySound(sounds[SND_EXPLOSION]); laser_add_score(-100 * (diff_level+1)); } tux_anim = IMG_TUX_FIST1; tux_anim_frame = ANIM_FRAME_START; /* Destroy comet: */ comets[i].expl = COMET_EXPL_START; } /* Handle comet explosion animation: */ if (comets[i].expl != 0) { comets[i].expl--; if (comets[i].expl == 0) comets[i].alive = 0; } } } /* Handle laser: */ if (laser.alive > 0) laser.alive--; /* Comet time! */ if (level_start_wait == 0 && (frame % 5) == 0 && gameover == 0) { if (num_attackers > 0) { /* More comets to add during this wave! */ if ((num_comets_alive < 2 || ((rand() % 4) == 0)) && distanceMoved > 40) { distanceMoved = 0; laser_add_comet(diff_level); num_attackers--; } } else { if (num_comets_alive == 0) { /* Time for the next wave! */ /* FIXME: End of level stuff goes here */ if (num_cities_alive > 0) { /* Go on to the next wave: */ wave++; laser_reset_level(diff_level); } else { /* No more cities! Game over! */ gameover = GAMEOVER_COUNTER_START; } } } } /* Handle cities: */ num_cities_alive = 0; for (i = 0; i < NUM_CITIES; i++) if (cities[i].alive) { num_cities_alive++; /* Handle animated explosion: */ if (cities[i].expl) { cities[i].expl--; if (cities[i].expl == 0) cities[i].alive = 0; } } /* Handle game-over: */ if (gameover > 0) { gameover--; if (gameover == 0) done = 1; } if ((num_cities_alive==0) && (gameover == 0)) gameover = GAMEOVER_COUNTER_START; /* Draw background: */ SDL_BlitSurface(CurrentBkgd(), NULL, screen, NULL); /* Draw wave: */ dest.x = 0; dest.y = 0; dest.w = images[IMG_WAVE]->w; dest.h = images[IMG_WAVE]->h; SDL_BlitSurface(images[IMG_WAVE], NULL, screen, &dest); sprintf(str, "%d", wave); laser_draw_numbers(str, images[IMG_WAVE]->w + (images[IMG_NUMBERS]->w / 10)); /* Draw score: */ dest.x = (screen->w - ((images[IMG_NUMBERS]->w / 10) * 7) - images[IMG_SCORE]->w); dest.y = 0; dest.w = images[IMG_SCORE]->w; dest.h = images[IMG_SCORE]->h; SDL_BlitSurface(images[IMG_SCORE], NULL, screen, &dest); sprintf(str, "%.6d", score); laser_draw_numbers(str, screen->w - ((images[IMG_NUMBERS]->w / 10) * 6)); /* Draw comets: */ for (i = 0; i < MAX_COMETS; i++) if (comets[i].alive) { /* Decide which image to display: */ if (comets[i].expl == 0) img = IMG_COMET1 + ((frame + i) % 3); else img = (IMG_COMETEX2 - (comets[i].expl / (COMET_EXPL_START / 2))); /* Draw it! */ dest.x = comets[i].x - (images[img]->w / 2); dest.y = comets[i].y - images[img]->h; dest.w = images[img]->w; dest.h = images[img]->h; SDL_BlitSurface(images[img], NULL, screen, &dest); } /* Draw letters: */ for (i = 0; i < MAX_COMETS; i++) if (comets[i].alive && comets[i].expl == 0) laser_draw_let(comets[i].ch, comets[i].x, comets[i].y); /* Draw cities: */ if (frame%2 == 0) NEXT_FRAME(shield); for (i = 0; i < NUM_CITIES; i++) { /* Decide which image to display: */ if (cities[i].alive) { if (cities[i].expl == 0) img = IMG_CITY_BLUE; else img = (IMG_CITY_BLUE_EXPL5 - (cities[i].expl / (CITY_EXPL_START / 5))); } else img = IMG_CITY_BLUE_DEAD; /* Change image to appropriate color: */ img += ((wave % MAX_CITY_COLORS) * (IMG_CITY_GREEN - IMG_CITY_BLUE)); /* Draw it! */ dest.x = cities[i].x - (images[img]->w / 2); dest.y = (screen->h) - (images[img]->h); dest.w = (images[img]->w); dest.h = (images[img]->h); SDL_BlitSurface(images[img], NULL, screen, &dest); /* Draw sheilds: */ if (cities[i].shields) { dest.x = cities[i].x - (shield->frame[shield->cur]->w / 2); dest.h = (screen->h) - (shield->frame[shield->cur]->h); dest.w = src.w; dest.h = src.h; SDL_BlitSurface( shield->frame[shield->cur], NULL, screen, &dest); } } /* Draw laser: */ if (laser.alive) laser_draw_line(laser.x1, laser.y1, laser.x2, laser.y2, 255 / (LASER_START - laser.alive), 192 / (LASER_START - laser.alive), 64); laser_draw_console_image(IMG_CONSOLE); if (gameover > 0) tux_img = IMG_TUX_FIST1 + ((frame / 2) % 2); laser_draw_console_image(tux_img); /* Draw "Game Over" */ if (gameover > 0) { dest.x = (screen->w - images[IMG_GAMEOVER]->w) / 2; dest.y = (screen->h - images[IMG_GAMEOVER]->h) / 2; dest.w = images[IMG_GAMEOVER]->w; dest.h = images[IMG_GAMEOVER]->h; SDL_BlitSurface(images[IMG_GAMEOVER], NULL, screen, &dest); } /* Swap buffers: */ SDL_Flip(screen); /* If we're in "PAUSE" mode, pause! */ if (paused) { quit = Pause(); paused = 0; } /* Keep playing music: */ if (settings.sys_sound && !Mix_PlayingMusic()) MusicPlay(musics[MUS_GAME + (rand() % NUM_MUSICS)], 0); /* Pause (keep frame-rate event) */ DEBUGCODE { fprintf(stderr, "now_time = %d\tlast_time = %d, elapsed time = %d\n", now_time, last_time, now_time - last_time); } now_time = SDL_GetTicks(); if (now_time < last_time + FPS) SDL_Delay(last_time + FPS - now_time); }
void AnimationPlayer::PauseFromJS() { Pause(eUpdateStyle); }
TEST_F(BoundedQueueTest, EnqueuePauseProducerWhenQueueIsFull){ EXPECT_CALL(producer, Pause()); q.enqueue(4); q.enqueue(4); q.enqueue(4); }
/* * Show filelist from current area, called from the menu. */ void File_List() { int FileCount = 0; unsigned FileBytes = 0; _Tag T; struct _fdbarea *fdb_area = NULL; char temp[81]; iLineCount = 0; WhosDoingWhat(FILELIST, NULL); Syslog('+', "Listing File Area # %d", iAreaNumber); if (Access(exitinfo.Security, area.LTSec) == FALSE) { Enter(1); /* You don't have enough security to list this area */ pout(YELLOW, BLACK, (char *) Language(236)); Enter(2); Pause(); return; } InitTag(); if ((fdb_area = mbsedb_OpenFDB(iAreaNumber, 30)) == NULL) return; if (utf8) chartran_init((char *)"CP437", (char *)"UTF-8", 'b'); clear(); Header(); if (iLC(2) == 1) { mbsedb_CloseFDB(fdb_area); chartran_close(); return; } while (fread(&fdb, fdbhdr.recsize, 1, fdb_area->fp) == 1) { memset(&T, 0, sizeof(T)); T.Area = iAreaNumber; T.Active = FALSE; T.Size = fdb.Size; strncpy(T.SFile, fdb.Name, 12); strncpy(T.LFile, chartran(fdb.LName), 80); SetTag(T); if (ShowOneFile() == 1) { mbsedb_CloseFDB(fdb_area); chartran_close(); return; } if (fdb.Deleted) { /* D E L E T E D */ /* Uploaded by: */ snprintf(temp, 81, " -- %-12s %s [%4d] %s%s\n", fdb.Name, (char *) Language(239), fdb.TimesDL, (char *) Language(238), fdb.Uploader); PUTSTR(temp); } FileCount++; /* Increase File Counter by 1 */ FileBytes += fdb.Size; /* Increase File Byte Count */ } Mark(); Enter(1); /* Total Files: */ snprintf(temp, 81, "%s%d / %d bytes", (char *) Language(242), FileCount, FileBytes); pout(LIGHTCYAN, BLACK, temp); Enter(2); chartran_close(); iLineCount = 0; mbsedb_CloseFDB(fdb_area); Pause(); }
static int command() { FILE *fp; int i; /* string holding name of save or load file */ char sv_file[MAX_LINE_LEN + 1]; for (i = 0; i < MAX_NUM_VAR; i++) c_dummy_var[i][0] = NUL; /* no dummy variables */ if (is_definition(c_token)) define(); else if (almost_equals(c_token, "h$elp") || equals(c_token, "?")) { c_token++; do_help(1); } else if (equals(c_token, "testtime")) { /* given a format and a time string, exercise the time code */ char format[160], string[160]; struct tm tm; double secs; if (isstring(++c_token)) { quote_str(format, c_token, 159); if (isstring(++c_token)) { quote_str(string, c_token++, 159); memset(&tm, 0, sizeof(tm)); gstrptime(string, format, &tm); secs = gtimegm(&tm); fprintf(stderr, "internal = %f - %d/%d/%d::%d:%d:%d , wday=%d, yday=%d\n", secs, tm.tm_mday, tm.tm_mon + 1, tm.tm_year % 100, tm.tm_hour, tm.tm_min, tm.tm_sec, tm.tm_wday, tm.tm_yday); memset(&tm, 0, sizeof(tm)); ggmtime(&tm, secs); gstrftime(string, 159, format, secs); fprintf(stderr, "convert back \"%s\" - %d/%d/%d::%d:%d:%d , wday=%d, yday=%d\n", string, tm.tm_mday, tm.tm_mon + 1, tm.tm_year % 100, tm.tm_hour, tm.tm_min, tm.tm_sec, tm.tm_wday, tm.tm_yday); } } } else if (almost_equals(c_token, "test")) { c_token++; test_term(); } else if (almost_equals(c_token, "scr$eendump")) { c_token++; #ifdef _Windows screen_dump(); #else fputs("screendump not implemented\n", stderr); #endif } else if (almost_equals(c_token, "pa$use")) { struct value a; int sleep_time, text = 0; char buf[MAX_LINE_LEN + 1]; c_token++; sleep_time = (int) real(const_express(&a)); buf[0] = NUL; if (!(END_OF_COMMAND)) { if (!isstring(c_token)) int_error("expecting string", c_token); else { quote_str(buf, c_token, MAX_LINE_LEN); ++c_token; #ifdef _Windows if (sleep_time >= 0) #else # ifdef OS2 if (strcmp(term->name, "pm") != 0 || sleep_time >= 0) # else # ifdef MTOS if (strcmp(term->name, "mtos") != 0 || sleep_time >= 0) # endif /* MTOS */ # endif /* OS2 */ #endif /* _Windows */ fputs(buf, stderr); text = 1; } } if (sleep_time < 0) { #ifdef _Windows if (!Pause(buf)) bail_to_command_line(); #else # ifdef OS2 if (strcmp(term->name, "pm") == 0 && sleep_time < 0) { int rc; if ((rc = PM_pause(buf)) == 0) bail_to_command_line(); else if (rc == 2) { fputs(buf, stderr); text = 1; (void) fgets(buf, MAX_LINE_LEN, stdin); } } # else /* !OS2 */ # ifdef _Macintosh if (strcmp(term->name, "macintosh") == 0 && sleep_time < 0) Pause(sleep_time); # else /* !_Macintosh */ # ifdef MTOS if (strcmp(term->name, "mtos") == 0) { int MTOS_pause(char *buf); int rc; if ((rc = MTOS_pause(buf)) == 0) bail_to_command_line(); else if (rc == 2) { fputs(buf, stderr); text = 1; (void) fgets(buf, MAX_LINE_LEN, stdin); } } else if (strcmp(term->name, "atari") == 0) { char *readline(char *); char *line = readline(""); if (line) free(line); } else (void) fgets(buf, MAX_LINE_LEN, stdin); # else /* !MTOS */ # ifdef ATARI if (strcmp(term->name, "atari") == 0) { char *readline(char *); char *line = readline(""); if (line) free(line); } else (void) fgets(buf, MAX_LINE_LEN, stdin); # else /* !ATARI */ (void) fgets(buf, MAX_LINE_LEN, stdin); /* Hold until CR hit. */ # endif /* !ATARI */ # endif /* !MTOS */ # endif /* !_Macintosh */ # endif /* !OS2 */ #endif } if (sleep_time > 0) GP_SLEEP(sleep_time); if (text != 0 && sleep_time >= 0) fputc('\n', stderr); screen_ok = FALSE; } else if (almost_equals(c_token, "pr$int")) { int need_space = 0; /* space printed between two expressions only */ screen_ok = FALSE; do { ++c_token; if (isstring(c_token)) { char s[MAX_LINE_LEN]; quote_str(s, c_token, MAX_LINE_LEN); fputs(s, stderr); need_space = 0; ++c_token; } else { struct value a; (void) const_express(&a); if (need_space) putc(' ', stderr); need_space = 1; disp_value(stderr, &a); } } while (!END_OF_COMMAND && equals(c_token, ",")); (void) putc('\n', stderr); } else if (almost_equals(c_token, "fit")) { ++c_token; do_fit(); } else if (almost_equals(c_token, "up$date")) { char tmps[80]; char tmps2[80]; /* Have to initialise tmps2, otherwise * update() cannot decide whether a valid * filename was given. lh */ tmps2[0] = NUL; if (!isstring(++c_token)) int_error("Parameter filename expected", c_token); quote_str(tmps, c_token++, 80); if (!(END_OF_COMMAND)) { if (!isstring(c_token)) int_error("New parameter filename expected", c_token); else quote_str(tmps2, c_token++, 80); } update(tmps, tmps2); } else if (almost_equals(c_token, "p$lot")) { plot_token = c_token++; SET_CURSOR_WAIT; plotrequest(); SET_CURSOR_ARROW; } else if (almost_equals(c_token, "sp$lot")) { plot_token = c_token++; SET_CURSOR_WAIT; plot3drequest(); SET_CURSOR_ARROW; } else if (almost_equals(c_token, "rep$lot")) { if (replot_line[0] == NUL) int_error("no previous plot", c_token); c_token++; SET_CURSOR_WAIT; replotrequest(); SET_CURSOR_ARROW; } else if (almost_equals(c_token, "se$t")) set_command(); else if (almost_equals(c_token, "res$et")) reset_command(); else if (almost_equals(c_token, "sh$ow")) show_command(); else if (almost_equals(c_token, "cl$ear")) { term_start_plot(); if (multiplot && term->fillbox) { unsigned int x1 = (unsigned int) (xoffset * term->xmax); unsigned int y1 = (unsigned int) (yoffset * term->ymax); unsigned int width = (unsigned int) (xsize * term->xmax); unsigned int height = (unsigned int) (ysize * term->ymax); (*term->fillbox) (0, x1, y1, width, height); } term_end_plot(); screen_ok = FALSE; c_token++; } else if (almost_equals(c_token, "she$ll")) { do_shell(); screen_ok = FALSE; c_token++; } else if (almost_equals(c_token, "sa$ve")) { if (almost_equals(++c_token, "f$unctions")) { if (!isstring(++c_token)) int_error("expecting filename", c_token); else { quote_str(sv_file, c_token, MAX_LINE_LEN); save_functions(fopen(sv_file, "w")); } } else if (almost_equals(c_token, "v$ariables")) { if (!isstring(++c_token)) int_error("expecting filename", c_token); else { quote_str(sv_file, c_token, MAX_LINE_LEN); save_variables(fopen(sv_file, "w")); } } else if (almost_equals(c_token, "s$et")) { if (!isstring(++c_token)) int_error("expecting filename", c_token); else { quote_str(sv_file, c_token, MAX_LINE_LEN); save_set(fopen(sv_file, "w")); } } else if (isstring(c_token)) { quote_str(sv_file, c_token, MAX_LINE_LEN); save_all(fopen(sv_file, "w")); } else { int_error("filename or keyword 'functions', 'variables', or 'set' expected", c_token); } c_token++; } else if (almost_equals(c_token, "l$oad")) { if (!isstring(++c_token)) int_error("expecting filename", c_token); else { quote_str(sv_file, c_token, MAX_LINE_LEN); /* load_file(fp=fopen(sv_file, "r"), sv_file, FALSE); OLD * DBT 10/6/98 handle stdin as special case * passes it on to load_file() so that it gets * pushed on the stack and recusion will work, etc */ fp = strcmp(sv_file, "-") ? fopen(sv_file, "r") : stdin; load_file(fp, sv_file, FALSE); /* input_line[] and token[] now destroyed! */ c_token = num_tokens = 0; } } else if (almost_equals(c_token, "ca$ll")) { if (!isstring(++c_token)) int_error("expecting filename", c_token); else { quote_str(sv_file, c_token, MAX_LINE_LEN); load_file(fopen(sv_file, "r"), sv_file, TRUE); /* Argument list follows filename */ /* input_line[] and token[] now destroyed! */ c_token = num_tokens = 0; } } else if (almost_equals(c_token, "if")) { double exprval; struct value t; if (!equals(++c_token, "(")) /* no expression */ int_error("expecting (expression)", c_token); exprval = real(const_express(&t)); if (exprval != 0.0) { /* fake the condition of a ';' between commands */ int eolpos = token[num_tokens - 1].start_index + token[num_tokens - 1].length; --c_token; token[c_token].length = 1; token[c_token].start_index = eolpos + 2; input_line[eolpos + 2] = ';'; input_line[eolpos + 3] = NUL; } else c_token = num_tokens = 0; } else if (almost_equals(c_token, "rer$ead")) { fp = lf_top(); if (fp != (FILE *) NULL) rewind(fp); c_token++; } else if (almost_equals(c_token, "cd")) { if (!isstring(++c_token)) int_error("expecting directory name", c_token); else { quote_str(sv_file, c_token, MAX_LINE_LEN); if (changedir(sv_file)) { int_error("Can't change to this directory", c_token); } c_token++; } } else if (almost_equals(c_token, "pwd")) { GP_GETCWD(sv_file, sizeof(sv_file)); fprintf(stderr, "%s\n", sv_file); c_token++; } else if (almost_equals(c_token, "ex$it") || almost_equals(c_token, "q$uit")) { /* graphics will be tidied up in main */ return (1); } else if (!equals(c_token, ";")) { /* null statement */ #ifdef OS2 if (_osmode == OS2_MODE) { if (token[c_token].is_token) { int rc; rc = ExecuteMacro(input_line + token[c_token].start_index, token[c_token].length); if (rc == 0) { c_token = num_tokens = 0; return (0); } } } #endif int_error("invalid command", c_token); } return (0); }
/* * Scan for new files, called from menu. */ int NewfileScan(int AskStart) { FILE *pAreas; int ifDate, itDate; char *temp, *Date; int Found, Count = 0; _Tag T; struct _fdbarea *fdb_area = NULL; Date = calloc(81, sizeof(char)); temp = calloc(81, sizeof(char)); iLineCount = 2; arecno = 1; /* Reset Area Number to One */ if (AskStart) { Enter(2); /* Search for new since your last call [Y/n]: */ pout(LIGHTCYAN, BLACK, (char *) Language(273)); colour(CFG.InputColourF, CFG.InputColourB); if (toupper(Readkey()) == Keystroke(273, 1)) { Enter(1); /* Enter new date to search for [DD-MM-YYYY]: */ pout(GREEN, BLACK, (char *) Language(274)); colour(CFG.InputColourF, CFG.InputColourB); GetDate(temp, 10); } else { strcpy(temp, LastLoginDate); } } else { strcpy(temp, LastLoginDate); } Syslog('+', "NewfileScan() since %s", temp); clear(); /* File Search by Date */ pout(WHITE, BLACK, (char *) Language(275)); Enter(2); Date[0] = temp[6]; /* Swap the date around */ Date[1] = temp[7]; /* Instead of DD-MM-YYYY */ Date[2] = temp[8]; /* Let it equal YYYYMMDD */ Date[3] = temp[9]; /* Swap the date around */ Date[4] = temp[3]; /* Swap the date around */ Date[5] = temp[4]; /* because when you convert */ Date[6] = temp[0]; /* a string to an int you */ Date[7] = temp[1]; /* loose the front Zero */ Date[8] = '\0'; /* making the number smaller */ itDate = atol(Date); InitTag(); if ((pAreas = OpenFareas(FALSE)) == NULL) return 0; while (fread(&area, areahdr.recsize, 1, pAreas) == 1) { if ((Access(exitinfo.Security, area.LTSec)) && (area.Available) && (strlen(area.Password) == 0) && (area.New)) { if ((fdb_area = mbsedb_OpenFDB(arecno, 30))) { Sheader(); Found = FALSE; Nopper(); while (fread(&fdb, fdbhdr.recsize, 1, fdb_area->fp) == 1) { strcpy(temp, StrDateDMY(fdb.UploadDate)); /* Realloc Space for Date */ Date[0] = temp[6]; /* Swap the date around */ Date[1] = temp[7]; /* Instead of DD-MM-YYYY */ Date[2] = temp[8]; /* Let it equal YYYYMMDD */ Date[3] = temp[9]; /* Swap the date around */ Date[4] = temp[3]; /* Swap the date around */ Date[5] = temp[4]; /* because when you convert */ Date[6] = temp[0]; /* a string to an int you */ Date[7] = temp[1]; /* loose the front Zero */ Date[8] = '\0'; /* making the number smaller */ /* and invalid to this cause */ ifDate = atol(Date); if (ifDate >= itDate) { if (!Found) { Enter(2); if (iLC(2) == 1) { free(Date); free(temp); mbsedb_CloseFDB(fdb_area); fclose(pAreas); return 1; } Found = TRUE; } memset(&T, 0, sizeof(T)); T.Area = arecno; T.Active = FALSE; T.Size = fdb.Size; strncpy(T.SFile, fdb.Name, 12); strncpy(T.LFile, fdb.LName, 80); SetTag(T); Count++; if (ShowOneFile() == 1) { free(Date); free(temp); mbsedb_CloseFDB(fdb_area); fclose(pAreas); return 1; } } /* End of if */ } /* End of while */ mbsedb_CloseFDB(fdb_area); /* * Add 2 blank lines after found files. */ if (Found) { Enter(2); if (iLC(2) == 1) { free(Date); free(temp); fclose(pAreas); return 1; } } } /* End of open filebase */ } /* End of check new files scan */ arecno++; /* Go to next file area */ } /* End of Main */ if (Count) Syslog('+', "Found %d new files", Count); fclose(pAreas); Enter(1); if (Count) Mark(); else Pause(); free(temp); free(Date); return 1; }
/* * Upload a file. */ int Upload() { int Area, rc; unsigned int OldArea; char *arc, *temp; up_list *up = NULL, *tmpf; WhosDoingWhat(UPLOAD, NULL); Enter(1); Area = OldArea = iAreaNumber; /* * If there is a special upload area for the current area * then select it. */ if (area.Upload) Area = area.Upload; SetFileArea(Area); Syslog('+', "Upload area is %d %s", Area, area.Name); /* * Check upload access for the real upload directory. */ if (!Access(exitinfo.Security, area.UPSec)) { Enter(1); /* You do not have enough access to upload to this area */ pout(CFG.HiliteF, CFG.HiliteB, (char *) Language(278)); Enter(2); SetFileArea(OldArea); Pause(); return 0; } clear(); Enter(2); rc = upload(&up); if (rc) { Syslog('+', "Upload failed, rc=%d", rc); SetFileArea(OldArea); return 0; } Syslog('b', "upload done, start checks"); Enter(2); pout(CFG.UnderlineColourF, CFG.UnderlineColourB, (char *)"Checking your upload(s)"); Enter(1); temp = calloc(PATH_MAX, sizeof(char)); for (tmpf = up; tmpf; tmpf = tmpf->next) { snprintf(temp, PATH_MAX, "%s/%s/upl", CFG.bbs_usersdir, exitinfo.Name); chdir(temp); Syslog('b', "Checking upload %s", tmpf->filename); if ((arc = GetFileType(tmpf->filename)) == NULL) { /* * If the filetype is unknown, it is probably * a textfile or so. Import it direct. */ Syslog('b', "Unknown file type"); if (!ScanDirect(basename(tmpf->filename))) ImportFile(tmpf->filename, Area, FALSE, tmpf->size); } else { /* * We figured out the type of the uploaded file. */ Syslog('b', "File type is %s", arc); /* * MS-DOS executables are handled direct. */ if ((strcmp("EXE", arc) == 0) || (strcmp("COM", arc) == 0)) { if (!ScanDirect(basename(tmpf->filename))) ImportFile(tmpf->filename, Area, FALSE, tmpf->size); } else { switch (ScanArchive(basename(tmpf->filename), arc)) { case 0: ImportFile(tmpf->filename, Area, TRUE, tmpf->size); break; case 1: break; case 2: break; case 3: /* * No valid unarchiver found, just import after scanning, * may catch macro viri. */ if (!ScanDirect(basename(tmpf->filename))) ImportFile(tmpf->filename, Area, FALSE, tmpf->size); break; } } } } tidy_upload(&up); free(temp); Home(); SetFileArea(OldArea); Pause(); return 1; }
/* * Search for a file, called from the menu. */ int FilenameScan() { FILE *pAreas; int Found, Count = 0; char mask[256]; char *Name; _Tag T; unsigned int OldArea; struct _fdbarea *fdb_area = NULL; Name = calloc(81, sizeof(char)); OldArea = iAreaNumber; iLineCount = 2; /* Reset Line Counter to Zero */ arecno = 1; /* Reset Area Number to One */ Enter(2); /* Accepts wildcards such as : *.zip, *.gz, *.* */ pout(WHITE, BLACK, (char *) Language(269)); Enter(2); /* Enter filename to search for : */ pout(LIGHTCYAN, BLACK, (char *) Language(271)); colour(CFG.InputColourF, CFG.InputColourB); GetstrC(Name, 80); if ((strcmp(Name, "")) == 0) { free(Name); return 0; } strcpy(mask, re_mask(Name, TRUE)); Syslog('+', "FilenameScan(): \"%s\" -> \"%s\"", Name, mask); free(Name); re_comp(mask); clear(); /* File Search by Filename */ pout(WHITE, BLACK, (char *) Language(272)); Enter(1); InitTag(); if ((pAreas = OpenFareas(FALSE)) == NULL) return 0; while (fread(&area, areahdr.recsize, 1, pAreas) == 1) { if ((Access(exitinfo.Security, area.LTSec)) && (area.Available) && (strlen(area.Password) == 0)) { if ((fdb_area = mbsedb_OpenFDB(arecno, 30))) { Found = FALSE; Sheader(); Nopper(); while (fread(&fdb, fdbhdr.recsize, 1, fdb_area->fp) == 1) { if (re_exec(fdb.Name) || re_exec(fdb.LName)) { if (!Found) { Enter(2); if (iLC(2) == 1) { SetFileArea(OldArea); return 1; } Found = TRUE; } memset(&T, 0, sizeof(T)); T.Area = arecno; T.Active = FALSE; T.Size = fdb.Size; strncpy(T.SFile, fdb.Name, 12); strncpy(T.LFile, fdb.LName, 81); SetTag(T); Count++; if (ShowOneFile() == 1) { SetFileArea(OldArea); return 1; } } } /* End of while */ mbsedb_CloseFDB(fdb_area); if (Found) { Enter(2); if (iLC(2) == 1) { SetFileArea(OldArea); return 1; } } } /* End Check for LTSec */ } /* if access */ arecno++; /* Go to next file area */ } /* End of Main */ Syslog('+', "Found %d files", Count); fclose(pAreas); Enter(1); if (Count) Mark(); else Pause(); SetFileArea(OldArea); return 1; }
/* * Search for keyword, called from menu. */ int KeywordScan() { FILE *pAreas; int i, z, y, Found, Count = 0; char *Name, *tmpname, *BigDesc, temp[81]; _Tag T; unsigned int OldArea; struct _fdbarea *fdb_area = NULL; Name = calloc(81, sizeof(char)); tmpname = calloc(81, sizeof(char)); BigDesc = calloc(1230, sizeof(char)); OldArea = iAreaNumber; iLineCount = 2; /* Reset Line Counter to Zero */ arecno = 1; /* Reset Area Number to One */ Enter(2); /* Enter keyword to use for Search: */ pout(LIGHTCYAN, BLACK, (char *) Language(267)); colour(CFG.InputColourF, CFG.InputColourB); GetstrC(Name, 80); if ((strcmp(Name, "")) == 0) return 0; strcpy(tmpname, tl(Name)); strcpy(Name, ""); y = strlen(tmpname); for (z = 0; z < y; z++) { if (tmpname[z] != '*') { snprintf(temp, 81, "%c", tmpname[z]); strcat(Name, temp); } } Syslog('+', "KeywordScan(): \"%s\"", Name); clear(); /* File search by keyword */ pout(WHITE, BLACK, (char *) Language(268)); Enter(1); InitTag(); if ((pAreas = OpenFareas(FALSE)) == NULL) return 0; while (fread(&area, areahdr.recsize, 1, pAreas) == 1) { if ((Access(exitinfo.Security, area.LTSec)) && (area.Available) && (strlen(area.Password) == 0)) { if ((fdb_area = mbsedb_OpenFDB(arecno, 30))) { Nopper(); Found = FALSE; Sheader(); while (fread(&fdb, fdbhdr.recsize, 1, fdb_area->fp) == 1) { for (i = 0; i < 25; i++) snprintf(BigDesc, 1230, "%s%s", BigDesc, *(fdb.Desc + i)); if ((strstr(fdb.Name,Name) != NULL) || (strstr(tl(BigDesc), Name) != NULL)) { if (!Found) { Enter(2); if (iLC(2) == 1) { free(BigDesc); free(Name); free(tmpname); SetFileArea(OldArea); return 1; } Found = TRUE; } memset(&T, 0, sizeof(T)); T.Area = arecno; T.Active = FALSE; T.Size = fdb.Size; strncpy(T.SFile, fdb.Name, 12); strncpy(T.LFile, fdb.LName, 80); SetTag(T); Count++; if (ShowOneFile() == 1) { free(BigDesc); free(Name); free(tmpname); SetFileArea(OldArea); return 1; } } strcpy(BigDesc, ""); /* Clear BigDesc */ } /* while */ mbsedb_CloseFDB(fdb_area); if (Found) { Enter(2); if (iLC(2) == 1) { free(BigDesc); free(Name); free(tmpname); SetFileArea(OldArea); return 1; } } } /* End check for LTSec */ } /* if access */ arecno++; /* Go to next file area */ } /* End of Main */ Syslog('+', "Found %d files", Count); free(BigDesc); free(Name); free(tmpname); fclose(pAreas); Enter(1); if (Count) Mark(); else Pause(); SetFileArea(OldArea); return 1; }
/* * Show Raw directory */ void File_RawDir(char *OpData) { DIR *dirp; char *FileName, *temp, temp2[81]; int iFileCount = 0, LineCount = 2, iBytes = 0; struct dirent *dp; struct stat statfile; FileName = calloc(PATH_MAX, sizeof(char)); temp = calloc(PATH_MAX, sizeof(char)); if ((strcmp(OpData, "/F")) == 0) strcpy(temp, sAreaPath); else strcpy(temp, OpData); if ((dirp = opendir(temp)) == NULL) { clear(); WriteError("$RawDir: Can't open dir: %s", temp); Enter(1); pout(LIGHTRED, BLACK, (char *)"Can't open directory for raw listing!"); Enter(2); Pause(); } else { if (utf8) chartran_init((char *)"CP437", (char *)"UTF-8", 'b'); clear(); /* Filename Size Date */ pout(CFG.HiliteF, CFG.HiliteB, (char *) Language(261)); Enter(1); PUTSTR(chartran(fLine_str(78))); while ((dp = readdir( dirp )) != NULL ) { snprintf(FileName, PATH_MAX, "%s/%s", temp, dp->d_name); if (*(dp->d_name) != '.') { iFileCount++; if (stat(FileName, &statfile) != 0) { pout(LIGHTRED, BLACK, (char *)"Can't stat file "); PUTSTR(FileName); } else { iBytes += statfile.st_size; snprintf(temp2, 81, "%-54s " , dp->d_name); pout(YELLOW, BLACK, temp2); snprintf(temp2, 81, "%-12d", (int)(statfile.st_size)); pout(LIGHTMAGENTA, BLACK, temp2); snprintf(temp2, 81, "%-10s", StrDateDMY(statfile.st_mtime)); pout(LIGHTGREEN, BLACK, temp2); } Enter(1); LineCount++; if (LineCount == rows) { Pause(); LineCount = 0; } } } colour(CFG.HiliteF, CFG.HiliteB); PUTSTR(chartran(fLine_str(78))); /* Total Files: */ /* Bytes */ snprintf(temp2, 81, "%s %d, %d %s", (char *) Language(242), iFileCount, iBytes, (char *) Language(354)); pout(LIGHTGREEN, BLACK, temp2); Enter(2); Pause(); closedir(dirp); chartran_close(); } free(temp); free(FileName); }
/** * The window procedure which handles the application events. */ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_SETFOCUS: { GetCursorPos(&gLastMousePos); gFocused = true; break; } case WM_KILLFOCUS: { gFocused = false; break; } // An explicit paint message case WM_PAINT: { if (!gReinitializeRequired) { // This is only really called when something is dragged over top of the window RenderScene(); } ValidateRect(hWnd, nullptr); break; } // Handle window size changes and pause streaming when minimized since the back buffer might not be available case WM_SIZE: { // Update the pause state int wmEvent = LOWORD(wParam); if (wmEvent == SIZE_MINIMIZED) { gPaused = true; Pause(); } else if (wmEvent == SIZE_RESTORED) { gPaused = false; } break; } case WM_CHAR: { if ( AcceptingChatInput() ) { unsigned char ch = static_cast<unsigned char>(wParam); // backspace or visible character if ( ch == 8 || (ch >= 32 && ch < 127) ) { AppendChatInput(ch); } } break; } // Handle key presses case WM_KEYDOWN: { if ( AcceptingChatInput() ) { switch (wParam) { case VK_RETURN: { EndChatInput(true); break; } case VK_ESCAPE: { EndChatInput(false); break; } } } else { switch (wParam) { // begin chat input case VK_RETURN: { BeginChatInput(); break; } // Toggle streaming case VK_F5: { if (IsStreaming()) { gStreamingDesired = false; StopStreaming(); } else { gStreamingDesired = true; StartStreaming(gBroadcastWidth, gBroadcastHeight, gBroadcastFramesPerSecond); } break; } // Toggle fullscreen case VK_F12: { gFullscreen = !gFullscreen; gReinitializeRequired = true; break; } // Toggle broadcast resolution case VK_F1: { bool streaming = IsStreaming(); if (streaming) { StopStreaming(); } if (gBroadcastWidth == 640) { gBroadcastWidth = 1024; gBroadcastHeight = 768; } else { gBroadcastWidth = 640; gBroadcastHeight = 368; } if (streaming) { StartStreaming(gBroadcastWidth, gBroadcastHeight, gBroadcastFramesPerSecond); } break; } } } break; } // Close the application case WM_DESTROY: { PostQuitMessage(0); break; } default: { return DefWindowProc(hWnd, message, wParam, lParam); } } return 0; }
bool ReplayMode::ReplayAnalyze(char* msg, unsigned int len) { char* pbuf = msg; int player, count; is_restarting = false; while (pbuf - msg < (int)len) { if(is_closing) return false; if(is_restarting) { is_restarting = false; return true; } if(is_swaping) { mainGame->gMutex.Lock(); mainGame->dField.ReplaySwap(); mainGame->gMutex.Unlock(); is_swaping = false; } char* offset = pbuf; bool pauseable = true; mainGame->dInfo.curMsg = BufferIO::ReadUInt8(pbuf); switch (mainGame->dInfo.curMsg) { case MSG_RETRY: { if(mainGame->dInfo.isReplaySkiping) { mainGame->dInfo.isReplaySkiping = false; mainGame->dField.RefreshAllCards(); mainGame->gMutex.Unlock(); } mainGame->gMutex.Lock(); mainGame->stMessage->setText(L"Error occurs."); mainGame->PopupElement(mainGame->wMessage); mainGame->gMutex.Unlock(); mainGame->actionSignal.Reset(); mainGame->actionSignal.Wait(); return false; } case MSG_HINT: { pbuf += 6; DuelClient::ClientAnalyze(offset, pbuf - offset); break; } case MSG_WIN: { if(mainGame->dInfo.isReplaySkiping) { mainGame->dInfo.isReplaySkiping = false; mainGame->dField.RefreshAllCards(); mainGame->gMutex.Unlock(); } pbuf += 2; DuelClient::ClientAnalyze(offset, pbuf - offset); return false; } case MSG_SELECT_BATTLECMD: { player = BufferIO::ReadInt8(pbuf); count = BufferIO::ReadInt8(pbuf); pbuf += count * 11; count = BufferIO::ReadInt8(pbuf); pbuf += count * 8 + 2; ReplayRefresh(); return ReadReplayResponse(); } case MSG_SELECT_IDLECMD: { player = BufferIO::ReadInt8(pbuf); count = BufferIO::ReadInt8(pbuf); pbuf += count * 7; count = BufferIO::ReadInt8(pbuf); pbuf += count * 7; count = BufferIO::ReadInt8(pbuf); pbuf += count * 7; count = BufferIO::ReadInt8(pbuf); pbuf += count * 7; count = BufferIO::ReadInt8(pbuf); pbuf += count * 7; count = BufferIO::ReadInt8(pbuf); pbuf += count * 11 + 3; ReplayRefresh(); return ReadReplayResponse(); } case MSG_SELECT_EFFECTYN: { player = BufferIO::ReadInt8(pbuf); pbuf += 8; return ReadReplayResponse(); } case MSG_SELECT_YESNO: { player = BufferIO::ReadInt8(pbuf); pbuf += 4; return ReadReplayResponse(); } case MSG_SELECT_OPTION: { player = BufferIO::ReadInt8(pbuf); count = BufferIO::ReadInt8(pbuf); pbuf += count * 4; return ReadReplayResponse(); } case MSG_SELECT_CARD: case MSG_SELECT_TRIBUTE: { player = BufferIO::ReadInt8(pbuf); pbuf += 3; count = BufferIO::ReadInt8(pbuf); pbuf += count * 8; return ReadReplayResponse(); } case MSG_SELECT_CHAIN: { player = BufferIO::ReadInt8(pbuf); count = BufferIO::ReadInt8(pbuf); pbuf += 10 + count * 13; return ReadReplayResponse(); } case MSG_SELECT_PLACE: case MSG_SELECT_DISFIELD: { player = BufferIO::ReadInt8(pbuf); pbuf += 5; return ReadReplayResponse(); } case MSG_SELECT_POSITION: { player = BufferIO::ReadInt8(pbuf); pbuf += 5; return ReadReplayResponse(); } case MSG_SELECT_COUNTER: { player = BufferIO::ReadInt8(pbuf); pbuf += 4; count = BufferIO::ReadInt8(pbuf); pbuf += count * 9; return ReadReplayResponse(); } case MSG_SELECT_SUM: { pbuf++; player = BufferIO::ReadInt8(pbuf); pbuf += 6; count = BufferIO::ReadInt8(pbuf); pbuf += count * 11; count = BufferIO::ReadInt8(pbuf); pbuf += count * 11; return ReadReplayResponse(); } case MSG_SORT_CARD: case MSG_SORT_CHAIN: { player = BufferIO::ReadInt8(pbuf); count = BufferIO::ReadInt8(pbuf); pbuf += count * 7; return ReadReplayResponse(); } case MSG_CONFIRM_DECKTOP: { player = BufferIO::ReadInt8(pbuf); count = BufferIO::ReadInt8(pbuf); pbuf += count * 7; DuelClient::ClientAnalyze(offset, pbuf - offset); break; } case MSG_CONFIRM_CARDS: { player = BufferIO::ReadInt8(pbuf); count = BufferIO::ReadInt8(pbuf); pbuf += count * 7; DuelClient::ClientAnalyze(offset, pbuf - offset); break; } case MSG_SHUFFLE_DECK: { player = BufferIO::ReadInt8(pbuf); DuelClient::ClientAnalyze(offset, pbuf - offset); ReplayRefreshDeck(player); break; } case MSG_SHUFFLE_HAND: { /*int oplayer = */BufferIO::ReadInt8(pbuf); int count = BufferIO::ReadInt8(pbuf); pbuf += count * 4; DuelClient::ClientAnalyze(offset, pbuf - offset); break; } case MSG_REFRESH_DECK: { pbuf++; DuelClient::ClientAnalyze(offset, pbuf - offset); break; } case MSG_SWAP_GRAVE_DECK: { player = BufferIO::ReadInt8(pbuf); DuelClient::ClientAnalyze(offset, pbuf - offset); ReplayRefreshGrave(player); break; } case MSG_REVERSE_DECK: { DuelClient::ClientAnalyze(offset, pbuf - offset); ReplayRefreshDeck(0); ReplayRefreshDeck(1); break; } case MSG_DECK_TOP: { pbuf += 6; DuelClient::ClientAnalyze(offset, pbuf - offset); break; } case MSG_SHUFFLE_SET_CARD: { count = BufferIO::ReadInt8(pbuf); pbuf += count * 8; DuelClient::ClientAnalyze(offset, pbuf - offset); break; } case MSG_NEW_TURN: { if(skip_turn) { skip_turn--; if(skip_turn == 0) { mainGame->dInfo.isReplaySkiping = false; mainGame->dField.RefreshAllCards(); mainGame->gMutex.Unlock(); } } player = BufferIO::ReadInt8(pbuf); DuelClient::ClientAnalyze(offset, pbuf - offset); break; } case MSG_NEW_PHASE: { pbuf += 2; DuelClient::ClientAnalyze(offset, pbuf - offset); ReplayRefresh(); break; } case MSG_MOVE: { int pc = pbuf[4]; int pl = pbuf[5]; /*int ps = pbuf[6];*/ /*int pp = pbuf[7];*/ int cc = pbuf[8]; int cl = pbuf[9]; int cs = pbuf[10]; /*int cp = pbuf[11];*/ pbuf += 16; DuelClient::ClientAnalyze(offset, pbuf - offset); if(cl && !(cl & 0x80) && (pl != cl || pc != cc)) ReplayRefreshSingle(cc, cl, cs); break; } case MSG_POS_CHANGE: { pbuf += 9; DuelClient::ClientAnalyze(offset, pbuf - offset); break; } case MSG_SET: { pbuf += 8; DuelClient::ClientAnalyze(offset, pbuf - offset); pauseable = false; break; } case MSG_SWAP: { pbuf += 16; DuelClient::ClientAnalyze(offset, pbuf - offset); break; } case MSG_FIELD_DISABLED: { pbuf += 4; DuelClient::ClientAnalyze(offset, pbuf - offset); pauseable = false; break; } case MSG_SUMMONING: { pbuf += 8; DuelClient::ClientAnalyze(offset, pbuf - offset); pauseable = false; break; } case MSG_SUMMONED: { DuelClient::ClientAnalyze(offset, pbuf - offset); ReplayRefresh(); break; } case MSG_SPSUMMONING: { pbuf += 8; DuelClient::ClientAnalyze(offset, pbuf - offset); pauseable = false; break; } case MSG_SPSUMMONED: { DuelClient::ClientAnalyze(offset, pbuf - offset); ReplayRefresh(); break; } case MSG_FLIPSUMMONING: { pbuf += 8; DuelClient::ClientAnalyze(offset, pbuf - offset); pauseable = false; break; } case MSG_FLIPSUMMONED: { DuelClient::ClientAnalyze(offset, pbuf - offset); ReplayRefresh(); break; } case MSG_CHAINING: { pbuf += 16; DuelClient::ClientAnalyze(offset, pbuf - offset); break; } case MSG_CHAINED: { pbuf++; DuelClient::ClientAnalyze(offset, pbuf - offset); ReplayRefresh(); break; } case MSG_CHAIN_SOLVING: { pbuf++; DuelClient::ClientAnalyze(offset, pbuf - offset); pauseable = false; break; } case MSG_CHAIN_SOLVED: { pbuf++; DuelClient::ClientAnalyze(offset, pbuf - offset); ReplayRefresh(); pauseable = false; break; } case MSG_CHAIN_END: { DuelClient::ClientAnalyze(offset, pbuf - offset); ReplayRefresh(); pauseable = false; break; } case MSG_CHAIN_NEGATED: { pbuf++; DuelClient::ClientAnalyze(offset, pbuf - offset); break; } case MSG_CHAIN_DISABLED: { pbuf++; DuelClient::ClientAnalyze(offset, pbuf - offset); break; } case MSG_CARD_SELECTED: case MSG_RANDOM_SELECTED: { player = BufferIO::ReadInt8(pbuf); count = BufferIO::ReadInt8(pbuf); pbuf += count * 4; DuelClient::ClientAnalyze(offset, pbuf - offset); pauseable = false; break; } case MSG_BECOME_TARGET: { count = BufferIO::ReadInt8(pbuf); pbuf += count * 4; DuelClient::ClientAnalyze(offset, pbuf - offset); break; } case MSG_DRAW: { player = BufferIO::ReadInt8(pbuf); count = BufferIO::ReadInt8(pbuf); pbuf += count * 4; DuelClient::ClientAnalyze(offset, pbuf - offset); break; } case MSG_DAMAGE: { pbuf += 5; DuelClient::ClientAnalyze(offset, pbuf - offset); break; } case MSG_RECOVER: { pbuf += 5; DuelClient::ClientAnalyze(offset, pbuf - offset); break; } case MSG_EQUIP: { pbuf += 8; DuelClient::ClientAnalyze(offset, pbuf - offset); pauseable = false; break; } case MSG_LPUPDATE: { pbuf += 5; DuelClient::ClientAnalyze(offset, pbuf - offset); break; } case MSG_UNEQUIP: { pbuf += 4; DuelClient::ClientAnalyze(offset, pbuf - offset); pauseable = false; break; } case MSG_CARD_TARGET: { pbuf += 8; DuelClient::ClientAnalyze(offset, pbuf - offset); pauseable = false; break; } case MSG_CANCEL_TARGET: { pbuf += 8; DuelClient::ClientAnalyze(offset, pbuf - offset); pauseable = false; break; } case MSG_PAY_LPCOST: { pbuf += 5; DuelClient::ClientAnalyze(offset, pbuf - offset); break; } case MSG_ADD_COUNTER: { pbuf += 7; DuelClient::ClientAnalyze(offset, pbuf - offset); break; } case MSG_REMOVE_COUNTER: { pbuf += 7; DuelClient::ClientAnalyze(offset, pbuf - offset); break; } case MSG_ATTACK: { pbuf += 8; DuelClient::ClientAnalyze(offset, pbuf - offset); break; } case MSG_BATTLE: { pbuf += 26; DuelClient::ClientAnalyze(offset, pbuf - offset); pauseable = false; break; } case MSG_ATTACK_DISABLED: { DuelClient::ClientAnalyze(offset, pbuf - offset); pauseable = false; break; } case MSG_DAMAGE_STEP_START: { DuelClient::ClientAnalyze(offset, pbuf - offset); ReplayRefresh(); pauseable = false; break; } case MSG_DAMAGE_STEP_END: { DuelClient::ClientAnalyze(offset, pbuf - offset); ReplayRefresh(); pauseable = false; break; } case MSG_MISSED_EFFECT: { pbuf += 8; DuelClient::ClientAnalyze(offset, pbuf - offset); break; } case MSG_TOSS_COIN: { player = BufferIO::ReadInt8(pbuf); count = BufferIO::ReadInt8(pbuf); pbuf += count; DuelClient::ClientAnalyze(offset, pbuf - offset); break; } case MSG_TOSS_DICE: { player = BufferIO::ReadInt8(pbuf); count = BufferIO::ReadInt8(pbuf); pbuf += count; DuelClient::ClientAnalyze(offset, pbuf - offset); break; } case MSG_ANNOUNCE_RACE: { player = BufferIO::ReadInt8(pbuf); pbuf += 5; return ReadReplayResponse(); } case MSG_ANNOUNCE_ATTRIB: { player = BufferIO::ReadInt8(pbuf); pbuf += 5; return ReadReplayResponse(); } case MSG_ANNOUNCE_CARD: { player = BufferIO::ReadInt8(pbuf); pbuf += 4; return ReadReplayResponse(); } case MSG_ANNOUNCE_NUMBER: case MSG_ANNOUNCE_CARD_FILTER: { player = BufferIO::ReadInt8(pbuf); count = BufferIO::ReadInt8(pbuf); pbuf += 4 * count; return ReadReplayResponse(); } case MSG_CARD_HINT: { pbuf += 9; DuelClient::ClientAnalyze(offset, pbuf - offset); break; } case MSG_PLAYER_HINT: { pbuf += 6; DuelClient::ClientAnalyze(offset, pbuf - offset); break; } case MSG_MATCH_KILL: { pbuf += 4; break; } case MSG_TAG_SWAP: { player = pbuf[0]; pbuf += pbuf[2] * 4 + pbuf[4] * 4 + 9; DuelClient::ClientAnalyze(offset, pbuf - offset); ReplayRefreshDeck(player); ReplayRefreshExtra(player); break; } } if(pauseable) { if(skip_step) { skip_step--; if(skip_step == 0) { Pause(true, false); mainGame->dInfo.isStarted = true; mainGame->dInfo.isReplaySkiping = false; mainGame->dField.RefreshAllCards(); mainGame->gMutex.Unlock(); } } if(is_pausing) { is_paused = true; mainGame->actionSignal.Reset(); mainGame->actionSignal.Wait(); is_paused = false; } current_step++; } } return true; }
bool CAESinkPULSE::Initialize(AEAudioFormat &format, std::string &device) { { CSingleLock lock(m_sec); m_IsAllocated = false; } m_passthrough = false; m_BytesPerSecond = 0; m_BufferSize = 0; m_filled_bytes = 0; m_lastPackageStamp = 0; m_Channels = 0; m_Stream = NULL; m_Context = NULL; m_periodSize = 0; if (!SetupContext(NULL, &m_Context, &m_MainLoop)) { CLog::Log(LOGNOTICE, "PulseAudio might not be running. Context was not created."); Deinitialize(); return false; } pa_threaded_mainloop_lock(m_MainLoop); struct pa_channel_map map; pa_channel_map_init(&map); // PULSE cannot cope with e.g. planar formats so we fall back to FLOAT // when we receive an invalid pulse format pa_sample_format pa_fmt; // PA can only handle IEC packed RAW format if we get a RAW format if (format.m_dataFormat == AE_FMT_RAW) { pa_fmt = AEStreamFormatToPulseFormat(format.m_streamInfo.m_type); m_passthrough = true; } else pa_fmt = AEFormatToPulseFormat(format.m_dataFormat); if (pa_fmt == PA_SAMPLE_INVALID) { CLog::Log(LOGDEBUG, "PULSE does not support format: %s - will fallback to AE_FMT_FLOAT", CAEUtil::DataFormatToStr(format.m_dataFormat)); format.m_dataFormat = AE_FMT_FLOAT; pa_fmt = PA_SAMPLE_FLOAT32; m_passthrough = false; } if(m_passthrough) { map.channels = 2; format.m_channelLayout = AE_CH_LAYOUT_2_0; } else { map = AEChannelMapToPAChannel(format.m_channelLayout); // if count has changed we need to fit the AE Map if(map.channels != format.m_channelLayout.Count()) format.m_channelLayout = PAChannelToAEChannelMap(map); } m_Channels = format.m_channelLayout.Count(); // store information about current sink SinkInfoStruct sinkStruct; sinkStruct.mainloop = m_MainLoop; sinkStruct.device_found = false; // get real sample rate of the device we want to open - to avoid resampling bool isDefaultDevice = (device == "Default"); WaitForOperation(pa_context_get_sink_info_by_name(m_Context, isDefaultDevice ? NULL : device.c_str(), SinkInfoCallback, &sinkStruct), m_MainLoop, "Get Sink Info"); // only check if the device is existing - don't alter the sample rate if (!sinkStruct.device_found) { CLog::Log(LOGERROR, "PulseAudio: Sink %s not found", device.c_str()); pa_threaded_mainloop_unlock(m_MainLoop); Deinitialize(); return false; } // Pulse can resample everything between 1 hz and 192000 hz / 384000 hz (starting with 9.0) // Make sure we are in the range that we originally added unsigned int max_pulse_sample_rate = 192000U; #if PA_CHECK_VERSION(9,0,0) max_pulse_sample_rate = 384000U; #endif format.m_sampleRate = std::max(5512U, std::min(format.m_sampleRate, max_pulse_sample_rate)); pa_format_info *info[1]; info[0] = pa_format_info_new(); if (m_passthrough) info[0]->encoding = AEStreamFormatToPulseEncoding(format.m_streamInfo.m_type); else info[0]->encoding = AEFormatToPulseEncoding(format.m_dataFormat); if (info[0]->encoding == PA_ENCODING_INVALID) { CLog::Log(LOGERROR, "PulseAudio: Invalid Encoding"); pa_format_info_free(info[0]); pa_threaded_mainloop_unlock(m_MainLoop); Deinitialize(); return false; } if(!m_passthrough) { pa_format_info_set_sample_format(info[0], pa_fmt); pa_format_info_set_channel_map(info[0], &map); } pa_format_info_set_channels(info[0], m_Channels); // PA requires the original encoded rate in order to do EAC3 unsigned int samplerate = format.m_sampleRate; if (m_passthrough && (info[0]->encoding == PA_ENCODING_EAC3_IEC61937)) { // this is only used internally for PA to use EAC3 samplerate = format.m_streamInfo.m_sampleRate; } pa_format_info_set_rate(info[0], samplerate); if (!pa_format_info_valid(info[0])) { CLog::Log(LOGERROR, "PulseAudio: Invalid format info"); pa_format_info_free(info[0]); pa_threaded_mainloop_unlock(m_MainLoop); Deinitialize(); return false; } pa_sample_spec spec; #if PA_CHECK_VERSION(2,0,0) pa_format_info_to_sample_spec(info[0], &spec, NULL); #else spec.rate = (info[0]->encoding == PA_ENCODING_EAC3_IEC61937) ? 4 * samplerate : samplerate; spec.format = pa_fmt; spec.channels = m_Channels; #endif if (!pa_sample_spec_valid(&spec)) { CLog::Log(LOGERROR, "PulseAudio: Invalid sample spec"); pa_format_info_free(info[0]); pa_threaded_mainloop_unlock(m_MainLoop); Deinitialize(); return false; } m_BytesPerSecond = pa_bytes_per_second(&spec); unsigned int frameSize = pa_frame_size(&spec); m_Stream = pa_stream_new_extended(m_Context, "kodi audio stream", info, 1, NULL); pa_format_info_free(info[0]); if (m_Stream == NULL) { CLog::Log(LOGERROR, "PulseAudio: Could not create a stream"); pa_threaded_mainloop_unlock(m_MainLoop); Deinitialize(); return false; } pa_stream_set_state_callback(m_Stream, StreamStateCallback, m_MainLoop); pa_stream_set_write_callback(m_Stream, StreamRequestCallback, m_MainLoop); pa_stream_set_latency_update_callback(m_Stream, StreamLatencyUpdateCallback, m_MainLoop); // default buffer construction // align with AE's max buffer unsigned int latency = m_BytesPerSecond / 2.5; // 400 ms unsigned int process_time = latency / 4; // 100 ms if(sinkStruct.isHWDevice) { // on hw devices buffers can be further reduced // 200ms max latency // 50ms min packet size latency = m_BytesPerSecond / 5; process_time = latency / 4; } pa_buffer_attr buffer_attr; buffer_attr.fragsize = latency; buffer_attr.maxlength = (uint32_t) -1; buffer_attr.minreq = process_time; buffer_attr.prebuf = (uint32_t) -1; buffer_attr.tlength = latency; if (pa_stream_connect_playback(m_Stream, isDefaultDevice ? NULL : device.c_str(), &buffer_attr, ((pa_stream_flags)(PA_STREAM_INTERPOLATE_TIMING | PA_STREAM_AUTO_TIMING_UPDATE | PA_STREAM_ADJUST_LATENCY)), NULL, NULL) < 0) { CLog::Log(LOGERROR, "PulseAudio: Failed to connect stream to output"); pa_threaded_mainloop_unlock(m_MainLoop); Deinitialize(); return false; } /* Wait until the stream is ready */ do { pa_threaded_mainloop_wait(m_MainLoop); CLog::Log(LOGDEBUG, "PulseAudio: Stream %s", StreamStateToString(pa_stream_get_state(m_Stream))); } while (pa_stream_get_state(m_Stream) != PA_STREAM_READY && pa_stream_get_state(m_Stream) != PA_STREAM_FAILED); if (pa_stream_get_state(m_Stream) == PA_STREAM_FAILED) { CLog::Log(LOGERROR, "PulseAudio: Waited for the stream but it failed"); pa_threaded_mainloop_unlock(m_MainLoop); Deinitialize(); return false; } const pa_buffer_attr *a; if (!(a = pa_stream_get_buffer_attr(m_Stream))) { CLog::Log(LOGERROR, "PulseAudio: %s", pa_strerror(pa_context_errno(m_Context))); pa_threaded_mainloop_unlock(m_MainLoop); Deinitialize(); return false; } else { unsigned int packetSize = a->minreq; m_BufferSize = a->tlength; m_periodSize = a->minreq; format.m_frames = packetSize / frameSize; } { CSingleLock lock(m_sec); // Register Callback for Sink changes pa_context_set_subscribe_callback(m_Context, SinkChangedCallback, this); const pa_subscription_mask_t mask = PA_SUBSCRIPTION_MASK_SINK; pa_operation *op = pa_context_subscribe(m_Context, mask, NULL, this); if (op != NULL) pa_operation_unref(op); // Register Callback for Sink Info changes - this handles volume pa_context_set_subscribe_callback(m_Context, SinkInputInfoChangedCallback, this); const pa_subscription_mask_t mask_input = PA_SUBSCRIPTION_MASK_SINK_INPUT; pa_operation* op_sinfo = pa_context_subscribe(m_Context, mask_input, NULL, this); if (op_sinfo != NULL) pa_operation_unref(op_sinfo); } pa_threaded_mainloop_unlock(m_MainLoop); format.m_frameSize = frameSize; m_format = format; format.m_dataFormat = m_passthrough ? AE_FMT_S16NE : format.m_dataFormat; CLog::Log(LOGNOTICE, "PulseAudio: Opened device %s in %s mode with Buffersize %u ms", device.c_str(), m_passthrough ? "passthrough" : "pcm", (unsigned int) ((m_BufferSize / (float) m_BytesPerSecond) * 1000)); // Cork stream will resume when adding first package Pause(true); { CSingleLock lock(m_sec); m_IsAllocated = true; } return true; }
//////////////////////////////////////////////////////////// /// Pause a music //////////////////////////////////////////////////////////// void sfMusic_Pause(sfMusic* Music) { CSFML_CALL(Music, Pause()); }
TEST_F(BoundedQueueTest, DequeuePauseConsumerWhenQueueInEmpty) { q.enqueue(3); EXPECT_CALL(consumer, Pause()); q.dequeue(); }
/* * Change default archiver. */ void Chg_Archiver() { FILE *fp; int Found = FALSE; char *temp; temp = calloc(PATH_MAX, sizeof(char)); ReadExitinfo(); Syslog('+', "Old archiver %s", exitinfo.Archiver); while(TRUE) { snprintf(temp, PATH_MAX, "%s/etc/archiver.data", getenv("MBSE_ROOT")); if ((fp = fopen(temp, "r")) == NULL) { WriteError("$Can't open %s", temp); /* Can't open archiver file. */ Enter(1); PUTSTR((char *) Language(86)); Enter(2); Pause(); free(temp); return; } fread(&archiverhdr, sizeof(archiverhdr), 1, fp); Enter(1); /* Select your preferred archiver */ pout(CFG.HiliteF, CFG.HiliteB, (char *) Language(87)); Enter(2); while (fread(&archiver, archiverhdr.recsize, 1, fp) == 1) { if (archiver.available && strlen(archiver.marc) && strlen(archiver.farc)) { colour(LIGHTBLUE, BLACK); snprintf(temp, 81, "%-6s", archiver.name); PUTSTR(temp); colour(WHITE, BLACK); snprintf(temp, 81, "%s\r\n", archiver.comment); PUTSTR(temp); } } Enter(1); /* Select Archiver (Enter to Quit): */ pout(CFG.HiliteF, CFG.HiliteB, (char *) Language(88)); alarm_on(); memset(temp, 0, PATH_MAX); GetstrC(temp, 5); if (strlen(temp) == 0) { free(temp); return; } Found = FALSE; fseek(fp, archiverhdr.hdrsize, SEEK_SET); while (fread(&archiver, archiverhdr.recsize, 1, fp) == 1) { if (archiver.available && strlen(archiver.marc) && strlen(archiver.farc)) { if (strcasecmp(archiver.name, temp) == 0) { /* Valid input, set new archiver */ Found = TRUE; break; } } } fclose(fp); if (Found) break; Enter(2); /* Invalid selection, please try again! */ pout(LIGHTGREEN, BLACK, (char *) Language(265)); Enter(2); /* Loop for new attempt */ } strncpy(exitinfo.Archiver, archiver.name, 6); /* Archiver now set to: */ snprintf(temp, 81, "%s %s", Language(89), exitinfo.Archiver); colour(WHITE, BLACK); PUTSTR(temp); Syslog('+', "New archiver %s", exitinfo.Archiver); WriteExitinfo(); free(temp); Enter(2); Pause(); }
void user(void) { FILE *pUsrConfig, *pLimits; int i, x, FoundName = FALSE, iFoundLimit = FALSE, IsNew = FALSE, logins = 0, Start; int l1, l2; char *token, temp[PATH_MAX], temp1[84], UserName[37], buf[128], *fullname; time_t LastLogin; struct stat st; grecno = 0; Syslog('+', "Unixmode login: %s", sUnixName); snprintf(temp, PATH_MAX, "%s/etc/users.data", getenv("FTND_ROOT")); if ((pUsrConfig = fopen(temp,"r+")) == NULL) { /* * This should not happen. */ WriteError("$Can't open %s", temp); PUTSTR((char *)"Can't open userfile, run \"newuser\" first"); Enter(1); ExitClient(FTNERR_OK); } fread(&usrconfighdr, sizeof(usrconfighdr), 1, pUsrConfig); while (fread(&usrconfig, usrconfighdr.recsize, 1, pUsrConfig) == 1) { if (strcmp(usrconfig.Name, sUnixName) == 0) { FoundName = TRUE; break; } else grecno++; } if (!FoundName) { fclose(pUsrConfig); snprintf(temp, PATH_MAX, "Unknown username: %s\r\n", sUnixName); PUTSTR(temp); /* FATAL ERROR: You are not in the BBS users file.*/ snprintf(temp, PATH_MAX, "%s\r\n", (char *) Language(389)); PUTSTR(temp); /* Please run 'newuser' to create an account */ snprintf(temp, PATH_MAX, "%s\r\n", (char *) Language(390)); PUTSTR(temp); Syslog('?', "FATAL: Could not find user in BBS users file."); Syslog('?', " and system is using unix accounts\n"); Free_Language(); ExitClient(FTNERR_OK); } /* * Copy username, split first and lastname. */ strncpy(UserName, usrconfig.sUserName, sizeof(UserName)-1); if ((strchr(UserName,' ') == NULL) && !CFG.iOneName) { token = strtok(UserName, " "); strncpy(FirstName, token, sizeof(FirstName)-1); token = strtok(NULL, "\0"); i = strlen(token); for (x = 2; x < i; x++) { if (token[x] == ' ') token[x] = '\0'; } strncpy(LastName, token, sizeof(LastName)-1); } else strncpy(FirstName, UserName, sizeof(FirstName)-1); strncpy(UserName, usrconfig.sUserName, sizeof(UserName)-1); Syslog('+', "%s On-Line from \"%s\", node %d", UserName, ttyinfo.comment, iNode); IsDoing("Just Logged In"); /* * Check some essential files, create them if they don't exist. */ ChkFiles(); /* * Setup users favourite language. */ utf8 = (usrconfig.Charset == FTNC_UTF8); Set_Language(usrconfig.iLanguage); Free_Language(); InitLanguage(); /* * User logged in, tell it to the server. Check if a location is * set, if Ask User location for new users is off, this field is * empty but we have to send something to the server. */ if (strlen(usrconfig.sLocation)) UserCity(mypid, usrconfig.Name, usrconfig.sLocation); else UserCity(mypid, usrconfig.Name, (char *)"N/A"); /* * Count simultaneous logins */ Start = TRUE; while (TRUE) { if (Start) snprintf(buf, 128, "GMON:1,1;"); else snprintf(buf, 128, "GMON:1,0;"); Start = FALSE; if (socket_send(buf) == 0) { strcpy(buf, socket_receive()); if (strncmp(buf, "100:0;", 6) == 0) break; /* No more data */ if (strstr(buf, "ftnbbs")) { /* * Only ftnbbs is wanted */ strtok(buf, ","); /* response */ strtok(NULL, ","); /* pid */ strtok(NULL, ","); /* tty */ fullname = xstrcpy(cldecode(strtok(NULL, ","))); /* username */ if (strcmp(fullname, usrconfig.Name) == 0) { logins++; } free(fullname); } } } if (CFG.max_logins && (logins > CFG.max_logins)) { Syslog('+', "User logins %d, allowed %d, disconnecting", logins, CFG.max_logins); colour(LIGHTRED, BLACK); snprintf(temp, PATH_MAX, "%s %d %s\r\n", (char *) Language(18), CFG.max_logins, (char *) Language(19)); PUTSTR(temp); Quick_Bye(FTNERR_INIT_ERROR); } /* * Set last file and message area so these numbers are saved when * the user hangs up or is logged off before het gets to the main * menu. Later in this function the areas are set permanent. */ iAreaNumber = usrconfig.iLastFileArea; iMsgAreaNumber = usrconfig.iLastMsgArea; /* * See if this user is the Sysop. */ strcpy(temp, UserName); strcpy(temp1, CFG.sysop_name); if ((strcasecmp(CFG.sysop_name, UserName)) == 0) { /* * If login name is sysop, set SYSOP true */ SYSOP = TRUE; Syslog('+', "Sysop is online"); } /* * Is this a new user? */ if (usrconfig.iTotalCalls == 0) IsNew = TRUE; /* * Pause after logo screen. */ alarm_on(); Pause(); if (usrconfig.Archiver[0] == '\0') { usrconfig.Archiver[0] = 'Z'; usrconfig.Archiver[1] = 'I'; usrconfig.Archiver[2] = 'P'; Syslog('+', "Setup default archiver ZIP"); } /* * Check users date format. We do it strict as we * need this to be good for several other purposes. * If it is correct, the users age is set in UserAge */ if (!Test_DOB(usrconfig.sDateOfBirth)) { Syslog('!', "Error in Date of Birth"); Chg_DOB(); strcpy(usrconfig.sDateOfBirth, exitinfo.sDateOfBirth); } /* * Check to see if user must expire */ snprintf(temp,PATH_MAX, "%s", (char *) GetDateDMY()); SwapDate(temp, usrconfig.sExpiryDate); /* Convert Date1 & Date2 to longs for compare */ l1 = atol(Date1); l2 = atol(Date2); if (l1 >= l2 && l2 != 0) { /* * If Expiry Date is the same as today expire to * Expire Sec level */ usrconfig.Security = usrconfig.ExpirySec; Syslog('!', "User is expired, resetting level"); /* * Show texfile to user telling him about this. */ DisplayFile((char *)"expired"); } free(Date1); free(Date2); /* * Copy limits.data into memory */ snprintf(temp, PATH_MAX, "%s/etc/limits.data", getenv("FTND_ROOT")); if ((pLimits = fopen(temp,"rb")) == NULL) { WriteError("$Can't open %s", temp); } else { fread(&LIMIThdr, sizeof(LIMIThdr), 1, pLimits); while (fread(&LIMIT, sizeof(LIMIT), 1, pLimits) == 1) { if (LIMIT.Security == usrconfig.Security.level) { iFoundLimit = TRUE; break; } } fclose(pLimits); } if (!iFoundLimit) { WriteError("Unknown Security Level in limits.data"); usrconfig.iTimeLeft = 0; /* Could not find limit, so set to Zero */ usrconfig.iTimeUsed = 0; /* Set to Zero as well */ } else { /* * Give user new time limit everyday, also new users get a new limit. */ snprintf(temp,PATH_MAX, "%s", (char *) GetDateDMY()); if (((strcmp(StrDateDMY(usrconfig.tLastLoginDate), temp)) != 0) || IsNew) { /* * If no timelimit set give user 24 hours. */ if (LIMIT.Time) usrconfig.iTimeLeft = LIMIT.Time; else usrconfig.iTimeLeft = 86400; usrconfig.iTimeUsed = 0; /* Set time used today to Zero */ usrconfig.iConnectTime = 0; /* Set connect time to Zero */ /* * Give user new bytes and files every day if needed. */ if (LIMIT.DownK) { usrconfig.DownloadKToday = LIMIT.DownK; } if (LIMIT.DownF) { usrconfig.DownloadsToday = LIMIT.DownF; } } } /* End of else */ usrconfig.iConnectTime = 0; /* Copy Users Protocol into Memory */ Set_Protocol(usrconfig.sProtocol); tlf(usrconfig.sProtocol); /* * Set last login Date and Time, copy previous session * values in memory. */ snprintf(LastLoginDate, 12, "%s", StrDateDMY(usrconfig.tLastLoginDate)); snprintf(LastLoginTime, 9, "%s", StrTimeHMS(usrconfig.tLastLoginDate)); LastLogin = usrconfig.tLastLoginDate; usrconfig.tLastLoginDate = ltime; /* Set current login to current date */ usrconfig.iTotalCalls++; /* * Update user record. */ if (fseek(pUsrConfig, usrconfighdr.hdrsize + (grecno * usrconfighdr.recsize), 0) != 0) { WriteError("Can't seek in %s/etc/users.data", getenv("FTND_ROOT")); } else { fwrite(&usrconfig, sizeof(usrconfig), 1, pUsrConfig); } fclose(pUsrConfig); /* * Write users structure to tmp file in ~/home/unixname/exitinfo * A copy of the userrecord is also in the variable exitinfo. */ if (! InitExitinfo()) Good_Bye(FTNERR_INIT_ERROR); /* * If user has not set a preferred character set, force this */ if (exitinfo.Charset == FTNC_NONE) { Chg_Charset(); } setlocale(LC_CTYPE, getlocale(exitinfo.Charset)); Syslog('b', "setlocale(LC_CTYPE, NULL) returns \"%s\"", printable(setlocale(LC_CTYPE, NULL), 0)); GetLastUser(); StartTime = xstrcpy(GetLocalHM()); ChangeHomeDir(exitinfo.Name, exitinfo.Email); Syslog('+', "User successfully logged into BBS"); Syslog('+', "Level %d (%s), %d mins. left, port %s", exitinfo.Security.level, LIMIT.Description, exitinfo.iTimeLeft, pTTY); Time2Go = time(NULL); Time2Go += exitinfo.iTimeLeft * 60; iUserTimeLeft = exitinfo.iTimeLeft; IsDoing("Welcome screens"); DisplayFile((char *)"mainlogo"); DisplayFile((char *)"welcome"); /* * The following files are only displayed if the user has * turned the Bulletins on. */ if (exitinfo.ieNEWS) { DisplayFile((char *)"welcome1"); DisplayFile((char *)"welcome2"); DisplayFile((char *)"welcome3"); DisplayFile((char *)"welcome4"); DisplayFile((char *)"welcome5"); DisplayFile((char *)"welcome6"); DisplayFile((char *)"welcome7"); DisplayFile((char *)"welcome8"); DisplayFile((char *)"welcome9"); snprintf(temp, PATH_MAX, "%s", (char *) GetDateDMY() ); if ((strcmp(exitinfo.sDateOfBirth, temp)) == 0) DisplayFile((char *)"birthday"); /* * Displays file if it exists DD-MM.A?? */ snprintf(temp, PATH_MAX, "%s", (char *) GetDateDMY()); strcpy(temp1, ""); strncat(temp1, temp, 5); snprintf(temp, PATH_MAX, "%s", temp1); DisplayFile(temp); /* * Displays users security file if it exists */ snprintf(temp, PATH_MAX, "sec%d", exitinfo.Security.level); DisplayFile(temp); /* * Display News file */ DisplayFile((char *)"news"); } /* * Display Onceonly file, first get the date of that * file, search order is the same as in DisplayFile() */ st.st_mtime = 0; snprintf(temp, PATH_MAX, "%s/share/int/txtfiles/%s/onceonly.ans", getenv("FTND_ROOT"), lang.lc); stat(temp, &st); if (st.st_mtime == 0) { snprintf(temp, PATH_MAX, "%s/share/int/txtfiles/%s/onceonly.ans", getenv("FTND_ROOT"), CFG.deflang); stat(temp, &st); } if (st.st_mtime == 0) { snprintf(temp, PATH_MAX, "%s/share/int/txtfiles/%s/onceonly.asc", getenv("FTND_ROOT"), lang.lc); stat(temp, &st); if (st.st_mtime == 0) { snprintf(temp, PATH_MAX, "%s/share/int/txtfiles/%s/onceonly.asc", getenv("FTND_ROOT"), CFG.deflang); stat(temp, &st); } } if ((st.st_mtime != 0) && (LastLogin < st.st_mtime)) DisplayFile((char *)"onceonly"); OLR_SyncTags(); if (exitinfo.MailScan) { IsDoing("New mail check"); CheckMail(); } /* * We don't show new files to new users. */ if (exitinfo.ieFILE && (!IsNew)) { IsDoing("New files check"); NewfileScan(FALSE); } /* * Copy last file Area in to current Area */ SetFileArea(exitinfo.iLastFileArea); /* * Copy Last Message Area in to Current Msg Area */ SetMsgArea(usrconfig.iLastMsgArea); SetEmailArea((char *)"mailbox"); /* * Set or Reset the DoNotDisturb flag, now is the time * we may be interrupted. */ UserSilent(usrconfig.DoNotDisturb); /* * Start the menu. */ menu(); }
/* * Change default protocol. */ void Chg_Protocol() { FILE *pProtConfig; int iProt, iFoundProt = FALSE, precno = 0; char *temp, Prot[2]; temp = calloc(PATH_MAX, sizeof(char)); ReadExitinfo(); Set_Protocol(exitinfo.sProtocol); Syslog('+', "Old protocol %s", sProtName); while(TRUE) { snprintf(temp, PATH_MAX, "%s/etc/protocol.data", getenv("MBSE_ROOT")); if ((pProtConfig = fopen(temp, "r")) == NULL) { WriteError("$Can't open %s", temp); /* Protocol: Can't open protocol file. */ Enter(1); PUTSTR((char *) Language(262)); Enter(2); Pause(); free(temp); fclose(pProtConfig); return; } fread(&PROThdr, sizeof(PROThdr), 1, pProtConfig); Enter(1); /* Select your preferred protocol */ pout(CFG.HiliteF, CFG.HiliteB, (char *) Language(263)); Enter(2); while (fread(&PROT, PROThdr.recsize, 1, pProtConfig) == 1) { if (PROT.Available && Access(exitinfo.Security, PROT.Level)) { colour(LIGHTBLUE, BLACK); PUTCHAR('('); colour(WHITE, BLACK); PUTSTR(PROT.ProtKey); colour(LIGHTBLUE, BLACK); snprintf(temp, 81, ") %-20s Efficiency %3d %%\r\n", PROT.ProtName, PROT.Efficiency); PUTSTR(temp); } } Enter(1); pout(CFG.HiliteF, CFG.HiliteB, (char *) Language(264)); alarm_on(); iProt = toupper(Readkey()); PUTCHAR(iProt); snprintf(Prot, 2, "%c", iProt); fseek(pProtConfig, PROThdr.hdrsize, 0); while (fread(&PROT, PROThdr.recsize, 1, pProtConfig) == 1) { if ((strncmp(PROT.ProtKey, Prot, 1) == 0) && PROT.Available && Access(exitinfo.Security, PROT.Level)) { strcpy(sProtName, PROT.ProtName); strcpy(sProtUp, PROT.ProtUp); strcpy(sProtDn, PROT.ProtDn); strcpy(sProtAdvice, PROT.Advice); uProtInternal = PROT.Internal; iProtEfficiency = PROT.Efficiency; iFoundProt = TRUE; } else precno++; } fclose(pProtConfig); if (iProt == 13) { free(temp); return; } else { if (!iFoundProt) { Enter(2); pout(LIGHTGREEN, BLACK, (char *) Language(265)); Enter(2); /* Loop for new attempt */ } else { Setup(exitinfo.sProtocol, sProtName); Enter(1); /* Protocol now set to: */ pout(LIGHTGREEN, BLACK, (char *) Language(266)); PUTSTR(sProtName); Enter(2); Pause(); break; } } } Syslog('+', "New protocol %s", sProtName); WriteExitinfo(); free(temp); }
static void OutputPause( audio_output_t *aout, bool pause, mtime_t date ) { Pause( &aout->sys->s, pause ); (void) date; }
int main(int argc, char** argv){ FILE* input; if(argc == 1){ input = stdin; } else if(argc == 2){ input = fopen(argv[1],"r"); } else{ perror("Usage"); exit(1); } int numtok=0, numtokens=0, lsize=0; char p; char** newargv; static bool REDSO = FALSE, REDSI = FALSE, EXIT = FALSE; char* line = malloc(MAX_CANON); char** toklin; char* newl = NULL; char* opf = NULL; char* ipf = NULL; int i = 0; static int fd; static int fdi; static int fdr; void* x = NULL; fprintf(stderr, "Zshell $: "); x = fgets (line, MAX_CANON, input); if (x) { if((strlen(line)-1)!=0){ line[strlen(line)-1] = '\0'; } } while((x != NULL)&&((strcmp(line, "quit")) != 0)) { newl = malloc(MAX_CANON); opf = malloc(MAX_CANON); ipf = malloc(MAX_CANON); stripIO(&line,&toklin,&newl,&opf,&ipf,&numtok); if((numtokens = makeargv(newl, DELIMITERS, &newargv))==-1){ perror("makeargv error"); return 1; } RedIO(&toklin,&opf,&ipf,&REDSI,&REDSO,&numtok,&fd,&fdi,&fdr,&EXIT); if((strstr(newargv[0],"cd"))){ if(newargv[1]){ cd(&newargv); } else{ perror("Need to Include a directory"); } EXIT=TRUE; } else if((strstr(newargv[0],"environ"))){ env(); EXIT=TRUE; } else if((strstr(newargv[0],"echo"))){ Echo(&newargv,&numtokens); EXIT=TRUE; } else if((strstr(newargv[0],"pause"))){ Pause(); EXIT=TRUE; } else if(!EXIT && !(strstr(newargv[0],"\n"))){ execproc(&newargv,&line,&REDSO,&REDSI,&fdr,&x,&input); } if(EXIT && (strcmp(newargv[0],"\n")!=-1)){ EXIT = FALSE; fprintf(stderr, "Zshell $: "); if(REDSO){ freopen("/dev/tty", "w", input); REDSO = FALSE; } if(REDSI){ dup2(fdr, STDIN_FILENO); close(fdr); REDSI = FALSE; } x = fgets (line, MAX_CANON, input); if (x) { if((strlen(line)-1)!=0){ line[strlen(line)-1] = '\0'; } } } } return 0; }
void nuiAnimation::Pause(const nuiEvent& rEvent) { if (mEnableCallbacks) Pause(); }
void WriteCommandByte(BYTE command) { switch (command) { case DSP_GET_VERSION: dprintf2(("Command - Get Version")); DSPReadState = FirstVersionByte; break; case DSP_CARD_IDENTIFY: dprintf2(("Command - Identify")); DSPWriteState = CardIdent; break; case DSP_SPEAKER_ON: dprintf2(("Command - Speaker ON")); SetSpeaker(TRUE); Pause(); break; case DSP_SPEAKER_OFF: dprintf2(("Command - Speaker OFF")); SetSpeaker(FALSE); Pause(); break; case DSP_SET_SAMPLE_RATE: DSPWriteState = SetTimeConstant; break; case DSP_SET_BLOCK_SIZE: DSPWriteState = BlockSizeFirstByte; break; case DSP_WRITE: dprintf2(("Command - Write - non Auto")); DSPWriteState = BlockSizeFirstByteWrite; break; case DSP_DIRECT_WAVE_OUT: dprintf2(("Command - Direct output")); DSPWriteState = DirectWaveOut; break; case DSP_WRITE_AUTO: dprintf2(("Command - Write - Auto")); StartTransfer(FALSE, TRUE); break; case DSP_READ: dprintf2(("Command - Read - non Auto")); DSPWriteState = BlockSizeFirstByteRead; break; case DSP_READ_AUTO: dprintf2(("Command - Read - Auto")); StartTransfer(TRUE, TRUE); break; case DSP_HALT_DMA: dprintf2(("Command - Halt DMA")); Pause(); break; case DSP_CONTINUE_DMA: dprintf2(("Command - Continue DMA")); Continue(); break; case DSP_STOP_AUTO: dprintf2(("Command - Stop DMA")); StopAuto(); break; case DSP_GENERATE_INT: dprintf2(("Command - Generate interrupt DMA")); GenerateInterrupt(); break; default: dprintf2(("Unrecognized DSP command %2X", command)); } }
/* * Change character set. */ void Chg_Charset() { int i; char *temp; temp = calloc(81, sizeof(char)); ReadExitinfo(); Syslog('+', "Old character set %s", getftnchrs(exitinfo.Charset)); while(TRUE) { Enter(1); /* Select your preferred character set */ pout(CFG.HiliteF, CFG.HiliteB, (char *) Language(23)); Enter(2); colour(LIGHTBLUE, BLACK); for (i = (FTNC_NONE + 1); i <= FTNC_MAXCHARS; i++) { colour(LIGHTBLUE, BLACK); snprintf(temp, 81, "%2d ", i); PUTSTR(temp); colour(LIGHTCYAN, BLACK); snprintf(temp, 81, "%-9s ", getftnchrs(i)); PUTSTR(temp); colour(LIGHTMAGENTA, BLACK); snprintf(temp, 81, "%s\r\n", getchrsdesc(i)); PUTSTR(temp); } Enter(1); /* Select character set (Enter to Quit): */ pout(CFG.HiliteF, CFG.HiliteB, (char *) Language(24)); Getnum(temp, 2); if (((strcmp(temp, "")) == 0) && (exitinfo.Charset != FTNC_NONE)) { free(temp); return; } i = atoi(temp); if ((i > FTNC_NONE) && (i <= FTNC_MAXCHARS)) { exitinfo.Charset = i; Syslog('+', "New character set %s", getftnchrs(exitinfo.Charset)); WriteExitinfo(); setlocale(LC_CTYPE, getlocale(exitinfo.Charset)); utf8 = (exitinfo.Charset == FTNC_UTF8); Syslog('b', "setlocale(LC_CTYPE, NULL) returns \"%s\"", printable(setlocale(LC_CTYPE, NULL), 0)); Enter(2); colour(LIGHTGREEN, BLACK); /* Character set now set to: */ snprintf(temp, 81, "%s%s", (char *) Language(25), getftnchrs(i)); PUTSTR(temp); free(temp); Enter(2); Pause(); return; } Enter(2); /* Invalid selection, please try again! */ pout(LIGHTRED, BLACK, (char *) Language(265)); Enter(2); } }
/*virtual*/ bool EldritchFramework::TickInput( float DeltaTime ) { XTRACE_FUNCTION; if( !Framework3D::TickInput( DeltaTime ) ) { return false; } if( m_Keyboard->OnRise( Keyboard::EB_Escape ) || m_Controller->OnRise( XInputController::EB_Start ) ) { Pause(); } #if BUILD_ELDRITCH_TOOLS if( m_Keyboard->OnRise( Keyboard::EB_Tab ) ) { m_Tools->ToggleToolMode(); } if( m_Tools->IsInToolMode() ) { m_Tools->TickInput(); return true; } #endif #if BUILD_FINAL if( m_Keyboard->OnRise( Keyboard::EB_F6 ) ) { m_Game->Checkpoint(); } #else { if( m_Keyboard->OnRise( Keyboard::EB_F6 ) ) // Quicksave { m_Game->GetSaveLoad()->SaveMaster( "quick.eldritchmastersave" ); } if( m_Keyboard->OnRise( Keyboard::EB_F9 ) ) // Quickload { PrepareForLoad(); m_Game->GetSaveLoad()->TryLoadMaster( "quick.eldritchmastersave" ); } #if BUILD_WINDOWS_NO_SDL // Alt + S saves if( m_Keyboard->IsHigh( Keyboard::EB_LeftAlt ) && m_Keyboard->OnRise( Keyboard::EB_S ) ) { SimpleString SaveFileName; if( FileUtil::GetSaveFile( GetWindow()->GetHWnd(), "Save Files", "eldritchmastersave", SaveFileName ) ) { m_Game->GetSaveLoad()->SaveMaster( SaveFileName ); } } // Alt + L loads if( m_Keyboard->IsHigh( Keyboard::EB_LeftAlt ) && m_Keyboard->OnRise( Keyboard::EB_L ) ) { SimpleString LoadFileName; if( FileUtil::GetLoadFile( GetWindow()->GetHWnd(), "Save Files", "eldritchmastersave", LoadFileName ) ) { PrepareForLoad(); m_Game->GetSaveLoad()->TryLoadMaster( LoadFileName ); } } #endif // BUILD_WINDOWS_NO_SDL } #endif #if BUILD_DEV if( m_Keyboard->OnRise( Keyboard::EB_R ) ) { WBWorld::GetInstance()->Report(); ReverseHash::ReportSize(); } // Ctrl + Alt + Backspace: Invoke crash if( m_Keyboard->IsHigh( Keyboard::EB_LeftAlt ) && m_Keyboard->IsHigh( Keyboard::EB_LeftControl ) && m_Keyboard->OnRise( Keyboard::EB_Backspace ) ) { WBEntity* const pEntity = NULL; pEntity->Tick( 0.0f ); } // Shift + Alt + Backspace: Invoke crash by allocating all the memory if( m_Keyboard->IsHigh( Keyboard::EB_LeftAlt ) && m_Keyboard->IsHigh( Keyboard::EB_LeftShift ) && m_Keyboard->OnRise( Keyboard::EB_Backspace ) ) { for(;;) { byte* pArray = new byte[ 32 ]; pArray[0] = pArray[31]; } } if( m_Keyboard->OnRise( Keyboard::EB_Backspace ) ) { m_World->GatherStats(); } // Shift + Ctrl + T is a full restart (new hub), like Resurrect. // Ctrl + T is a proxy return to hub (new worlds, same hub), like Return to Library. // Alt + T is a travel to next level. // Shift + Alt + T is a travel to prev level. if( m_Keyboard->OnRise( Keyboard::EB_T ) && m_Keyboard->IsHigh( Keyboard::EB_LeftControl ) ) { WB_MAKE_EVENT( ReturnToHub, NULL ); WB_SET_AUTO( ReturnToHub, Bool, Restart, true ); WB_SET_AUTO( ReturnToHub, Bool, FlushHub, m_Keyboard->IsHigh( Keyboard::EB_LeftShift ) ); WB_DISPATCH_EVENT( WBWorld::GetInstance()->GetEventManager(), ReturnToHub, m_Game ); } else if( m_Keyboard->OnRise( Keyboard::EB_T ) && m_Keyboard->IsHigh( Keyboard::EB_LeftAlt ) ) { if( m_Keyboard->IsHigh( Keyboard::EB_LeftShift ) ) { WB_MAKE_EVENT( GoToPrevLevel, NULL ); WB_DISPATCH_EVENT( WBWorld::GetInstance()->GetEventManager(), GoToPrevLevel, m_Game ); } else { WB_MAKE_EVENT( GoToNextLevel, NULL ); WB_DISPATCH_EVENT( WBWorld::GetInstance()->GetEventManager(), GoToNextLevel, m_Game ); } } else if( m_Keyboard->OnRise( Keyboard::EB_T ) ) { RegenerateWorld(); } else if( m_Keyboard->IsHigh( Keyboard::EB_T ) && m_Keyboard->IsHigh( Keyboard::EB_LeftShift ) && m_Keyboard->IsLow( Keyboard::EB_LeftControl ) && m_Keyboard->IsLow( Keyboard::EB_LeftAlt ) ) { RegenerateWorld(); } #endif return true; }
int Chg_Language(int NewMode) { FILE *pLang; int iLang, iFoundLang = FALSE; char *temp; temp = calloc(PATH_MAX, sizeof(char)); if (!NewMode) ReadExitinfo(); while(TRUE) { snprintf(temp, PATH_MAX, "%s/etc/language.data", getenv("FTND_ROOT")); if(( pLang = fopen(temp, "r")) == NULL) { WriteError("$Can't open %s", temp); snprintf(temp, 81, "\nFATAL: Can't open language file\n\n"); PUTSTR(temp); Pause(); free(temp); return 0; } fread(&langhdr, sizeof(langhdr), 1, pLang); colour(CFG.HiliteF, CFG.HiliteB); /* Select your preferred language */ snprintf(temp, 81, "\r\n%s\r\n\r\n", (char *) Language(378)); PUTSTR(temp); iLang = 6; colour(LIGHTBLUE, BLACK); while (fread(&lang, langhdr.recsize, 1, pLang) == 1) if (lang.Available) { colour(LIGHTMAGENTA, BLACK); snprintf(temp, 81, "(%s)", lang.LangKey); PUTSTR(temp); colour(DARKGRAY, BLACK); snprintf(temp, 81, " %c ", 46); PUTSTR(temp); colour(CYAN, BLACK); snprintf(temp, 81, "%-29s ", lang.Name); PUTSTR(temp); iLang++; if ((iLang % 2) == 0) { PUTCHAR('\r'); PUTCHAR('\n'); } } Enter(1); colour(CFG.HiliteF, CFG.HiliteB); /* Select language: */ snprintf(temp, 81, "\n%s", (char *) Language(379)); PUTSTR(temp); alarm_on(); iLang = toupper(Readkey()); PUTCHAR(iLang); fseek(pLang, langhdr.hdrsize, 0); while (fread(&lang, langhdr.recsize, 1, pLang) == 1) { strcpy(lang.LangKey,tu(lang.LangKey)); if ((lang.LangKey[0] == iLang) && (lang.Available)) { strcpy(current_language, lang.lc); iFoundLang = TRUE; break; } } fclose(pLang); if(!iFoundLang) { Enter(2); /* Invalid selection, please try again! */ pout(LIGHTGREEN, BLACK, (char *) Language(265)); Enter(2); } else { exitinfo.iLanguage = iLang; strcpy(current_language, lang.lc); Free_Language(); InitLanguage(); colour(LIGHTGREEN, BLACK); /* Language now set to" */ snprintf(temp, 81, "\r\n\r\n%s%s\r\n\r\n", (char *) Language(380), lang.Name); PUTSTR(temp); if (!NewMode) { Syslog('+', "Changed language to %s", lang.Name); WriteExitinfo(); Pause(); } break; } } free(temp); Enter(1); return iLang; }
/* * Download files already tagged, called from the menu. */ void Download(void) { FILE *tf, *fd; int rc = 0, i, Count = 0, OldArea; char *local, *temp; int Size = 0, CostSize = 0, dsize; struct _fdbarea *fdb_area = NULL; down_list *dl = NULL, *tmpf; Enter(2); OldArea = iAreaNumber; WhosDoingWhat(DOWNLOAD, NULL); /* * Clean users tag directory. */ temp = calloc(PATH_MAX, sizeof(char)); snprintf(temp, PATH_MAX, "-rf %s/%s/tag", CFG.bbs_usersdir, exitinfo.Name); execute_pth((char *)"rm", temp, (char *)"/dev/null", (char *)"/dev/null", (char *)"/dev/null"); snprintf(temp, PATH_MAX, "%s/%s/tag", CFG.bbs_usersdir, exitinfo.Name); CheckDir(temp); if ((tf = fopen("taglist", "r+")) == NULL) { Syslog('+', "Download command but no files marked"); /* No files marked for download. */ pout(LIGHTRED, BLACK, (char *) Language(258)); Enter(2); Pause(); return; } local = calloc(PATH_MAX, sizeof(char)); /* Checking your marked downloads, please wait... */ pout(LIGHTMAGENTA, BLACK, (char *) Language(255)); Enter(2); ReadExitinfo(); while (fread(&Tag, sizeof(Tag), 1, tf) == 1) { if (Tag.Active) { SetFileArea(Tag.Area); /* * Check password for selected file FIXME: Where??? */ memset(&fdb, 0, sizeof(fdb)); if ((fdb_area = mbsedb_OpenFDB(Tag.Area, 30)) != NULL) { while (fread(&fdb, fdbhdr.recsize, 1, fdb_area->fp) == 1) { if (strcmp(fdb.LName, Tag.LFile) == 0) break; } mbsedb_CloseFDB(fdb_area); } if (strcmp(fdb.LName, Tag.LFile) == 0) { Syslog('b', "Found file %s in area %d", fdb.LName, Tag.Area); if (fdb.Deleted) { /* Sorry that file is unavailable for download */ snprintf(temp, 81, "%s (%s)", (char *) Language(248), fdb.LName); poutCR(CFG.HiliteF, CFG.HiliteB, temp); Tag.Active = FALSE; Syslog('+', "File %s in area %d unavailable for download, deleted", fdb.LName, Tag.Area); } } if (Tag.Active) { /* * Create/Append file description list while we're * busy checking. If the users doesn't want it we * can unlink it aftwerwards. We also insert CR * characters to please the poor DOS (M$oft) users. */ snprintf(local, PATH_MAX, "./tag/filedesc.%d", exitinfo.Downloads % 256); if ((fd = fopen(local, "a")) != NULL) { fprintf(fd, "%s (%s)\r\n", fdb.LName, fdb.Name); for (i = 0; i < 25; i++) { if (strlen(fdb.Desc[i]) > 1) fprintf(fd, " %s\r\n", fdb.Desc[i]); } fprintf(fd, "\r\n"); fclose(fd); Syslog('b', "Added info to %s", local); } else { WriteError("Can't add info to %s", local); } snprintf(local, PATH_MAX, "%s/%s", sAreaPath, Tag.LFile); add_download(&dl, local, Tag.LFile, Tag.Area, fdb.Size, FALSE); Home(); } if (!Tag.Active) { /* * Update the download active flag in the * taglist */ fseek(tf, - sizeof(Tag), SEEK_CUR); fwrite(&Tag, sizeof(Tag), 1, tf); Syslog('b', "Download file %s marked inactive in taglist", Tag.LFile); } else { /* * Count file and sizes. */ Count++; Size += fdb.Size; if (!area.Free) CostSize += fdb.Size; } } } fclose(tf); /* * If anything left to download... */ if (!Count) { SetFileArea(OldArea); unlink("taglist"); /* No files marked for download */ pout(LIGHTRED, BLACK, (char *) Language(258)); Enter(2); Pause(); free(temp); free(local); tidy_download(&dl); Syslog('+', "No files left to download"); return; } /* * Add descriptions file to the queue. */ snprintf(local, PATH_MAX, "%s/%s/tag/filedesc.%d", CFG.bbs_usersdir, exitinfo.Name, exitinfo.Downloads % 256); dsize = file_size(local); snprintf(temp, PATH_MAX, "filedesc.%d", exitinfo.Downloads % 256); add_download(&dl, local, temp, 0, dsize, TRUE); free(local); /* You have */ /* files( */ /* bytes) marked for download */ snprintf(temp, PATH_MAX, "%s %d %s%d %s", (char *) Language(249), Count, (char *) Language(280), Size, (char *) Language(281)); pout(YELLOW, BLACK, temp); Enter(2); if (!CheckBytesAvailable(CostSize)) { SetFileArea(OldArea); free(temp); tidy_download(&dl); return; } Pause(); if ((rc = download(dl))) { /* * Download error */ Syslog('+', "Download error rc=%d", rc); free(temp); tidy_download(&dl); return; } /* * Checking the successfull sent files, they are missing from * the ./tag directory. Failed files are still there. */ PUTCHAR('\r'); /* Updating download counters, please wait ... */ pout(LIGHTCYAN, BLACK, (char *) Language(352)); Count = Size = 0; /* * Update downloadcounters, don't log anything because the state * of sucessfull sent files is already logged by the download * function. */ if ((tf = fopen("taglist", "r+")) != NULL) { while (fread(&Tag, sizeof(Tag), 1, tf) == 1) { PUTCHAR('.'); if (Tag.Active) { for (tmpf = dl; tmpf; tmpf = tmpf->next) { if (strcmp(tmpf->remote, Tag.LFile) == 0) { if (tmpf->sent) { Tag.Active = FALSE; fseek(tf, - sizeof(Tag), SEEK_CUR); fwrite(&Tag, sizeof(Tag), 1, tf); /* * Update the download counter and the last download date. */ SetFileArea(Tag.Area); if ((fdb_area = mbsedb_OpenFDB(Tag.Area, 30))) { while (fread(&fdb, fdbhdr.recsize, 1, fdb_area->fp) == 1) { if (strcmp(fdb.LName, Tag.LFile) == 0) break; } Size += fdb.Size; fdb.TimesDL++; fdb.LastDL = time(NULL); if (mbsedb_LockFDB(fdb_area, 30)) { fseek(fdb_area->fp, - fdbhdr.recsize, SEEK_CUR); fwrite(&fdb, fdbhdr.recsize, 1, fdb_area->fp); mbsedb_UnlockFDB(fdb_area); } mbsedb_CloseFDB(fdb_area); Count++; } } break; } } } } fclose(tf); } Enter(2); /* * Update the users record. */ ReadExitinfo(); exitinfo.Downloads += Count; /* Increase download counter */ mib_downloads += Count; exitinfo.DownloadK += (Size / 1024); /* Increase amount download today */ mib_kbdownload += (Size / 1024); /* * Minus the amount downloaded today from downloadktoday * if less than zero, it won't let the user download anymore. */ if (LIMIT.DownK || LIMIT.DownF) { exitinfo.DownloadKToday -= (Size / 1024); } WriteExitinfo(); Pause(); SetFileArea(OldArea); free(temp); tidy_download(&dl); }