免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1459 | 回复: 2
打印 上一主题 下一主题

howto 命令行程序显示颜色 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-02-24 11:10 |只看该作者 |倒序浏览
就是能像下面这样输出
**pa = 8
*pb = 8 too

论坛徽章:
0
2 [报告]
发表于 2007-02-24 12:02 |只看该作者
用终端控制字符

论坛徽章:
0
3 [报告]
发表于 2007-02-26 10:35 |只看该作者

大概像这样,自己再看看

void ConsoleOutput( CONSOLEFORMAT fmt, const char* sz, ... )
{
    int     iCount;
    va_list args;

        strcpy(szConsoleOutputBuf, "");
    /*
    ** If the Output is going to the "INPUT" type....we don't parse for special
    ** characters like "%", they should have been handled by the caller
    */
    if ( fmt == INPUT )
    {
        strcpy( szConsoleOutputBuf, sz );
        iCount = 1;
    }
    else
    {
        va_start( args, sz );
        iCount = vsprintf( szConsoleOutputBuf, sz, args );
        va_end( args );
    }

    if ( iCount < 0 )
    {
        return;
    }

    #if 0
    // This is a reminder....They can be ORred together
    FOREGROUND_BLUE
    FOREGROUND_GREEN
    FOREGROUND_RED
    FOREGROUND_INTENSITY
    BACKGROUND_BLUE
    BACKGROUND_GREEN
    BACKGROUND_RED
    BACKGROUND_INTENSITY
    #endif

#ifdef WIN32
    #define PROMPTCOLOR  (FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED)
    #define INPUTCOLOR   (FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY)
    #define HELPCOLOR    (FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY)
    #define OUTPUTCOLOR  (FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED)
    #define TITLECOLOR   (FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY)
    #define HISTORYCOLOR (FOREGROUND_GREEN | FOREGROUND_RED)
    #define DEFAULTCOLOR (FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED)
    #define ERRORCOLOR   (FOREGROUND_RED | FOREGROUND_INTENSITY)
#else // WIN32
    // Foreground colors first
    #define ANSI_FBLACK   "\033[30m"
    #define ANSI_FRED     "\033[31m"
    #define ANSI_FGREEN   "\033[32m"
    #define ANSI_FYELLOW  "\033[33m"
    #define ANSI_FBLUE    "\033[34m"
    #define ANSI_FMAGENTA "\033[35m"
    #define ANSI_FCYAN    "\033[36m"
    #define ANSI_FWHITE   "\033[37m"

    #define ANSI_BBLACK   "\033[40m"
    #define ANSI_BRED     "\033[41m"
    #define ANSI_BGREEN   "\033[42m"
    #define ANSI_BYELLOW  "\033[43m"
    #define ANSI_BBLUE    "\033[44m"
    #define ANSI_BMAGENTA "\033[45m"
    #define ANSI_BCYAN    "\033[46m"
    #define ANSI_BWHITE   "\033[47m"

    #define ANSI_CLEAR    "\033[0m"
    #define ANSI_BOLD     "\033[1m"
    #define ANSI_UNDER    "\033[4m"
    #define ANSI_BLINK    "\033[5m"
    #define ANSI_INVERT   "\033[7m"

    // Assume Linux - ANSI Color Sequences
    #define PROMPTCOLOR  (ANSI_FWHITE ANSI_BBLACK)
    #define INPUTCOLOR   (ANSI_FCYAN ANSI_BOLD ANSI_BBLACK)
    #define HELPCOLOR    (ANSI_FWHITE ANSI_BOLD ANSI_BBLACK)
    #define OUTPUTCOLOR  (ANSI_FWHITE ANSI_BBLACK)
    #define TITLECOLOR   (ANSI_FYELLOW ANSI_BOLD ANSI_BBLACK)
    #define HISTORYCOLOR (ANSI_FYELLOW ANSI_BBLACK)
    #define DEFAULTCOLOR (ANSI_CLEAR)
    #define ERRORCOLOR   (ANSI_FRED ANSI_BOLD ANSI_BBLACK)
#endif // WIN32

        if ( fmt != LOGONLY )
        {
#ifdef WIN32
        WORD colorCode = DEFAULTCOLOR;
#else // WIN32
        char* colorCode = DEFAULTCOLOR;
#endif // WIN32

                switch ( fmt )
                {
                case PROMPT:   colorCode = PROMPTCOLOR; break;
                case INPUT:    colorCode = INPUTCOLOR; break;
                case HELP:     colorCode = HELPCOLOR; break;
                case OUTPUT:   colorCode = OUTPUTCOLOR; break;
                case TITLE:    colorCode = TITLECOLOR; break;
                case HISTORY:  colorCode = HISTORYCOLOR; break;
                case ERRORMSG: colorCode = ERRORCOLOR; break;
                default:       colorCode = DEFAULTCOLOR; break;
                }

        if ( gConsoleColorEnable )
        {
#ifdef WIN32
            SetConsoleTextAttribute( outputHandle, colorCode );
#else // WIN32
            fputs( colorCode, stdout );
            fflush( stdout );
#endif // WIN32
        }

        fputs( szConsoleOutputBuf, stdout );
        fflush( stdout );

        if ( gConsoleColorEnable )
        {
#ifdef WIN32
            SetConsoleTextAttribute( outputHandle, DEFAULTCOLOR );
#else // WIN32
            colorCode = DEFAULTCOLOR;
            fputs( colorCode, stdout );
            fflush( stdout );
#endif // WIN32
        }

                if ( fhLogging != NULL )
                {
                        fputs( szConsoleOutputBuf, fhLogging );
                        fflush( fhLogging );
                }
        }
        else
        {
                if ( fhEngineLogging != NULL )
                {
                        fputs( szConsoleOutputBuf, fhEngineLogging );
                        fflush( fhEngineLogging );
                }
        }

        myprintf(szConsoleOutputBuf);
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP