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 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216
|
/*
* Hardinfo2 - System Information and benchmark
* Copyright (C) 2003-2007 L. A. F. Pereira <l@tia.mat.br>
*
* 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 or later.
*
* 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"
#include "format_early.h"
typedef enum {
MODULE_FLAG_NONE = 0,
MODULE_FLAG_NO_REMOTE = 1<<0,
MODULE_FLAG_HAS_HELP = 1<<1,
MODULE_FLAG_HIDE = 1<<2,
MODULE_FLAG_BENCHMARK = 1<<3,
} ModuleEntryFlags;
typedef struct _ModuleEntry ModuleEntry;
typedef struct _ModuleAbout ModuleAbout;
typedef struct _FileTypes FileTypes;
typedef struct _ProgramParameters ProgramParameters;
struct _ProgramParameters {
gint create_report;
gint force_all_details; /* for create_report, include any "moreinfo" that exists for any item */
gint show_version;
gint gui_running;
gint skip_benchmarks;
gint quiet;
gint theme;
gint darkmode;
gint aborting_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
*/
gint markup_ok;
int fmt_opts;
gint report_format;
gint max_bench_results;
gint topiccached;
gchar *topic;
gchar *run_benchmark;
gchar *bench_user_note;
gchar *result_format;
gchar *path_lib;
gchar *path_data;
gchar *path_locale;
gchar *argv0;
float scale;
};
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 */
gchar *find_program(gchar *program_name);
gboolean check_program(gchar *program_name);
gchar *size_human_readable(gfloat size);
void nonblock_sleep(guint msec);
GSList *modules_get_list(void);
GSList *modules_load_selected(void);
GSList *modules_load_all(void);
void module_unload_all(void);
gchar *seconds_to_string(unsigned int seconds);
gchar *h_strdup_cprintf(const gchar *format, gchar *source, ...)
__attribute__((format(gnu_printf, 1, 3)));
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);
/* GTK UI stuff */
gint 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(const gchar *endpoint, const gchar *entry);
gint h_sysfs_read_int(const gchar *endpoint, const gchar *entry);
gint h_sysfs_read_hex(const gchar *endpoint, const gchar *entry);
gchar *h_sysfs_read_string(const gchar *endpoint, const gchar *entry);
#define SCAN_START() static gboolean scanned = FALSE; if (reload) scanned = FALSE; if (scanned) {return;} else {DEBUG("SCAN_RELOAD");}
#define SCAN_END() scanned = TRUE;
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
/* in gg_key_file_parse_string_as_value.c */
gchar *
gg_key_file_parse_string_as_value (const gchar *string, const gchar list_separator);
gchar *hardinfo_clean_grpname(const gchar *v, int replacing);
/* 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);
/* Same as hardinfo_spawn_command_line_sync(), but calls shell_status_pulse()
* before. */
gboolean hardinfo_spawn_command_line_sync(const gchar *command_line,
gchar **standard_output,
gchar **standard_error,
gint *exit_status,
GError **error);
/* a marker in text to point out problems, using markup where possible */
const char *problem_marker();
/* a version of g_strescape() that allows escaping extra characters.
* use with g_strcompress() as normal. */
gchar *gg_strescape (const gchar *source, const gchar *exceptions, const gchar *extra);
/* hinote helpers */
#define note_max_len 1024
#define note_printf(note_buff, fmt, ...) \
snprintf((note_buff) + strlen(note_buff), note_max_len - strlen(note_buff) - 1, fmt, ##__VA_ARGS__)
#define note_print(note_buff, str) note_printf((note_buff), "%s", str)
gboolean note_cond_bullet(gboolean cond, gchar *note_buff, const gchar *desc_str);
gboolean note_require_tool(const gchar *tool, gchar *note_buff, const gchar *desc_str);
int cpu_procs_cores_threads(int *p, int *c, int *t);
gchar *strwrap(const gchar *st, size_t w, gchar delimiter);
#endif /* __HARDINFO_H__ */
|