#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <limits.h>
#include <sys/types.h>
#include <pwd.h>
#include <sys/time.h>
#include <time.h>
#include <sys/ioctl.h>
#define TOP_DBG
#ifndef TOP_DBG
#ifndef NDEBUG
#define NDEBUG
#endif
#endif
#include <assert.h>
#include "libtop.h"
#include "disp.h"
#include "log.h"
#include "samp.h"
typedef enum {
TOP_SORT_command,
TOP_SORT_cpu,
TOP_SORT_pid,
TOP_SORT_prt,
TOP_SORT_reg,
TOP_SORT_rprvt,
TOP_SORT_rshrd,
TOP_SORT_rsize,
TOP_SORT_th,
TOP_SORT_time,
TOP_SORT_uid,
TOP_SORT_username,
TOP_SORT_vprvt,
TOP_SORT_vsize
} top_sort_key_t;
const char *
top_sort_key_str(top_sort_key_t a_key, boolean_t a_ascend);
extern char top_opt_c;
extern boolean_t top_opt_f;
extern unsigned top_opt_i;
#define TOP_MAX_INTERVAL 100
extern boolean_t top_opt_L;
extern boolean_t top_opt_l;
extern unsigned top_opt_l_samples;
extern unsigned top_opt_n;
#define TOP_MAX_NPROCS 0x7fffffff
extern top_sort_key_t top_opt_O;
extern boolean_t top_opt_O_ascend;
extern top_sort_key_t top_opt_o;
extern boolean_t top_opt_o_ascend;
extern char * top_opt_p_format;
extern char * top_opt_P_legend;
extern boolean_t top_opt_r;
extern boolean_t top_opt_S;
extern unsigned top_opt_s;
extern boolean_t top_opt_t;
extern boolean_t top_opt_U;
extern boolean_t top_opt_U_uid;
extern boolean_t top_opt_w;
#ifdef TOP_DEPRECATED
extern boolean_t top_opt_x;
#endif
#define FORMAT_PID 'a'
#define FORMAT_COMMAND 'b'
#define FORMAT_PERCENT_CPU 'c'
#define FORMAT_TIME 'd'
#define FORMAT_THREADS 'e'
#define FORMAT_PORTS 'f'
#define FORMAT_REGIONS 'g'
#define FORMAT_RPRVT 'h'
#define FORMAT_RSHRD 'i'
#define FORMAT_RSIZE 'j'
#define FORMAT_VPRVT 'k'
#define FORMAT_VSIZE 'l'
#define FORMAT_UID 'm'
#define FORMAT_USERNAME 'n'
#define FORMAT_FAULTS 'o'
#define FORMAT_PAGEINS 'p'
#define FORMAT_PAGEINS_D 'P'
#define FORMAT_COW_FAULTS 'q'
#define FORMAT_MSGS_SENT 'r'
#define FORMAT_MSGS_RECEIVED 's'
#define FORMAT_BSYSCALL 't'
#define FORMAT_MSYSCALL 'u'
#define FORMAT_CSWITCH 'v'
#define FORMAT_TIME_HHMMSS 'w'
#define VALID_FORMATS "abcdefghijklmnopqrstuvw"
#define FORMAT_ESCAPE '\'
#define FORMAT_LEFT '^'
#define FORMAT_RIGHT '$'
#define FORMAT_DELTA '-'
#define VALID_ESCAPES "\\^$-"
#define LEGEND_CN " PID COMMAND %CPU TIME #TH #PRTS #MREGS RPRVT RSHRD RSIZE VSIZE"
#define FORMAT_CN "$aaaa ^bbbbbbbbb $cccc% $wwwwwww $ee $ffff-$ggggg $hhhh- $iiii- $jjjj- $llll-"
#define LEGEND_CNW " PID COMMAND %CPU TIME #TH #PRTS(delta) #MREGS RPRVT(delta) RSHRD(delta) RSIZE(delta) VSIZE(delta)"
#define FORMAT_CNW "$aaaa ^bbbbbbbbb $cccc% $wwwwwww $ee $ffff------- $ggggg $hhhh------- $iiii------- $jjjj------- $llll-------"
#define LEGEND_CA " PID COMMAND %CPU TIME FAULTS PAGEINS COW_FAULTS MSGS_SENT MSGS_RCVD BSDSYSCALL MACHSYSCALL CSWITCH"
#define FORMAT_CA "$aaaa ^bbbbbbbbb $cccc% $wwwwwww ^oooooo ^ppppppp ^qqqqqqqqq ^rrrrrrrr ^ssssssss ^ttttttttt ^uuuuuuuuuu ^vvvvvv"
#define LEGEND_CD " PID COMMAND %CPU TIME FAULTS PGINS/COWS MSENT/MRCVD BSD/MACH CSW"
#define FORMAT_CD "$aaaa ^bbbbbbbbb $cccc% $wwwwwww $ooooo $pppp/^qqq $rrrr/^ssss $ttttt/^uuuuu $vvvvv"
#define LEGEND_CE LEGEND_CA
#define FORMAT_CE FORMAT_CA
#define LEGEND_XCN " PID UID REG RPRVT RSHRD RSIZE VPRVT VSIZE TH PRT TIME %CPU COMMAND"
#define FORMAT_XCN "$aaaa $mmmm $ggg $hhhh- $iiii- $jjjj- $kkkk- $llll-$ee $ff-$dddddd $cccc ^bbbbbbbbbbbbbbb"
#define LEGEND_XCNW " PID UID REG RPRVT( delta) RSHRD( delta) RSIZE( delta) VPRVT( delta) VSIZE( delta) TH PRT(delta) TIME %CPU COMMAND"
#define FORMAT_XCNW "$aaaa $mmmm $ggg $hhhh-------- $iiii-------- $jjjj-------- $kkkk-------- $llll--------$ee $ff-------$dddddd $cccc ^bbbbbbbbbbbbbbb"
#define LEGEND_XTCN " PID USERNAME REG RPRVT RSHRD RSIZE VPRVT VSIZE TH PRT TIME %CPU COMMAND"
#define FORMAT_XTCN "$aaaa ^nnnnnnnn $ggg $hhhh- $iiii- $jjjj- $kkkk- $llll-$ee $ff-$dddddd $cccc ^bbbbbbbbbbbbbbb"
#define LEGEND_XTCNW " PID USERNAME REG RPRVT( delta) RSHRD( delta) RSIZE( delta) VPRVT( delta) VSIZE( delta) TH PRT(delta) TIME %CPU COMMAND"
#define FORMAT_XTCNW "$aaaa ^nnnnnnnn $ggg $hhhh-------- $iiii-------- $jjjj-------- $kkkk-------- $llll--------$ee $ff-------$dddddd $cccc ^bbbbbbbbbbbbbbb"
#define LEGEND_XCA " PID UID REG RPRVT RSHRD RSIZE VPRVT VSIZE TH PRT FAULTS PAGEINS COW_FAULTS MSGS_SENT MSGS_RCVD BSYSCALL MSYSCALL CSWITCH TIME %CPU COMMAND"
#define FORMAT_XCA "$aaaa $mmmm $ggg $hhhh $iiii $jjjjj $kkkk $llll $ee $ff $ooooooooo $pppppppp $qqqqqqqqq $rrrrrrrr $ssssssss $ttttttt $uuuuuuu $vvvvvv $ddddd$ccccc $bbbbbbbbbbbbbbbb"
#define LEGEND_XTCA " PID USERNAME REG RPRVT RSHRD RSIZE VPRVT VSIZE TH PRT FAULTS PAGEINS COW_FAULTS MSGS_SENT MSGS_RCVD BSYSCALL MSYSCALL CSWITCH TIME %CPU COMMAND"
#define FORMAT_XTCA "$aaaa ^nnnnnnnn $ggg $hhhh $iiii $jjjjj $kkkk $llll $ee $ff $ooooooooo $ppppppp $qqqqqqqqq $rrrrrrrr $ssssssss $ttttttt $uuuuuuu $vvvvvv $ddddd$ccccc $bbbbbbbbbbbbbbbb"
#define LEGEND_XCD LEGEND_XCA
#define FORMAT_XCD FORMAT_XCA
#define LEGEND_XCE LEGEND_XCA
#define FORMAT_XCE FORMAT_XCA
#define LEGEND_XTCD LEGEND_XTCA
#define FORMAT_XTCD FORMAT_XTCA
#define LEGEND_XTCE LEGEND_XTCA
#define FORMAT_XTCE FORMAT_XTCA