/* * Copyright (c) 1998-2007 Albert Dorofeev * For the updates see http://www.tigr.net/afterstep/ * * This software is distributed under GPL. For details see LICENSE file. */ #include #include #include #include #include "safecopy.h" #include "asmem_x.h" #include "state.h" extern struct asmem_state state; /* * default check and update intervals in microseconds * x11 events - every 1/100 th of a second (in mks) * Memory status - every second (in sec) */ #define X11_INTERVAL 10000L #define CHK_INTERVAL 1 int withdrawn = 0; int iconic = 0; int pushed_in = 1; char display_name[50]; char mainGeometry[50]; void defaults() { state.update_interval = CHK_INTERVAL; state.standard_free = 0; state.mb = 0; state.show_used = 0; safecopy(state.proc_mem_filename, PROC_MEM, 256); withdrawn = 0; iconic = 0; pushed_in = 1; safecopy(display_name, "", 50); safecopy(mainGeometry, "", 50); safecopy(state.bgcolor, "#303030", 50); safecopy(state.fgcolor, "#20b2aa", 50); safecopy(state.memory_color, "#4141d7", 50); safecopy(state.buffer_color, "#aa80aa", 50); safecopy(state.cache_color, "#bebebe", 50); safecopy(state.swap_color, "#ffa649", 50); } /* print the usage for the tool */ void usage() { printf("Usage : asmem [options ...]\n\n"); printf("-V print version and exit\n"); printf("-h -H -help print this message\n"); printf("-u the update interval in seconds\n"); printf("-mb the display is in MBytes\n"); printf("-used display used memory instead of free\n"); printf("-display the name of the display to use\n"); printf("-position position on the screen (geometry)\n"); printf("-withdrawn start in withdrawn shape (for WindowMaker)\n"); printf("-iconic start iconized\n"); printf("-standout standing out rather than being pushed in\n"); printf("-asis use free memory amount as read from device\n"); printf("-dev use the specified file as stat device\n\n"); printf("-bg background color\n"); printf("-fg base foreground color\n"); printf("-memory used memory bar color\n"); printf("-buffer buffer memory bar color\n"); printf("-cache cache memory bar color\n"); printf("-swap used swap space bar color\n"); printf("\n"); exit(0); } /* print the version of the tool */ void version() { printf("asmem : AfterStep memory utilization monitor version 1.12\n"); } void parsecmdline(int argc, char *argv[]) { char *argument; int i; /* parse the command line */ for (i=1; i= argc) usage(); state.update_interval = atoi(argv[i]); if ( state.update_interval < 1 ) state.update_interval = CHK_INTERVAL; } else if (!strncmp(argument,"-position",9)) { if (++i >= argc) usage(); safecopy(mainGeometry, argv[i], 50); } else if (!strncmp(argument,"-display",8)) { if (++i >= argc) usage(); safecopy(display_name, argv[i], 50); } else if (!strncmp(argument,"-dev",4)) { if (++i >= argc) usage(); safecopy(state.proc_mem_filename,argv[i],256); } else if (!strncmp(argument,"-bg",3)) { if (++i >= argc) usage(); safecopy(state.bgcolor, argv[i], 50); } else if (!strncmp(argument,"-fg",3)) { if (++i >= argc) usage(); safecopy(state.fgcolor, argv[i], 50); } else if (!strncmp(argument,"-memory",7)) { if (++i >= argc) usage(); safecopy(state.memory_color, argv[i], 50); } else if (!strncmp(argument,"-buffer",7)) { if (++i >= argc) usage(); safecopy(state.buffer_color, argv[i], 50); } else if (!strncmp(argument,"-cache",6)) { if (++i >= argc) usage(); safecopy(state.cache_color, argv[i], 50); } else if (!strncmp(argument,"-swap",5)) { if (++i >= argc) usage(); safecopy(state.swap_color, argv[i], 50); } else if (!strncmp(argument,"-V",2)) { version(); exit(0); } else if (!strncmp(argument,"-H",2)) { version(); usage(); } else if (!strncmp(argument,"-h",2)) { version(); usage(); } else { version(); usage(); } } else { version(); usage(); } } } int main(int argc, char** argv) { defaults(); parsecmdline(argc, argv); asmem_initialize(argc, argv, display_name, mainGeometry, withdrawn, iconic, pushed_in); while (1) { asmem_update(); usleep(X11_INTERVAL); } return 0; }