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

📄 logview.c

📁 MANTIS是由科罗拉多大学开发的传感器网络嵌入式操作系统。 这是mantis的0.9.5版本的源码。
💻 C
字号:
//  This file is part of MANTIS OS, Operating System//  See http://mantis.cs.colorado.edu/////  Copyright (C) 2003-2005 University of Colorado, Boulder////  This program is free software; you can redistribute it and/or//  modify it under the terms of the mos license (see file LICENSE)/**************************************************************************//* File:    cortex.c                                                      *//* Author: Adam Torgerson adam.torgerson@colorado.edu                     *//*   Date: 06/08/04                                                       *//*                                                                        *//* A log viewer application for xml files generated by gateway xml logger *//**************************************************************************/#include <gtk/gtk.h>#include <glade/glade.h>#include <libxml/parser.h>#include <libxml/xpath.h>#include <time.h>#include <stdlib.h>#include <stdio.h>#include <string.h>#include "logview.h"#include "cortex/include/net_event.h"GtkWidget *window;GtkWidget *treeview;GtkTreeStore *tree_store;GtkCellRenderer *renderer;GtkTreeSelection *selection;GtkTreeViewColumn *column;enum {   COLUMN_ID,   COLUMN_LIGHT,   COLUMN_TEMP,   COLUMN_TIME,   NUM_COLUMNS};void about_callback (GtkMenuItem *menu_item, gpointer data){   g_warning ("About unimplemented");}xmlXPathObjectPtr run_xpath (xmlDocPtr doc, xmlChar *xpath_request){   xmlXPathObjectPtr xpath_results;   xmlXPathContextPtr context;   context = xmlXPathNewContext (doc);   xpath_results = xmlXPathEvalExpression (xpath_request, context);   if (!xpath_results) {      g_warning ("XPath expression '%s' did not return anything", xpath_request);      xmlXPathFreeContext (context);      return NULL;   }   if (xmlXPathNodeSetIsEmpty (xpath_results->nodesetval)) {      g_warning ("No result found for XPath expr '%s'", xpath_request);      xmlXPathFreeContext (context);      return NULL;   }   xmlXPathFreeContext (context);   return xpath_results;}void xml_open_file_helper (xmlNodePtr parent_node){   xmlNodePtr node = parent_node;   gint node_id = -1;   gint light = -1;   gint temp = -1;   gint time = -1;   while (node != NULL) {      if (node->type == XML_ELEMENT_NODE) {	 if (strcmp (node->name, "node_id") == 0)	    node_id = atoi (xmlNodeGetContent (node));	 if (strcmp (node->name, "light") == 0)	    light = atoi (xmlNodeGetContent (node));	 if (strcmp (node->name, "temp") == 0)	    temp = atoi (xmlNodeGetContent (node));	 if (strcmp (node->name, "time") == 0)	    time = atoi (xmlNodeGetContent (node));      }      node = node->next;   }   if (node_id == -1 || light == -1 || temp == -1 || time == -1) {      g_warning ("Not a complete xml log?: id:%d light:%d temp:%d time:%d",		 node_id, light, temp, time);   }   gchar *time_string = ctime ((time_t *)&time);   gchar *index;   GtkTreeIter iter_parent;   index = g_strrstr (time_string, "\n");   if (index)      *index = '\0';      gtk_tree_store_append (tree_store, &iter_parent, NULL);   gtk_tree_store_set (tree_store, &iter_parent, COLUMN_ID, node_id,		       COLUMN_LIGHT, light, COLUMN_TEMP, temp,		       COLUMN_TIME, time_string, -1);}void xml_open_file (gchar *filename){   gint i;      xmlDocPtr xml_doc = xmlParseFile (filename);   if (xml_doc == NULL) {      g_warning ("Couldn't parse '%s'", filename);      return;   }   xmlXPathObjectPtr xpath_results;   xpath_results = run_xpath (xml_doc, "//sensor_network_logger/light_temp_event");   if (xpath_results) {      xmlNodeSetPtr node_set = xpath_results->nodesetval;      for (i = 0; i < node_set->nodeNr; i++) {	 xmlNodePtr node = node_set->nodeTab[i]->xmlChildrenNode;	 xml_open_file_helper (node);      }   } else {      g_warning ("Couldn't find anything in the log file");      return;   }   xmlFreeDoc (xml_doc);   xmlCleanupParser ();}void open_callback_helper (GtkDialog *chooser, gint arg1, gpointer data){   gchar *filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (chooser));   if (arg1 == GTK_RESPONSE_CANCEL)      goto end;   if (filename == NULL) {      g_warning ("Tried to open a NULL filename");      goto end;   }   xml_open_file (filename);   goto end;end:   gtk_widget_destroy (GTK_WIDGET (chooser));}void open_callback (GtkMenuItem *menu_item, gpointer data){   GtkWidget *dialog = gtk_file_chooser_dialog_new ("Open XML Log File",						    GTK_WINDOW (window),						    GTK_FILE_CHOOSER_ACTION_OPEN,						    GTK_STOCK_CANCEL,						    GTK_RESPONSE_CANCEL,						    GTK_STOCK_OPEN,						    GTK_RESPONSE_ACCEPT,						    NULL);   gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);   g_signal_connect (G_OBJECT (dialog), "response",		     G_CALLBACK (open_callback_helper),		     NULL);   gtk_widget_show (dialog);}void quit_callback (GtkMenuItem *menu_item, gpointer data){   printf ("Exiting\n");   exit (0);}void create_treeview (void){   tree_store = gtk_tree_store_new (NUM_COLUMNS, G_TYPE_INT, G_TYPE_INT,				    G_TYPE_INT, G_TYPE_STRING);   treeview = gtk_tree_view_new_with_model (GTK_TREE_MODEL (tree_store));   g_object_unref (tree_store);   renderer = gtk_cell_renderer_text_new ();   column = gtk_tree_view_column_new_with_attributes ("Node ID",						      renderer,						      "text",						      COLUMN_ID,						      NULL);   gtk_tree_view_column_set_sort_column_id(column, COLUMN_ID);   gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);   renderer = gtk_cell_renderer_text_new ();   column = gtk_tree_view_column_new_with_attributes ("Light",						      renderer,						      "text",						      COLUMN_LIGHT,						      NULL);   gtk_tree_view_column_set_sort_column_id(column, COLUMN_LIGHT);   gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);   renderer = gtk_cell_renderer_text_new ();   column = gtk_tree_view_column_new_with_attributes ("Temp",						      renderer,						      "text",						      COLUMN_TEMP,						      NULL);   gtk_tree_view_column_set_sort_column_id(column, COLUMN_TEMP);   gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);   renderer = gtk_cell_renderer_text_new ();   column = gtk_tree_view_column_new_with_attributes ("Time",						      renderer,						      "text",						      COLUMN_TIME,						      NULL);   gtk_tree_view_column_set_sort_column_id(column, COLUMN_TIME);   gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);   gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(tree_store),					COLUMN_ID, GTK_SORT_ASCENDING);   selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview));   gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);   gtk_widget_show (treeview);   return;}int main (int argc, char *argv[]){   GladeXML *xml;      gtk_init (&argc, &argv);   glade_init ();   xml = glade_xml_new (GLADE_FILE, NULL, NULL);   if (!xml) {      g_warning ("Couldn't open glade xml file");      return -1;   }   window = glade_xml_get_widget (xml, "main_window");      GtkWidget *scrolled_window = glade_xml_get_widget (xml, "scrolledwindow1");   gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),				   GTK_POLICY_AUTOMATIC,				   GTK_POLICY_AUTOMATIC);   create_treeview ();   gtk_container_add (GTK_CONTAINER (scrolled_window), treeview);      gtk_widget_show_all (window);   glade_xml_signal_autoconnect (xml);   gtk_main ();      return 0;}

⌨️ 快捷键说明

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