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

📄 debug.c

📁 multi-tabed terminal based on rxvt
💻 C
字号:
/*--------------------------------*-C-*---------------------------------* * File:    debug.c *----------------------------------------------------------------------* * * All portions of code are copyright by their respective author/s. * Copyright (c) 2007        Jingmin Zhou <jimmyzhou@users.sourceforge.net> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *----------------------------------------------------------------------*/#include "../config.h"#include "rxvt.h"uint32_t    g_dbg_mask = 0L;uint32_t    g_dbg_level = DBG_ERROR;static const char* dbg_level_name[DBG_LEVEL_MAX] = {    "FATAL",    "ERROR",    "WARN",    "INFO",    "VERBOSE",    "DEBUG",};/* !!! Sync the list with the above definition of dbgmask_t !!! */static const char* dbg_mask_name[DBG_IDX_MAX] = {    "COMMAND",    "SCREEN",    "PTYTTY",    "INIT",    "MAIN",    "LOGGING",    "MACROS",    "MENUBAR",    "TABBAR",    "SCROLLBAR",    "IMAGES",    "PIXMAP",    "TRANSPARENT",    "ENCODING",    "GKRELOT",    "MEMORY",    "SESSION",    "STRING",    "RESOURCE",    "XFTACS",    "MISC",};/* !!! Sync the list with the above definition of dbgmask_t !!! */static dbgmask_t dbg_mask_map[DBG_IDX_MAX] = {    DBG_COMMAND,    DBG_SCREEN,    DBG_PTYTTY,    DBG_INIT,    DBG_MAIN,    DBG_LOGGING,    DBG_MACROS,    DBG_MENUBAR,    DBG_TABBAR,    DBG_SCROLLBAR,    DBG_IMAGES,    DBG_PIXMAP,    DBG_TRANSPARENT,    DBG_ENCODING,    DBG_GKRELOT,    DBG_MEMORY,    DBG_SESSION,    DBG_STRING,    DBG_RESOURCE,    DBG_XFTACS,    DBG_MISC,};/*----------------------------------------------------------------------*//* EXTPROTO */intrxvt_msg (uint32_t level, uint32_t mask, const char* fmt, ...){    /* print fatal/error message regardless of its category */    if (level <= DBG_ERROR ||	/* print message unless its category and level are defined */	(g_dbg_level >= level && mask & g_dbg_mask))    {	int	len;	va_list	ap;	va_start (ap, fmt);	len = vfprintf (stderr, fmt, ap);	va_end (ap);	        /* add a newline if last character of fmt is not a newline */        if( fmt[ STRLEN(fmt)-1 ] != '\n' )	{             fputc( '\n', stderr );	     len++;	}        return (len);    }    return 0;}/* INTPROTO */static intrxvt_dbg_parse_masks (const char* maskstring){    int		mask = 0;    const char*	ptr;    if ('0' == maskstring[0] &&	('x' == maskstring[1] || 'X' == maskstring[1]))    {	for (ptr = maskstring+2; *ptr; ptr++)	{	    if (*ptr < '0' || *ptr > '9')		return 0;   /* invalid hex number */	    mask = (mask << 4) + (*ptr - '0');	}	if (ptr - maskstring > 32)	    return 0;	    /* mask hex too long */    }    else    {	const char* pcoma;	int	    len;	ptr = pcoma = maskstring;	do	{	    while (*pcoma && ',' != *pcoma)		pcoma ++;	    len = pcoma - ptr;	    if (0 == len)		return 0;	/* a single ',' without mask name */	    if (len == sizeof ("COMMAND") -1 &&		0 == STRNCASECMP (dbg_mask_name[DBG_IDX_COMMAND], ptr, len))		mask |= DBG_COMMAND;	    else if (len == sizeof ("SCREEN") -1 &&		0 == STRNCASECMP (dbg_mask_name[DBG_IDX_SCREEN], ptr, len))		mask |= DBG_SCREEN;	    else if (len == sizeof ("PTYTTY") -1 &&		0 == STRNCASECMP (dbg_mask_name[DBG_IDX_PTYTTY], ptr, len))		mask |= DBG_PTYTTY;	    else if (len == sizeof ("INIT") -1 &&		0 == STRNCASECMP (dbg_mask_name[DBG_IDX_INIT], ptr, len))		mask |= DBG_INIT;	    else if (len == sizeof ("MAIN") -1 &&		0 == STRNCASECMP (dbg_mask_name[DBG_IDX_MAIN], ptr, len))		mask |= DBG_MAIN;	    else if (len == sizeof ("LOGGING") -1 &&		0 == STRNCASECMP (dbg_mask_name[DBG_IDX_LOGGING], ptr, len))		mask |= DBG_LOGGING;	    else if (len == sizeof ("MACROS") -1 &&		0 == STRNCASECMP (dbg_mask_name[DBG_IDX_MACROS], ptr, len))		mask |= DBG_MACROS;	    else if (len == sizeof ("MENUBAR") -1 &&		0 == STRNCASECMP (dbg_mask_name[DBG_IDX_MENUBAR], ptr, len))		mask |= DBG_MENUBAR;	    else if (len == sizeof ("TABBAR") -1 &&		0 == STRNCASECMP (dbg_mask_name[DBG_IDX_TABBAR], ptr, len))		mask |= DBG_TABBAR;	    else if (len == sizeof ("SCROLLBAR") -1 &&		0 == STRNCASECMP (dbg_mask_name[DBG_IDX_SCROLLBAR], ptr, len))		mask |= DBG_SCROLLBAR;	    else if (len == sizeof ("IMAGES") -1 &&		0 == STRNCASECMP (dbg_mask_name[DBG_IDX_IMAGES], ptr, len))		mask |= DBG_IMAGES;	    else if (len == sizeof ("PIXMAP") -1 &&		0 == STRNCASECMP (dbg_mask_name[DBG_IDX_PIXMAP], ptr, len))		mask |= DBG_PIXMAP;	    else if (len == sizeof ("TRANSPARENT") -1 &&		0 == STRNCASECMP (dbg_mask_name[DBG_IDX_TRANSPARENT], ptr, len))		mask |= DBG_TRANSPARENT;	    else if (len == sizeof ("ENCODING") -1 &&		0 == STRNCASECMP (dbg_mask_name[DBG_IDX_ENCODING], ptr, len))		mask |= DBG_ENCODING;	    else if (len == sizeof ("GKRELOT") -1 &&		0 == STRNCASECMP (dbg_mask_name[DBG_IDX_GKRELOT], ptr, len))		mask |= DBG_GKRELOT;	    else if (len == sizeof ("MEMORY") -1 &&		0 == STRNCASECMP (dbg_mask_name[DBG_IDX_MEMORY], ptr, len))		mask |= DBG_MEMORY;	    else if (len == sizeof ("SESSION") -1 &&		0 == STRNCASECMP (dbg_mask_name[DBG_IDX_SESSION], ptr, len))		mask |= DBG_SESSION;	    else if (len == sizeof ("STRING") -1 &&		0 == STRNCASECMP (dbg_mask_name[DBG_IDX_STRING], ptr, len))		mask |= DBG_STRING;	    else if (len == sizeof ("RESOURCE") -1 &&		0 == STRNCASECMP (dbg_mask_name[DBG_IDX_RESOURCE], ptr, len))		mask |= DBG_RESOURCE;	    else if (len == sizeof ("XFTACS") -1 &&		0 == STRNCASECMP (dbg_mask_name[DBG_IDX_XFTACS], ptr, len))		mask |= DBG_XFTACS;	    else if (len == sizeof ("MISC") -1 &&		0 == STRNCASECMP (dbg_mask_name[DBG_IDX_MISC], ptr, len))		mask |= DBG_MISC;	    else if (len == sizeof ("ALL") -1 &&		0 == STRNCASECMP ("ALL", ptr, len))		mask |= 0xffffffff;	    else	    {		fprintf (stderr, "Error: unknown debug mask name %s\n", ptr);		return 0;	/* invalid mask name */	    }	    if (!*pcoma)		break;	    pcoma ++;	    ptr = pcoma;	}	while (*ptr);    }    g_dbg_mask = mask;    return 1;}/* INTPROTO */static intrxvt_dbg_parse_level (const char* levelstring){    int	    level;    if ((char) 0 == *levelstring)	return 0;    if ('0' <= *levelstring && *levelstring <= '9')	level = atoi (levelstring);    else    {	for (level = 0; level < DBG_LEVEL_MAX; level ++)	    if (0 == STRCASECMP (dbg_level_name[level], levelstring))		break;    }    if (level < 0 || level >= DBG_LEVEL_MAX)	return 0;    g_dbg_level = level;    return 1;}/* INTPROTO */static voidrxvt_dbg_usage (const char* argv){    int	    i;    fprintf (stderr, "Usage: %s -dm dbg_masks -dl dbg_level\n", argv);    fprintf (stderr, "    Available debug masks values and their names are:\n");    for (i = 0; i < DBG_IDX_MAX; i ++)	fprintf (stderr, "        0x%08x : %s\n", dbg_mask_map[i], dbg_mask_name[i]);	fprintf (stderr, "        0xffffffff : ALL\n");    fprintf (stderr, "    Available debug levels and their names are:\n");    for (i = 0; i < DBG_LEVEL_MAX; i ++)	fprintf (stderr, "        %d : %s\n", i, dbg_level_name[i]);}/* EXTPROTO */voidrxvt_parse_dbg_arguments (int argc, const char* const* argv){    int	    i;    for (i = 0; i < argc - 1; i ++)    {	if (0 == STRCASECMP("-dmask", argv[i]))	{	    if (!rxvt_dbg_parse_masks (argv[i+1]))	    {		rxvt_dbg_usage (argv[0]);		exit (1);	    }	    i ++; /* skip arguments to -dm option */	}	if (0 == STRCASECMP("-dlevel", argv[i]))	{	    if (!rxvt_dbg_parse_level (argv[i+1]))	    {		rxvt_dbg_usage (argv[0]);		exit (1);	    }	    i ++; /* skip arguments to -dl option */	}    }#ifdef DEBUG    fprintf (stderr, "Debug mask: 0x%08x, debug level: %d\n", g_dbg_mask, g_dbg_level);#endif}/*----------------------- end-of-file (C source) -----------------------*/

⌨️ 快捷键说明

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