1 
2 #define TREE_DEPTH 32
3 #define TREE_STRING_SZ (2 + 2*TREE_DEPTH)
4 
5 struct plist {
6 	struct proc_t* nx;
7 	struct proc_t** ppv;
8 };
9 
10 struct proc_t {
11 	int pid;
12 	char   state;
13 	struct proc_t *parent;
14 	struct proc_t *child;
15 	struct plist mlist;
16 	struct plist broth;
17 	struct plist hash;
18 	void* priv;
19 };
20 
21 int update_tree(void del(void*));
22 int update_tree();
23 struct proc_t* find_by_pid(int pid);
24 struct proc_t* tree_start(int root, int start);
25 struct proc_t* tree_next();
26 char *tree_string(int root, struct proc_t *proc);
27 
28 extern int num_proc;
29 
30 #ifdef HAVE_STRUCT_KINFO_PROC_KP_PROC
31 	#ifdef KERN_PROC2
32 		#define kinfo_pid p_pid
33 		#define kinfo_ppid p_ppid
34 		#define kinfo_tpgid p_tpgid
35 		#define kinfo_svuid p_svuid
36 		#define kinfo_stat p_stat
37 		#define kinfo_comm p_comm
38 		#define kinfo_tdev p_tdev
39 	#else
40 		#define kinfo_pid kp_proc.p_pid
41 		#define kinfo_ppid kp_eproc.e_ppid
42 		#define kinfo_tpgid kp_eproc.e_tpgid
43 		#define kinfo_svuid kp_eproc.e_pcred.p_svuid
44 		#define kinfo_stat kp_proc.p_stat
45 		#define kinfo_comm kp_proc.p_comm
46 		#define kinfo_tdev kp_eproc.e_tdev
47 	#endif
48 #else
49 #  if defined __DragonFly__
50 	#define kinfo_pid kp_pid
51 	#define kinfo_ppid kp_ppid
52 	#define kinfo_tpgid kp_tpgid
53 	#define kinfo_svuid kp_svuid
54 	#define kinfo_stat kp_stat
55 	#define kinfo_comm kp_comm
56 	#define kinfo_tdev kp_tdev
57 #  else
58 	#define kinfo_pid ki_pid
59 	#define kinfo_ppid ki_ppid
60 	#define kinfo_tpgid ki_tpgid
61 	#define kinfo_svuid ki_svuid
62 	#define kinfo_stat ki_stat
63 	#define kinfo_comm ki_comm
64 	#define kinfo_tdev ki_tdev
65 #  endif
66 #endif
67