1 /* $OpenBSD: machine.h,v 1.15 2007/05/29 00:56:56 otto Exp $ */ 2 3 /* 4 * Top users/processes display for Unix 5 * Version 3 6 * 7 * Copyright (c) 1984, 1989, William LeFebvre, Rice University 8 * Copyright (c) 1989, 1990, 1992, William LeFebvre, Northwestern University 9 * 10 * Redistribution and use in source and binary forms, with or without 11 * modification, are permitted provided that the following conditions 12 * are met: 13 * 1. Redistributions of source code must retain the above copyright 14 * notice, this list of conditions and the following disclaimer. 15 * 2. Redistributions in binary form must reproduce the above copyright 16 * notice, this list of conditions and the following disclaimer in the 17 * documentation and/or other materials provided with the distribution. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 20 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 21 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 22 * IN NO EVENT SHALL THE AUTHOR OR HIS EMPLOYER BE LIABLE FOR ANY DIRECT, INDIRECT, 23 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 24 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 28 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 */ 30 31 /* 32 * This file defines the interface between top and the machine-dependent 33 * module. It is NOT machine dependent and should not need to be changed 34 * for any specific machine. 35 */ 36 37 /* 38 * the statics struct is filled in by machine_init 39 */ 40 struct statics { 41 char **procstate_names; 42 char **cpustate_names; 43 char **memory_names; 44 char **order_names; 45 }; 46 47 /* 48 * the system_info struct is filled in by a machine dependent routine. 49 */ 50 51 struct system_info { 52 pid_t last_pid; 53 double load_avg[NUM_AVERAGES]; 54 int p_total; 55 int p_active; /* number of procs considered 56 * "active" */ 57 int *procstates; 58 int64_t *cpustates; 59 int *memory; 60 }; 61 62 /* 63 * cpu_states is an array of percentages * 10. For example, the (integer) 64 * value 105 is 10.5% (or .105). 65 */ 66 67 /* 68 * the process_select struct tells get_process_info what processes we 69 * are interested in seeing 70 */ 71 72 struct process_select { 73 int idle; /* show idle processes */ 74 int system; /* show system processes */ 75 int threads; /* show threads */ 76 uid_t uid; /* only this uid (unless uid == -1) */ 77 pid_t pid; /* only this pid (unless pid == -1) */ 78 char *command;/* only this command (unless == NULL) */ 79 }; 80 81 /* prototypes */ 82 extern int display_init(struct statics *); 83 84 /* machine.c */ 85 extern int machine_init(struct statics *); 86 extern char *format_header(char *); 87 extern void get_system_info(struct system_info *); 88 extern caddr_t 89 get_process_info(struct system_info *, struct process_select *, 90 int (*) (const void *, const void *)); 91 extern char *format_next_process(caddr_t, char *(*)(uid_t), pid_t *); 92 extern uid_t proc_owner(pid_t); 93 94 extern struct kinfo_proc2 *getprocs(int, int, int *); 95