/* * Print a formatted colour message at the bottom of the screen, wait a while */ void wait_message( unsigned int sdelay, const char *fmt, ...) { va_list ap; va_start(ap, fmt); clear_message(); #ifdef HAVE_COLOR fcol(tinrc.col_message); #endif /* HAVE_COLOR */ vsnprintf(mesg, sizeof(mesg), fmt, ap); my_fputs(mesg, stdout); #ifdef HAVE_COLOR fcol(tinrc.col_normal); #endif /* HAVE_COLOR */ cursoron(); my_flush(); (void) sleep(sdelay); /* clear_message(); would be nice, but tin doesn't expect this yet */ va_end(ap); }
/* * Centre a formatted colour message at the bottom of the screen */ void info_message( const char *fmt, ...) { va_list ap; va_start(ap, fmt); clear_message(); #ifdef HAVE_COLOR fcol(tinrc.col_message); #endif /* HAVE_COLOR */ vsnprintf(mesg, sizeof(mesg), fmt, ap); center_line(cLINES, FALSE, mesg); /* center the message at screen bottom */ #ifdef HAVE_COLOR fcol(tinrc.col_normal); #endif /* HAVE_COLOR */ stow_cursor(); va_end(ap); }
/* Seach from the current directory up to the root looking for a ".badpixels" file, and fix those pixels now. */ void CLASS bad_pixels (const char *cfname) { FILE *fp=NULL; #ifndef LIBRAW_LIBRARY_BUILD char *fname, *cp, line[128]; int len, time, row, col, r, c, rad, tot, n, fixed=0; #else char *cp, line[128]; int time, row, col, r, c, rad, tot, n; #ifdef DCRAW_VERBOSE int fixed = 0; #endif #endif if (!filters) return; #ifdef LIBRAW_LIBRARY_BUILD RUN_CALLBACK(LIBRAW_PROGRESS_BAD_PIXELS,0,2); #endif if (cfname) fp = fopen (cfname, "r"); #line 4151 "dcraw/dcraw.c" if (!fp) { #ifdef LIBRAW_LIBRARY_BUILD imgdata.process_warnings |= LIBRAW_WARN_NO_BADPIXELMAP; #endif return; } while (fgets (line, 128, fp)) { cp = strchr (line, '#'); if (cp) *cp = 0; if (sscanf (line, "%d %d %d", &col, &row, &time) != 3) continue; if ((unsigned) col >= width || (unsigned) row >= height) continue; if (time > timestamp) continue; for (tot=n=0, rad=1; rad < 3 && n==0; rad++) for (r = row-rad; r <= row+rad; r++) for (c = col-rad; c <= col+rad; c++) if ((unsigned) r < height && (unsigned) c < width && (r != row || c != col) && fcol(r,c) == fcol(row,col)) { tot += BAYER2(r,c); n++; } BAYER2(row,col) = tot/n; #ifdef DCRAW_VERBOSE if (verbose) { if (!fixed++) fprintf (stderr,_("Fixed dead pixels at:")); fprintf (stderr, " %d,%d", col, row); } #endif } #ifdef DCRAW_VERBOSE if (fixed) fputc ('\n', stderr); #endif fclose (fp); #ifdef LIBRAW_LIBRARY_BUILD RUN_CALLBACK(LIBRAW_PROGRESS_BAD_PIXELS,1,2); #endif }
} static int midi_playback_open(struct snd_rawmidi_substream *substream) { struct snd_oxfw *oxfw = substream->rmidi->private_data; int err; err = snd_oxfw_stream_lock_try(oxfw); if (err < 0) return err; mutex_lock(&oxfw->mutex); oxfw->playback_substreams++; err = snd_oxfw_stream_start_simplex(oxfw, &oxfw->rx_stream, 0, 0); mutex_unlock(&oxfw->mutex); if (err < 0) snd_oxfw_stream_lock_release(oxfw); return err; } static int midi_capture_close(struct snd_rawmidi_substream *substream) { struct snd_oxfw *oxfw = substream->rmidi->private_data; mutex_lock(&oxfw->mutex); oxfw->capture_substreams--; snd_oxfw_stream_stop_simplex(oxfw, &oxfw->tx_stream); mutex_unlock(&oxfw->mutex); snd_oxfw_stream_lock_release(oxfw); return 0; } static int midi_playback_close(struct snd_rawmidi_substream *substream) { struct snd_oxfw *oxfw = substream->rmidi->private_data; mutex_lock(&oxfw->mutex); oxfw->playback_substreams--; snd_oxfw_stream_stop_simplex(oxfw, &oxfw->rx_stream); mutex_unlock(&oxfw->mutex); snd_oxfw_stream_lock_release(oxfw); return 0; } static void midi_capture_trigger(struct snd_rawmidi_substream *substrm, int up) { struct snd_oxfw *oxfw = substrm->rmidi->private_data; unsigned long flags; spin_lock_irqsave(&oxfw->lock, flags); if (up)
void show_title( const char *title) { int col; col = (cCOLS - (int) strlen(_(txt_type_h_for_help))) + 1; if (col) { MoveCursor(0, col); #ifdef HAVE_COLOR fcol(tinrc.col_title); #endif /* HAVE_COLOR */ /* you have mail message in */ my_fputs((mail_check() ? _(txt_you_have_mail) : _(txt_type_h_for_help)), stdout); #ifdef HAVE_COLOR fcol(tinrc.col_normal); #endif /* HAVE_COLOR */ } center_line(0, TRUE, title); /* wastes some space on the left */ }
void spin_cursor( void) { static const char buf[] = "|/-\\|/-\\ "; /* don't remove the tailing space! */ static unsigned short int i = 0; if (batch_mode) return; if (i > 7) i = 0; #ifdef HAVE_COLOR fcol(tinrc.col_message); #endif /* HAVE_COLOR */ my_printf("\b%c", buf[i++]); my_flush(); #ifdef HAVE_COLOR fcol(tinrc.col_normal); #endif /* HAVE_COLOR */ }
/* * progressmeter in % */ void show_progress( const char *txt, long count, long total) { char display[LEN]; int ratio; time_t curr_time; static char last_display[LEN]; static const char *last_txt; static int last_length; static int last_ratio; static long last_total; static time_t last_update; #ifdef HAVE_GETTIMEOFDAY static long last_count; static int average; static int samples; static int sum; static struct timeval last_time; static struct timeval this_time; int time_diff; int secs_left; long count_diff; #endif /* HAVE_GETTIMEOFDAY */ if (batch_mode || count <= 0 || total == 0) return; /* If this is a new progress meter, start recalculating */ if ((last_txt != txt) || (last_total != total)) { last_length = 0; last_ratio = -1; last_display[0] = '\0'; last_update = time(NULL) - 2; } curr_time = time(NULL); ratio = (int) ((count * 100) / total); if ((ratio == last_ratio) && (curr_time - last_update < 2)) /* * return if ratio did not change and less than 1-2 seconds since last * update to reduce output */ return; last_update = curr_time; #ifdef HAVE_GETTIMEOFDAY if (last_length == 0) { /* Don't print a "time remaining" this time */ snprintf(display, sizeof(display), "%s %3d%%", txt, ratio); display[sizeof(display) - 1] = '\0'; last_length = strlen(txt) + 5; /* Reset the variables */ sum = average = samples = 0; } else { /* Get the current time */ gettimeofday(&this_time, NULL); time_diff = (this_time.tv_sec - last_time.tv_sec) * 1000000; time_diff += (this_time.tv_usec - last_time.tv_usec); count_diff = (count - last_count); if (!count_diff) /* avoid div by zero */ count_diff++; /* * Calculate a running average based on the last 20 samples. For the * first 19 samples just add all and divide by the number of samples. * From the 20th sample on use only the last 20 samples to calculate * the running averave. To make things easier we don't want to store * and keep track of all of them, so we assume that the first sample * was close to the current average and substract it from sum. Then, * the new sample is added to the sum and the sum is divided by 20 to * get the new average. */ if (samples == 20) { sum -= average; sum += (time_diff / count_diff); average = sum / 20; } else { sum += (time_diff / count_diff); average = sum / ++samples; } if (average >= 1000000) secs_left = (total - count) * (average / 1000000); else secs_left = ((total - count) * average) / 1000000; if (secs_left < 0) secs_left = 0; /* TODO: -> lang.c, difficult with hardcoded last_length */ snprintf(display, sizeof(display), "%s %3d%% (%d:%02d remaining)", txt, ratio, secs_left / 60, secs_left % 60); last_length = strlen(txt) + 21 + secs_left / 600; } last_count = count; gettimeofday(&last_time, NULL); #else /* HAVE_GETTIMEOFDAY */ snprintf(display, sizeof(display), "%s %3d%%", txt, ratio); #endif /* HAVE_GETTIMEOFDAY */ /* Only display text if it changed from last time */ if (strcmp(display, last_display)) { clear_message(); MoveCursor(cLINES, 0); # ifdef HAVE_COLOR fcol(tinrc.col_message); # endif /* HAVE_COLOR */ my_printf("%s", display); # ifdef HAVE_COLOR fcol(tinrc.col_normal); # endif /* HAVE_COLOR */ my_flush(); STRCPY(last_display, display); } last_txt = txt; last_total = total; last_ratio = ratio; }