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

📄 console.c

📁 音频编码
💻 C
字号:
#ifdef HAVE_CONFIG_H# include <config.h>#endif#ifdef STDC_HEADERS# include <stdlib.h># include <string.h>#else# ifndef HAVE_STRCHR#  define strchr index#  define strrchr rindex# endifchar *strchr (), *strrchr ();# ifndef HAVE_MEMCPY#  define memcpy(d, s, n) bcopy ((s), (d), (n))#  define memmove(d, s, n) bcopy ((s), (d), (n))# endif#endif#include "console.h"#if defined(HAVE_TERMCAP)#include <curses.h> #include <term.h>#if defined(HAVE_TERMCAP_H)# include <termcap.h>#elif defined(HAVE_NCURSES_TERMCAP_H)# include <ncurses/termcap.h>#endif#endif#ifdef WITH_DMALLOC#include <dmalloc.h>#endif#define CLASS_ID           0x434F4E53#define REPORT_BUFF_SIZE   1024/*  * Taken from Termcap_Manual.html: * * With the Unix version of termcap, you must allocate space for the description yourself and pass * the address of the space as the argument buffer. There is no way you can tell how much space is * needed, so the convention is to allocate a buffer 2048 characters long and assume that is * enough.  (Formerly the convention was to allocate 1024 characters and assume that was enough. * But one day, for one kind of terminal, that was not enough.) */Console_IO_t*  open_console ( int debug ){    Console_IO_t* const  mfp = calloc ( 1, sizeof (*mfp) );#ifdef TERMCAP_AVAILABLE    const char*          term_name;    char                 term_buff [2048];    char*                tp;    char                 tc [10];    int                  val;#endif    /* setup basics of brhist I/O channels */    mfp -> disp_width   = 80;    mfp -> disp_height  = 25;    mfp -> Console_fp   = stderr;    mfp -> Error_fp     = stderr;    mfp -> Report_fp    = debug  ?  fopen ( "/tmp/lame_reports", "a" )  :  NULL;    mfp -> Console_buff = calloc ( 1, REPORT_BUFF_SIZE );    setvbuf ( mfp -> Console_fp, mfp -> Console_buff, _IOFBF, REPORT_BUFF_SIZE );/*  setvbuf ( mfp -> Error_fp  , NULL                   , _IONBF, 0                                ); */#if defined(_WIN32)  &&  !defined(__CYGWIN__)     mfp -> Console_Handle = GetStdHandle (STD_ERROR_HANDLE);#endif    strcpy ( mfp -> str_up, "\033[A" );    #ifdef TERMCAP_AVAILABLE    /* try to catch additional information about special console sequences */        if ((term_name = getenv("TERM")) == NULL) {	fprintf ( mfp -> Error_fp, "LAME: Can't get \"TERM\" environment string.\n" );	return -1;    }    if ( tgetent (term_buff, term_name) != 1 ) {	fprintf ( mfp -> Error_fp, "LAME: Can't find termcap entry for terminal \"%s\"\n", term_name );	return -1;    }        val = tgetnum ("co");    if ( val >= 40  &&  val <= 512 )        mfp -> disp_width   = val;    val = tgetnum ("li");    if ( val >= 16  &&  val <= 256 )        mfp -> disp_height  = val;            *(tp = tc) = '\0';    tp = tgetstr ("up", &tp);    if (tp != NULL)        strcpy ( mfp -> str_up, tp );    *(tp = tc) = '\0';    tp = tgetstr ("ce", &tp);    if (tp != NULL)        strcpy ( mfp -> str_clreoln, tp );    *(tp = tc) = '\0';    tp = tgetstr ("md", &tp);    if (tp != NULL)        strcpy ( mfp -> str_emph, tp );    *(tp = tc) = '\0';    tp = tgetstr ("me", &tp);    if (tp != NULL)        strcpy ( mfp -> str_norm, tp );        #endif /* TERMCAP_AVAILABLE */    return mfp;}/* printf for console */int  Console_printf ( Console_IO_t* const mfp, const char* const format, ... ){    va_list  args;    int      ret;    va_start ( args, format );    ret = vfprintf ( mfp -> Console_fp, s, args );    va_end ( args );        return ret;}/* printf for errors */int  Error_printf ( Console_IO_t* const mfp, const char* const format, ... ){    va_list  args;    int      ret;    va_start ( args, format );    ret = vfprintf ( mfp -> Error_fp, s, args );    va_end ( args );        flush ( mfp -> Error_fp );    return ret;}/* printf for additional reporting information */int  Report_printf ( Console_IO_t* const mfp, const char* const format, ... ){    va_list  args;    int      ret;    if ( mfp -> Report_fp != NULL ) {        va_start ( args, format );        ret = vfprintf ( mfp -> Report_fp, s, args );        va_end ( args );                return ret;    }        return 0;}int  close_console ( Console_IO_t* const mfp ){    if ( mfp == NULL  ||  mfp -> ClassID != CLASS_ID  ||  mfp -> Console_buff == NULL )        return -1;	    fflush  ( mfp -> Console_fp );    setvbuf ( mfp -> Console_fp, NULL, _IONBF, (size_t)0 );        memset ( mfp -> Console_buff, 0x55, REPORT_BUFF_SIZE );    free   ( mfp -> Console_buff );        memset ( mfp, 0x55, sizeof (*mfp) );    free   ( mfp );        return 0;}/* end of console.c */

⌨️ 快捷键说明

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