/*
 * slmon
 *
 * Copyright (C) 2000, 2001, 2002 Krzysztof Luks <m00se@iq.pl>
 *
 * This program is distributed under the GPL license. For details see
 * COPYING text.
 *
 * Author: Krzysztof Luks <m00se@iq.pl>
 *
 * $Date: 2004/06/20 15:56:47 $
 * $Revision: 1.2 $
 *
 */

#ifndef UTF8
#define UTF8
#endif

#ifndef SLMON_DEFINES_H
#define SLMON_DEFINES_H

#include <sys/types.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <utmp.h>
#include <getopt.h>

#ifdef HAVE_SLANG_H
#include <slang.h>
#endif				/* !HAVE_SLANG_H */

#ifdef HAVE_SLANG_SLANG_H
#include<slang/slang.h>
#endif				/* !HAVE_SLANG_SLANG_H */

#include <signal.h>
#include <sys/utsname.h>
#include <sys/file.h>

#include <glib.h>
#include <glibtop/cpu.h>
#include <glibtop/uptime.h>
#include <glibtop/mem.h>
#include <glibtop/swap.h>
#include <glibtop/loadavg.h>
#include <glibtop/procmap.h>
#include <glibtop/mountlist.h>
#include <glibtop/fsusage.h>

#ifndef PROFILE_COUNT
#define PROFILE_COUNT   1000
#endif				/* !PROFILE_COUNT */

/* slmon specific defines */

#define MAXCPU 9

#define MODE_H 0		/* Histogram              */
#define MODE_M 1		/* Main                   */
#define MODE_N 2		/* Network                */
#define MODE_P 3		/* Proceses               */
#define MODE_X 4		/* Help                   */

#define COL_NORM 241		/* Default text color     */
#define COL_VALU 242		/* Values color           */
#define COL_STAT 243		/* Status line text       */
#define COL_STBA 244		/* Status line background */
#define COL_BACK 245		/* Background color       */
#define COL_GRA1 246		/* Gradient 1st color     */
#define COL_GRA2 247		/* Gradient 2nd color     */
#define COL_GRA3 248		/* Gradient 3rd color     */

#define GAUGE_LEFT 0		/* Gauge is drawn left of the caption */
#define GAUGE_RIGHT 1		/* Gauge is drawn right of the caption */

/* used to compute percentage of cpu usage */
struct last {
    double idlelast;
    double totallast;
};

struct last l[GLIBTOP_NCPU];	/* we have to remember data for all cpus */

static const int unit_div[3] = { 1, 1024, 1048576 };	/* unit dividers */
static const char unit_name[4] = { 'b', 'k', 'M', 'G' };	/* unit letters  */
unsigned long update_time;

/* main configuration is kept here */
struct config {
    int cpus;			/* number of processors */
    int mem;			/* memory usage unit */
    int fs;			/* fs usage unit */
    int net;			/* network traffic unit */
    int gauge_len;		/* gauge length */
    int fs_first;		/* which fs is displayed first */
    int fs_max;			/* how many fs should be displayed */
    int proc_first;		/* which process is displayed first */
    int proc_curr;
    int freq;			/* tick frequency */
    int iface_count;            /* number of interfaces */
    int iface_first;            /* which iface is displayed first */
    SLKeyMap_List_Type *map_h;
    SLKeyMap_List_Type *map_g;
    SLKeyMap_List_Type *map_n;
    SLKeyMap_List_Type *map_p;
    SLKeyMap_List_Type *map_x;
    SLKeyMap_List_Type *map;
    struct slmon_net *iface;
    int (*sort_func)(const void *, const void *);
} conf;

struct slmon_conf {
    const char *name;
    int type;			/* type of the value - unused? */
    int val;
};

typedef struct {
    char *user;
    unsigned int pid;
    unsigned long pcpu;
    unsigned long pmem;
    unsigned int vsz;
    unsigned int rss;
    char state;
    char *args;
} slmon_proc;

struct slmon_net {
    char *name;
    int now;
    unsigned long last_in;
    unsigned long last_out;
    struct slmon_net *next;
    struct slmon_net *prev;
};

slmon_proc *plist;

int rspace, cspace, do_bold, height;
int mode, last_mode, cur_cpu, pos, redraw;
int fnord;			/* We don't need to update all stats in every cycle */

char *col_norm;			/* descriptions       */
char *col_valu;			/* values             */
char *col_stat;			/* status line fg     */
char *col_stba;			/* status line bg     */
char *col_back;			/* background         */
char *col_gra1;			/* 1st gradient color */
char *col_gra2;			/* 2nd gradient color */
char *col_gra3;			/* 3rd gradient color */

/* vaild slang color names *
static char *slangColors[] = { "black", "red", "green", "brown",
    "blue", "magenta", "cyan", "lightgray", "gray", "brightred",
    "brightgreen", "yellow", "brightblue", "brightmagenta",
    "brightcyan", "white", "default"
};
*/

static const struct option slmon_options[] = {
    {"version", no_argument, 0, 'v'},
    {"help", no_argument, 0, 'h'},
    {"mem-unit", required_argument, 0, 'm'},
    {"fs-unit", required_argument, 0, 'f'},
    {"net-unit", required_argument, 0, 'n'},
    {"mode", required_argument, 0, 'd'},
    {"update", required_argument, 0, 'u'},
    {NULL, 0, 0, 0}
};

/* TODO: add colors */

static const struct slmon_conf rc_conf[] = {
    {"mode", 0, 'd'},
    {"mem_unit", 0, 'm'},
    {"fs_unit", 0, 'f'},
    {"net_unit", 0, 'n'},
    {"net_dev", 0, 'v'},
    {"update_time", 0, 't'},
    {NULL, 0, 0}
};

#endif				/* !SLMON_DEFINES_H */


syntax highlighted by Code2HTML, v. 0.9.1