xref: /openbsd-src/usr.bin/systat/engine.h (revision 07a32fc57e52c6788a886a4d60789ae51394d25b)
1*07a32fc5Smillert /* $OpenBSD: engine.h,v 1.14 2021/07/02 15:34:16 millert Exp $	 */
273baed14Scanacar /*
373baed14Scanacar  * Copyright (c) 2001, 2007 Can Erkin Acar <canacar@openbsd.org>
473baed14Scanacar  *
573baed14Scanacar  * Permission to use, copy, modify, and distribute this software for any
673baed14Scanacar  * purpose with or without fee is hereby granted, provided that the above
773baed14Scanacar  * copyright notice and this permission notice appear in all copies.
873baed14Scanacar  *
973baed14Scanacar  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
1073baed14Scanacar  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
1173baed14Scanacar  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
1273baed14Scanacar  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
1373baed14Scanacar  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
1473baed14Scanacar  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
1573baed14Scanacar  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
1673baed14Scanacar  */
1773baed14Scanacar 
1873baed14Scanacar #ifndef _ENGINE_H_
1973baed14Scanacar #define _ENGINE_H_
2073baed14Scanacar 
2173baed14Scanacar #include <curses.h>
2273baed14Scanacar 
2373baed14Scanacar #define DEFAULT_WIDTH  80
2473baed14Scanacar #define DEFAULT_HEIGHT 25
2573baed14Scanacar 
2673baed14Scanacar /* XXX do not hardcode! */
2773baed14Scanacar #define HEADER_LINES 4
2873baed14Scanacar 
2973baed14Scanacar 
3073baed14Scanacar #define CTRL_A  1
3173baed14Scanacar #define CTRL_B  2
3273baed14Scanacar #define CTRL_E  5
3373baed14Scanacar #define CTRL_F  6
3473baed14Scanacar #define CTRL_G  7
3573baed14Scanacar #define CTRL_H  8
3673baed14Scanacar #define CTRL_L  12
3773baed14Scanacar #define CTRL_N  14
3873baed14Scanacar #define CTRL_P  16
3973baed14Scanacar #define CTRL_V  22
4073baed14Scanacar 
4173baed14Scanacar #define META_V  246
4273baed14Scanacar 
4373baed14Scanacar #define MAX_LINE_BUF 1024
4473baed14Scanacar 
4573baed14Scanacar 
4673baed14Scanacar #define FLD_ALIGN_LEFT   0
4773baed14Scanacar #define FLD_ALIGN_RIGHT  1
4873baed14Scanacar #define FLD_ALIGN_CENTER 2
4973baed14Scanacar #define FLD_ALIGN_COLUMN 3
5073baed14Scanacar #define FLD_ALIGN_BAR    4
5173baed14Scanacar 
5273baed14Scanacar #define FLD_FLAG_HIDDEN 1
5373baed14Scanacar 
5473baed14Scanacar 
5573baed14Scanacar typedef struct {
568c14b096Sdlg 	const char *title;
5773baed14Scanacar 	int norm_width;
5873baed14Scanacar 	int max_width;
5973baed14Scanacar 	int increment;
6073baed14Scanacar 	int align;
6173baed14Scanacar 	int start;
6273baed14Scanacar 	int width;
6373baed14Scanacar 	unsigned flags;
6473baed14Scanacar 	int arg;
6573baed14Scanacar } field_def;
6673baed14Scanacar 
6773baed14Scanacar typedef struct {
6873baed14Scanacar 	char *name;
6973baed14Scanacar 	char *match;
7073baed14Scanacar 	int hotkey;
7173baed14Scanacar 	int (*func) (const void *, const void *);
7273baed14Scanacar } order_type;
7373baed14Scanacar 
7473baed14Scanacar struct view_manager {
7573baed14Scanacar 	char *name;
7673baed14Scanacar 	int  (*select_fn) (void);
7773baed14Scanacar 	int  (*read_fn)   (void);
7873baed14Scanacar 	void (*sort_fn)   (void);
7973baed14Scanacar 	int  (*header_fn) (void);
8073baed14Scanacar 	void (*print_fn)  (void);
8173baed14Scanacar 	int  (*key_fn)    (int);
8273baed14Scanacar 	order_type *order_list;
8373baed14Scanacar 	order_type *order_curr;
8473baed14Scanacar };
8573baed14Scanacar 
8673baed14Scanacar typedef struct {
8773baed14Scanacar 	field_def **view;
8873baed14Scanacar 	char *name;
8973baed14Scanacar 	int hotkey;
9073baed14Scanacar 	struct view_manager *mgr;
9173baed14Scanacar } field_view;
9273baed14Scanacar 
9373baed14Scanacar struct command {
9473baed14Scanacar 	char *prompt;
953185e9c1Scanacar 	void ( *exec)(const char *);
9673baed14Scanacar };
9773baed14Scanacar 
98d539d1daSmartijn enum message_mode {
99d539d1daSmartijn 	MESSAGE_NONE,
100d539d1daSmartijn 	MESSAGE_HELP,
101d539d1daSmartijn 	MESSAGE_VIEW,
102d539d1daSmartijn 	MESSAGE_ORDER
103d539d1daSmartijn };
10473baed14Scanacar 
10573baed14Scanacar void tb_start(void);
10673baed14Scanacar 
10773baed14Scanacar void tb_end(void);
10873baed14Scanacar 
10973baed14Scanacar int tbprintf(char *format, ...) GCC_PRINTFLIKE(1,2);
1105c280c62Smpf int tbprintft(char *format, ...) GCC_PRINTFLIKE(1,2);
11173baed14Scanacar 
11273baed14Scanacar void end_line(void);
11373baed14Scanacar void end_page(void);
11473baed14Scanacar 
11507fe0f2dScanacar void print_fld_str(field_def *, const char *);
11607fe0f2dScanacar void print_fld_age(field_def *, unsigned int);
11707fe0f2dScanacar void print_fld_sdiv(field_def *, u_int64_t, int);
11807fe0f2dScanacar void print_fld_size(field_def *, u_int64_t);
11907fe0f2dScanacar void print_fld_ssdiv(field_def *, int64_t, int);
12007fe0f2dScanacar void print_fld_ssize(field_def *, int64_t);
12107fe0f2dScanacar void print_fld_bw(field_def *, double);
12207fe0f2dScanacar void print_fld_rate(field_def *, double);
12307fe0f2dScanacar void print_fld_uint(field_def *, unsigned int);
12407fe0f2dScanacar void print_fld_float(field_def *, double, int);
12507fe0f2dScanacar void print_fld_bar(field_def *, int);
12607fe0f2dScanacar void print_fld_tb(field_def *);
12773baed14Scanacar 
12873baed14Scanacar void print_title(void);
12973baed14Scanacar 
13073baed14Scanacar void hide_field(field_def *fld);
13173baed14Scanacar void show_field(field_def *fld);
13273baed14Scanacar void field_setup(void);
13373baed14Scanacar 
13473baed14Scanacar void add_view(field_view *fv);
1353185e9c1Scanacar int set_view(const char *opt);
13673baed14Scanacar void next_view(void);
13773baed14Scanacar void prev_view(void);
13873baed14Scanacar 
1398d6a960aSmartijn int foreach_order(void (*callback)(order_type *));
1403185e9c1Scanacar void set_order(const char *opt);
14173baed14Scanacar void next_order(void);
142d539d1daSmartijn void show_help(void);
143d539d1daSmartijn void show_view(void);
144d539d1daSmartijn void show_order(void);
14573baed14Scanacar 
14673baed14Scanacar void setup_term(int maxpr);
147fcad183eSlum int check_termcap(void);
148*07a32fc5Smillert void refresh_delay(double delay);
14973baed14Scanacar 
15073baed14Scanacar void engine_initialize(void);
15173baed14Scanacar void engine_loop(int countmax);
15273baed14Scanacar 
15373baed14Scanacar struct command *command_set(struct command *cmd, const char *init);
154d539d1daSmartijn void message_toggle(enum message_mode);
15573baed14Scanacar const char *message_set(const char *msg);
15673baed14Scanacar 
15773baed14Scanacar void foreach_view(void (*callback)(field_view *));
15873baed14Scanacar 
15973baed14Scanacar extern int sortdir;
16073baed14Scanacar extern int dispstart;
161ca743186Smartijn extern int humanreadable;
16273baed14Scanacar extern int interactive;
163c7d45d65Sreyk extern int averageonly;
16473baed14Scanacar extern int maxprint;
16573baed14Scanacar extern int paused;
16673baed14Scanacar extern int rawmode;
16773baed14Scanacar extern int rawwidth;
16873baed14Scanacar extern int columns, lines;
16973baed14Scanacar 
17073baed14Scanacar extern int need_update;
17173baed14Scanacar extern int need_sort;
1725c280c62Smpf extern int separate_thousands;
17373baed14Scanacar 
17473baed14Scanacar extern volatile sig_atomic_t gotsig_close;
17573baed14Scanacar extern volatile sig_atomic_t gotsig_resize;
17673baed14Scanacar extern volatile sig_atomic_t gotsig_alarm;
17773baed14Scanacar 
17873baed14Scanacar extern field_view *curr_view;
17973baed14Scanacar extern struct view_manager *curr_mgr;
18073baed14Scanacar 
18173baed14Scanacar extern char tmp_buf[MAX_LINE_BUF];
18273baed14Scanacar 
18373baed14Scanacar extern int curr_line; /* XXX temp */
18473baed14Scanacar extern u_int32_t num_disp;
18573baed14Scanacar #endif
186