1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
|
/*
* HardInfo - Displays System Information
* Copyright (C) 2003-2007 Leandro A. F. Pereira <leandro@hardinfo.org>
*
* 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, version 2.
*
* 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef __HARDINFO_H__
#define __HARDINFO_H__
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <unistd.h>
#include <gtk/gtk.h>
#include "config.h"
#include "shell.h"
#include "vendor.h"
#include "gettext.h"
#include "info.h"
#define HARDINFO_COPYRIGHT_LATEST_YEAR 2017
#ifndef LOCALEDIR
#define LOCALEDIR "/usr/share/locale"
#endif
typedef enum {
MODULE_FLAG_NONE = 0,
MODULE_FLAG_NO_REMOTE = 1<<0,
MODULE_FLAG_HAS_HELP = 1<<1,
} ModuleEntryFlags;
typedef struct _ModuleEntry ModuleEntry;
typedef struct _ModuleAbout ModuleAbout;
typedef struct _FileTypes FileTypes;
typedef struct _ProgramParameters ProgramParameters;
struct _ProgramParameters {
gboolean create_report;
gboolean force_all_details; /* for create_report, include any "moreinfo" that exists for any item */
gboolean show_version;
gboolean gui_running;
gboolean list_modules;
gboolean autoload_deps;
gboolean run_xmlrpc_server;
gboolean skip_benchmarks;
/*
* OK to use the common parts of HTML(4.0) and Pango Markup
* in the value part of a key/value.
* Including the (b,big,i,s,sub,sup,small,tt,u) tags.
* https://developer.gnome.org/pango/stable/PangoMarkupFormat.html
*/
gboolean markup_ok;
gint report_format;
gint max_bench_results;
gchar **use_modules;
gchar *run_benchmark;
gchar *result_format;
gchar *path_lib;
gchar *path_data;
gchar *argv0;
};
struct _FileTypes {
gchar *name;
gchar *mime_type;
gchar *extension;
gpointer data;
};
struct _ModuleEntry {
gchar *name;
gchar *icon;
gpointer callback;
gpointer scan_callback;
guint32 flags;
};
struct _ModuleAbout {
const gchar *description;
const gchar *author;
const gchar *version;
const gchar *license;
};
/* String utility functions */
void remove_quotes(gchar *str);
char *strend(gchar *str, gchar chr);
void remove_linefeed(gchar *str);
gchar *strreplacechr(gchar *string, gchar *replace, gchar new_char);
gchar *strreplace(gchar *string, gchar *replace, gchar *replacement);
/* Widget utility functions */
void widget_set_cursor(GtkWidget *widget, GdkCursorType cursor_type);
gint tree_view_get_visible_height(GtkTreeView *tv);
/* File Chooser utility functions */
void file_chooser_open_expander(GtkWidget *chooser);
void file_chooser_add_filters(GtkWidget *chooser, FileTypes *filters);
gchar *file_chooser_get_extension(GtkWidget *chooser, FileTypes *filters);
gchar *file_chooser_build_filename(GtkWidget *chooser, gchar *extension);
gpointer file_types_get_data_by_name(FileTypes *file_types, gchar *name);
/* Misc utility functions */
#if RELEASE == 1
gpointer idle_free(gpointer ptr);
#else
gpointer __idle_free(gpointer ptr, gchar *f, gint l);
#define idle_free(p) __idle_free(p, __FILE__, __LINE__)
#endif /* RELEASE == 1 */
gchar *find_program(gchar *program_name);
gchar *size_human_readable(gfloat size);
void nonblock_sleep(guint msec);
void open_url(gchar *url);
GSList *modules_get_list(void);
GSList *modules_load_selected(void);
GSList *modules_load_all(void);
void module_unload_all(void);
ModuleAbout *module_get_about(ShellModule *module);
gchar *seconds_to_string(unsigned int seconds);
gchar *h_strdup_cprintf(const gchar *format, gchar *source, ...);
gchar *h_strconcat(gchar *string1, ...);
void h_hash_table_remove_all (GHashTable *hash_table);
void module_entry_scan_all_except(ModuleEntry *entries, gint except_entry);
void module_entry_scan_all(ModuleEntry *entries);
void module_entry_reload(ShellModuleEntry *module_entry);
void module_entry_scan(ShellModuleEntry *module_entry);
gchar *module_entry_function(ShellModuleEntry *module_entry);
const gchar *module_entry_get_note(ShellModuleEntry *module_entry);
gchar *module_entry_get_field(ShellModuleEntry * module_entry, gchar * field);
gchar *module_entry_get_moreinfo(ShellModuleEntry * module_entry, gchar * field);
/* BinReloc stuff */
gboolean binreloc_init(gboolean try_hardcoded);
/* GTK UI stuff */
gboolean ui_init(int *argc, char ***argv);
void parameters_init(int *argc, char ***argv, ProgramParameters *params);
extern ProgramParameters params;
/* Module stuff */
gchar *module_call_method(gchar *method);
gchar *module_call_method_param(gchar * method, gchar * parameter);
/* Sysfs stuff */
gfloat h_sysfs_read_float(gchar *endpoint, gchar *entry);
gint h_sysfs_read_int(gchar *endpoint, gchar *entry);
gchar *h_sysfs_read_string(gchar *endpoint, gchar *entry);
#define SCAN_START() static gboolean scanned = FALSE; if (reload) scanned = FALSE; if (scanned) return;
#define SCAN_END() scanned = TRUE;
#define _CONCAT(a,b) a ## b
#define CONCAT(a,b) _CONCAT(a,b)
void moreinfo_init(void);
void moreinfo_shutdown(void);
void moreinfo_add_with_prefix(gchar *prefix, gchar *key, gchar *value);
void moreinfo_add(gchar *key, gchar *value);
void moreinfo_del_with_prefix(gchar *prefix);
void moreinfo_clear(void);
gchar *moreinfo_lookup_with_prefix(gchar *prefix, gchar *key);
gchar *moreinfo_lookup(gchar *key);
#if !GLIB_CHECK_VERSION(2,44,0)
/* g_strv_contains() requires glib>2.44
* fallback for older versions in hardinfo/util.c */
gboolean g_strv_contains(const gchar * const * strv, const gchar *str);
#endif
/* Hardinfo labels that have # are truncated and/or hidden.
* Labels can't have $ because that is the delimiter in
* moreinfo.
* replacing = true will free v */
gchar *hardinfo_clean_label(const gchar *v, int replacing);
/* hardinfo uses the values as {ht,x}ml, apparently */
gchar *hardinfo_clean_value(const gchar *v, int replacing);
#endif /* __HARDINFO_H__ */
|