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

📄 gobject-query.c

📁 嵌入式下基于MiniGUI的Web Browser
💻 C
字号:
/* GObject - GLib Type, Object, Parameter and Signal Library * Copyright (C) 1998-1999, 2000-2001 Tim Janik and Red Hat, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, MA 02111-1307, USA. */#include	"glibconfig.h"#include        "glib-object.h"#include	<stdio.h>#include	<stdlib.h>#include	<string.h>#ifdef HAVE_UNISTD_H#include	<unistd.h>#endif#include	<sys/stat.h>#include	<fcntl.h>static gchar *indent_inc = NULL;static guint spacing = 1;static FILE *f_out = NULL;static GType root = 0;static gboolean recursion = TRUE;#if 0#  define	O_SPACE	"\\as"#  define	O_ESPACE " "#  define	O_BRANCH "\\aE"#  define	O_VLINE "\\al"#  define	O_LLEAF	"\\aL"#  define	O_KEY_FILL "_"#else#  define	O_SPACE	" "#  define	O_ESPACE ""#  define	O_BRANCH "+"#  define	O_VLINE "|"#  define	O_LLEAF	"`"#  define	O_KEY_FILL "_"#endifstatic voidshow_nodes (GType        type,	    GType        sibling,	    const gchar *indent){  GType   *children;  guint i;    if (!type)    return;    children = g_type_children (type, NULL);    if (type != root)    for (i = 0; i < spacing; i++)      fprintf (f_out, "%s%s\n", indent, O_VLINE);    fprintf (f_out, "%s%s%s%s",	   indent,	   sibling ? O_BRANCH : (type != root ? O_LLEAF : O_SPACE),	   O_ESPACE,	   g_type_name (type));    for (i = strlen (g_type_name (type)); i <= strlen (indent_inc); i++)    fputs (O_KEY_FILL, f_out);    fputc ('\n', f_out);    if (children && recursion)    {      gchar *new_indent;      GType   *child;            if (sibling)	new_indent = g_strconcat (indent, O_VLINE, indent_inc, NULL);      else	new_indent = g_strconcat (indent, O_SPACE, indent_inc, NULL);            for (child = children; *child; child++)	show_nodes (child[0], child[1], new_indent);            g_free (new_indent);    }    g_free (children);}static ginthelp (gchar *arg){  fprintf (stderr, "usage: query <qualifier> [-r <type>] [-{i|b} \"\"] [-s #] [-{h|x|y}]\n");  fprintf (stderr, "       -r       specifiy root type\n");  fprintf (stderr, "       -n       don't descend type tree\n");  fprintf (stderr, "       -h       guess what ;)\n");  fprintf (stderr, "       -b       specify indent string\n");  fprintf (stderr, "       -i       specify incremental indent string\n");  fprintf (stderr, "       -s       specify line spacing\n");  fprintf (stderr, "qualifiers:\n");  fprintf (stderr, "       froots   iterate over fundamental roots\n");  fprintf (stderr, "       tree     print type tree\n");    return arg != NULL;}intmain (gint   argc,      gchar *argv[]){  GLogLevelFlags fatal_mask;  gboolean gen_froots = 0;  gboolean gen_tree = 0;  guint i;  gchar *iindent = "";  f_out = stdout;    fatal_mask = g_log_set_always_fatal (G_LOG_FATAL_MASK);  fatal_mask |= G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL;  g_log_set_always_fatal (fatal_mask);    root = G_TYPE_OBJECT;  g_type_init ();    for (i = 1; i < argc; i++)    {      if (strcmp ("-s", argv[i]) == 0)	{	  i++;	  if (i < argc)	    spacing = atoi (argv[i]);	}      else if (strcmp ("-i", argv[i]) == 0)	{	  i++;	  if (i < argc)	    {	      char *p;	      guint n;	      	      p = argv[i];	      while (*p)		p++;	      n = p - argv[i];	      indent_inc = g_new (gchar, n * strlen (O_SPACE) + 1);	      *indent_inc = 0;	      while (n)		{		  n--;		  strcpy (indent_inc, O_SPACE);		}	    }	}      else if (strcmp ("-b", argv[i]) == 0)	{	  i++;	  if (i < argc)	    iindent = argv[i];	}      else if (strcmp ("-r", argv[i]) == 0)	{	  i++;	  if (i < argc)	    root = g_type_from_name (argv[i]);	}      else if (strcmp ("-n", argv[i]) == 0)	{	  recursion = FALSE;	}      else if (strcmp ("froots", argv[i]) == 0)	{	  gen_froots = 1;	}      else if (strcmp ("tree", argv[i]) == 0)	{	  gen_tree = 1;	}      else if (strcmp ("-h", argv[i]) == 0)	{	  return help (NULL);	}      else if (strcmp ("--help", argv[i]) == 0)	{	  return help (NULL);	}      else	return help (argv[i]);    }    if (!gen_froots && !gen_tree)    return help (argv[i-1]);    if (!indent_inc)    {      indent_inc = g_new (gchar, strlen (O_SPACE) + 1);      *indent_inc = 0;      strcpy (indent_inc, O_SPACE);      strcpy (indent_inc, O_SPACE);      strcpy (indent_inc, O_SPACE);    }    if (gen_tree)    show_nodes (root, 0, iindent);  if (gen_froots)    {      root = ~0;      for (i = 0; i < 256; i++)	{	  const gchar *name = g_type_name (i);	  	  if (name)	    show_nodes (i, 0, iindent);	}    }    return 0;}

⌨️ 快捷键说明

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