⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cdjpeg.c

📁 linux下的jpeg解码库
💻 C
字号:
/* * cdjpeg.c * * Copyright (C) 1991-1997, Thomas G. Lane. * This file is part of the Independent JPEG Group's software. * For conditions of distribution and use, see the accompanying README file. * * This file contains common support routines used by the IJG application * programs (cjpeg, djpeg, jpegtran). */#include "cdjpeg.h"		/* Common decls for cjpeg/djpeg applications */#include <ctype.h>		/* to declare isupper(), tolower() */#ifdef NEED_SIGNAL_CATCHER#include <signal.h>		/* to declare signal() */#endif#ifdef USE_SETMODE#include <fcntl.h>		/* to declare setmode()'s parameter macros *//* If you have setmode() but not <io.h>, just delete this line: */#include <io.h>			/* to declare setmode() */#endif/* * Signal catcher to ensure that temporary files are removed before aborting. * NB: for Amiga Manx C this is actually a global routine named _abort(); * we put "#define signal_catcher _abort" in jconfig.h.  Talk about bogus... */#ifdef NEED_SIGNAL_CATCHERstatic j_common_ptr sig_cinfo;void				/* must be global for Manx C */signal_catcher (int signum){  if (sig_cinfo != NULL) {    if (sig_cinfo->err != NULL) /* turn off trace output */      sig_cinfo->err->trace_level = 0;    jpeg_destroy(sig_cinfo);	/* clean up memory allocation & temp files */  }  exit(EXIT_FAILURE);}GLOBAL(void)enable_signal_catcher (j_common_ptr cinfo){  sig_cinfo = cinfo;#ifdef SIGINT			/* not all systems have SIGINT */  signal(SIGINT, signal_catcher);#endif#ifdef SIGTERM			/* not all systems have SIGTERM */  signal(SIGTERM, signal_catcher);#endif}#endif/* * Optional progress monitor: display a percent-done figure on stderr. */#ifdef PROGRESS_REPORTMETHODDEF(void)progress_monitor (j_common_ptr cinfo){  cd_progress_ptr prog = (cd_progress_ptr) cinfo->progress;  int total_passes = prog->pub.total_passes + prog->total_extra_passes;  int percent_done = (int) (prog->pub.pass_counter*100L/prog->pub.pass_limit);  if (percent_done != prog->percent_done) {    prog->percent_done = percent_done;    if (total_passes > 1) {      fprintf(stderr, "\rPass %d/%d: %3d%% ",	      prog->pub.completed_passes + prog->completed_extra_passes + 1,	      total_passes, percent_done);    } else {      fprintf(stderr, "\r %3d%% ", percent_done);    }    fflush(stderr);  }}GLOBAL(void)start_progress_monitor (j_common_ptr cinfo, cd_progress_ptr progress){  /* Enable progress display, unless trace output is on */  if (cinfo->err->trace_level == 0) {    progress->pub.progress_monitor = progress_monitor;    progress->completed_extra_passes = 0;    progress->total_extra_passes = 0;    progress->percent_done = -1;    cinfo->progress = &progress->pub;  }}GLOBAL(void)end_progress_monitor (j_common_ptr cinfo){  /* Clear away progress display */  if (cinfo->err->trace_level == 0) {    fprintf(stderr, "\r                \r");    fflush(stderr);  }}#endif/* * Case-insensitive matching of possibly-abbreviated keyword switches. * keyword is the constant keyword (must be lower case already), * minchars is length of minimum legal abbreviation. */GLOBAL(boolean)keymatch (char * arg, const char * keyword, int minchars){  register int ca, ck;  register int nmatched = 0;  while ((ca = *arg++) != '\0') {    if ((ck = *keyword++) == '\0')      return FALSE;		/* arg longer than keyword, no good */    if (isupper(ca))		/* force arg to lcase (assume ck is already) */      ca = tolower(ca);    if (ca != ck)      return FALSE;		/* no good */    nmatched++;			/* count matched characters */  }  /* reached end of argument; fail if it's too short for unique abbrev */  if (nmatched < minchars)    return FALSE;  return TRUE;			/* A-OK */}/* * Routines to establish binary I/O mode for stdin and stdout. * Non-Unix systems often require some hacking to get out of text mode. */GLOBAL(FILE *)read_stdin (void){  FILE * input_file = stdin;#ifdef USE_SETMODE		/* need to hack file mode? */  setmode(fileno(stdin), O_BINARY);#endif#ifdef USE_FDOPEN		/* need to re-open in binary mode? */  if ((input_file = fdopen(fileno(stdin), READ_BINARY)) == NULL) {    fprintf(stderr, "Cannot reopen stdin\n");    exit(EXIT_FAILURE);  }#endif  return input_file;}GLOBAL(FILE *)write_stdout (void){  FILE * output_file = stdout;#ifdef USE_SETMODE		/* need to hack file mode? */  setmode(fileno(stdout), O_BINARY);#endif#ifdef USE_FDOPEN		/* need to re-open in binary mode? */  if ((output_file = fdopen(fileno(stdout), WRITE_BINARY)) == NULL) {    fprintf(stderr, "Cannot reopen stdout\n");    exit(EXIT_FAILURE);  }#endif  return output_file;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -