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