diff -Nru wmlaptop-1.4-orig/src/battery.c wmlaptop-1.4/src/battery.c --- wmlaptop-1.4-orig/src/battery.c 2008-04-18 21:55:54.497550614 +0300 +++ wmlaptop-1.4/src/battery.c 2008-04-18 21:56:45.002550126 +0300 @@ -15,6 +15,8 @@ */ #include "battery.h" +#include + bool mallocBatteryVector( ) { @@ -96,9 +98,10 @@ } powerState.type = SUPPORT_ACPI; - powerState.updater = ACPI_Update; + powerState.updater = print_battery; + + - /* counting number of batteries */ powerState.nBatt = 0; powerState.batteryVector = NULL; @@ -108,26 +111,23 @@ return ERROR; } - /* a cicle for creating as many battery_str structures - * as are the batteries on the laptop; everyone will be - * filled with static informations */ + while ((batt = readdir (battdir))) { name = batt->d_name; - /* jump . and .. */ + if (!strncmp (".", name, 1) || !strncmp ("..", name, 2)) continue; countBattery++; - /* adding a battery to powerState vector */ + if( mallocBatteryVector( ) == ERROR ) return ERROR; batPtr = powerState.batteryVector[ powerState.nBatt - 1 ]; - /* we can find 'status' or even 'state' */ snprintf( path, 52, "%s/%s/status", ACPI_BATTERY_DIR, name ); if (access(path, R_OK) == SUCCESS ) snprintf( batPtr -> stateFile, 52, "%s/%s/status",ACPI_BATTERY_DIR, name ); @@ -135,20 +135,17 @@ snprintf( batPtr -> stateFile, 52, "%s/%s/state", ACPI_BATTERY_DIR, name ); - /* calculating maximum capacity of this battery - * reading file infos */ + batPtr -> useLFC = ACPI_lfcArgs_get( countBattery ); batPtr -> counter = countBattery; snprintf( batPtr -> infoFile, 52, "%s/%s/info", ACPI_BATTERY_DIR, name ); batPtr -> present = ACPI_maxCapacity ( batPtr ); - /* THIS IS NOT A BATTERY ! set error field to true: don't use it */ if( batPtr -> capacity == ~0x00 && batPtr -> present == true ) { batPtr -> error = true; } - /* filler selection :P */ batPtr -> filler = ACPI_Filler; } @@ -166,8 +163,6 @@ u_int16 saltCounter = 0; char * errorMessage = "wmlaptop will ignore this battery. If you don't want to see\nthis message, use '-q' option as argument.\n"; - /* we control 'last full capacity' tag before, if this - * don't exists or it's value is 0, then we use 'design capacity' */ char * lfcTagPointer = NULL; char * dcTagPointer = NULL; u_int32 lastFullCapacity = 0; @@ -189,7 +184,7 @@ if( !strcmp( presentString, "present:" ) && !strcmp( yesNoString, "no" ) ) { - /* to avoid division by 0 ? */ + p -> capacity = 1; return false; } @@ -207,11 +202,11 @@ } - /* naah.. */ + if( saltCounter >= 492 && !dcTagPointer && !lfcTagPointer ) { PRINTQ( stderr, "The info file (%s) has not \n'design capacity' and not event 'last full capacity' tag\n%s\n", p -> infoFile, errorMessage ); - /* we treat 1111.1111.1111.1111 as error here */ + p -> capacity = ~0x00; } @@ -340,66 +335,6 @@ } -void ACPI_Update ( ) -{ - FILE * fp; - char *where = NULL; - char buf[512]; - - register int i; - register u_int32 capacitySum = 0; - register u_int32 actualStateSum = 0; - - for( i = 0; i < powerState.nBatt; i++ ) - { - powerState.batteryVector[i] -> filler( powerState.batteryVector[i] ); - if (powerState.batteryVector[i] -> present) { - capacitySum += powerState.batteryVector[i] -> capacity; - actualStateSum += powerState.batteryVector[i] -> actualState; - } - } - - if (capacitySum > 0) - powerState.percentage = (actualStateSum * 100) / capacitySum; - else - powerState.percentage = 0; - - /* battery charger information reading - * thanks to wmpower */ - - if (!(fp = fopen ("/proc/acpi/ac_adapter/0/status", "r"))) - if (!(fp = fopen ("/proc/acpi/ac_adapter/ACAD/state", "r"))) - if (!(fp = fopen ("/proc/acpi/ac_adapter/AC/state", "r"))) - if (!(fp = fopen ("/proc/acpi/ac_adapter/ADP1/state", "r"))) - return; - - fread_unlocked (buf, 512, 1, fp); - fclose(fp); - - if (strncmp(buf, "state:", 6) == 0) - where = buf + 26; - if (strncmp(buf, "Status:", 7) == 0) - where = buf + 26; - - if (where) - { - if (where[0] == 'n') - powerState.isCharging = true; - if (where[0] == 'f') - powerState.isCharging = false; - } - - if( args_ttyMode ) - return; - - - setNewBatteryState(); - - - return; -} - - /* this vector will contain in each position the number of the * battery the user wants to be used with 'last full capacity' */ static u_int8 * lfcArgsVector = NULL; @@ -571,7 +506,7 @@ } else { - estimatedTimeClock( ); + print_battery( ); } draw_all(); lastChargingState = powerState.isCharging; @@ -580,101 +515,177 @@ } } +void read_power() +{ + DIR *dir; + struct dirent *dirent; + FILE *file; + extern double powerrate; + char filename[256]; -void estimatedTimeClock ( ) -{ - /* we remember last 5 percent values changes. - * for every value we record even the exact moment when this - * value was recorded (reading global variable secondsCounter) */ - static u_int32 values[5][2]; - static u_int8 valueIndex = ~0; + dir = opendir("/proc/acpi/battery"); + if (!dir) + return; - static bool lastIsCharging = false; + while ((dirent = readdir(dir))) { - register u_int8 diffPercentage = 0; - register u_int32 diffTime = 0; - register int i; + char line[1024]; + + sprintf(filename, "/proc/acpi/battery/%s/state", dirent->d_name); + file = fopen(filename, "r"); + if (!file) + continue; + memset(line, 0, 1024); + while (fgets(line, 1024, file) != NULL) { + char *c; + if (strstr(line, "present:") && strstr(line, "no")) + break; + c = strchr(line, ':'); + if (!c) + continue; + c++; - /* if battery charge is plugged in, values fetched before are - * reset to zero and return (draw_all() function already called - * by updater will draw TIME unlit, to indicate that we haven't - * a time estimation */ - if( lastIsCharging != powerState.isCharging ) - { - lastIsCharging = powerState.isCharging; - valueIndex = ~0; - powerState.remainingTime = 0; - return; + if (strstr(line, "present rate") && strstr(c, "mW")) + powerrate = strtoull(c, NULL, 10) / 1000.0; } + fclose(file); + } + closedir(dir); +// fprintf(stdout,"powerrate = %3.1f\n", powerrate); - for( i = 4; i > 0; i-- ) - { - values[i][1] = values[i-1][1]; - values[i][0] = values[i-1][0]; +} + + +void battery_capacity() +{ + DIR *dir; + struct dirent *dirent; + FILE *file; + extern double capacity; + char filename[256]; + + + dir = opendir("/proc/acpi/battery"); + if (!dir) + return; + + while ((dirent = readdir(dir))) { + + char line[1024]; + + sprintf(filename, "/proc/acpi/battery/%s/info", dirent->d_name); + file = fopen(filename, "r"); + if (!file) + continue; + memset(line, 0, 1024); + while (fgets(line, 1024, file) != NULL) { + char *c; + if (strstr(line, "present:") && strstr(line, "no")) + break; + + c = strchr(line, ':'); + if (!c) + continue; + c++; + + if (strstr(line, "last full capacity") && strstr(c, "mWh")) + capacity = strtoull(c, NULL, 10) / 1000.0; + } + fclose(file); } - values[i][0] = powerState.percentage; - values[i][1] = secondsCounter; + closedir(dir); +// fprintf(stdout,"capacity = %3.1f\n", capacity); +} - valueIndex += 1; - if( valueIndex > 4 ) - valueIndex = 4; +void print_battery(void) +{ + DIR *dir; + struct dirent *dirent; + FILE *file; + double rate = 0; + double cap = 0; - /* if it's the first measure, jump the comparation */ - if( valueIndex > 0 ) - { - u_int32 remainingSeconds; - /* we have into values[0] the most recent value, - * and in values[ valueIndex ] the less one */ + char filename[256]; - if( powerState.isCharging ) - diffPercentage = values[0][0] - values[ valueIndex ][0]; - else - diffPercentage = values[ valueIndex ][0] - values[0][0]; - diffTime = values[0][1] - values[ valueIndex ][1]; + dir = opendir("/proc/acpi/battery"); + if (!dir) + return; + + while ((dirent = readdir(dir))) { + double voltage = 0.0; + double amperes_drawn = 0.0; + double watts_drawn = 0.0; + double amperes_left = 0.0; + double watts_left = 0.0; + char line[1024]; + powerState.isCharging = false; + + if (strlen(dirent->d_name) < 3) + continue; + + sprintf(filename, "/proc/acpi/battery/%s/state", dirent->d_name); + file = fopen(filename, "r"); + if (!file) + continue; + memset(line, 0, 1024); + while (fgets(line, 1024, file) != NULL) { + char *c; + if (strstr(line, "present:") && strstr(line, "no")) + break; - /* this is the logic way: if diffTime is the number of seconds for - * losing(gaining) diffPercentage percent battery charge, how many - * seconds will it takes to lose(gain) remaining points ? in other words: - * diffTime : diffPercentage = remainingSeconds : powerState.percentage - * (or if we are charging = remainingSeconds : (100-powerState.percentage)) - * it shouldn't be possible to have diffPercentage = 0 - * because this function is called everytime that percent changes */ - if( diffPercentage == 0 ) - { - /* sometime it happends that 'diffPercentage == 0': i recieved some bug - * report about this. I don't know why this happends, and i didn't find - * any way to correct this conceptually, so i have to put this condition - * here and turn off the estimated remaining time */ - PRINTQ( stderr, "There is no difference of percentage between the first\n"); - PRINTQ( stderr, "relevation and the last one: i have to put remainingTime to 0\n"); - remainingSeconds = 0; + if (strstr(line, "charging state:") + && !strstr(line, "discharging")){ + powerState.isCharging = true; } - else - { - if( powerState.isCharging ) - remainingSeconds = ( diffTime * (100-powerState.percentage) ) / diffPercentage; - else - remainingSeconds = ( diffTime * powerState.percentage ) / diffPercentage; + c = strchr(line, ':'); + if (!c) + continue; + c++; + + if (strstr(line, "present voltage")) + voltage = strtoull(c, NULL, 10) / 1000.0; + + if (strstr(line, "remaining capacity") && strstr(c, "mW")) + watts_left = strtoull(c, NULL, 10) / 1000.0; + + if (strstr(line, "remaining capacity") && strstr(c, "mAh")) + amperes_left = strtoull(c, NULL, 10) / 1000.0; + + if (strstr(line, "present rate") && strstr(c, "mW")) + watts_drawn = strtoull(c, NULL, 10) / 1000.0 ; + + if (strstr(line, "present rate") && strstr(c, "mA")) + amperes_drawn = strtoull(c, NULL, 10) / 1000.0; + } + fclose(file); + - /* value in minutes */ - powerState.remainingTime = remainingSeconds / 60; - } - else - powerState.remainingTime = 0; - + if (!powerState.isCharging) { + rate += watts_drawn + voltage * amperes_drawn; + cap += watts_left + voltage * amperes_left; + powerState.remainingTime = 60*cap/rate; + powerrate = rate; +// fprintf(stdout,"taxa = %3.1fW horas=%3.1f \n", rate, cap/rate); + } + if (powerState.isCharging){ + rate += watts_drawn + voltage * amperes_drawn; +// fprintf(stdout,"watts left = %3.1f, watts drawn=%3.1f \n", watts_left, watts_drawn); + /* time to charge battery at 100% */ + powerState.remainingTime = 60*(capacity - watts_left)/watts_drawn; + } + + powerrate = rate; + powerState.percentage = 100*(watts_left/capacity); +// fprintf(stdout, "capacidade = %3.1f \n", capacity); +// fprintf(stdout,"porcentagem = %d \n", powerState.percentage); -#ifdef DEBUG - printf("TEMPO TRASCORSO: %u:%02u (%u secondi)\n",diffTime/60,diffTime%60,diffTime); - printf("PERCENTUALI: values[0] = %u, values[%d] = %u\n", values[0][0], valueIndex, values[valueIndex][0] ); - printf("TEMPIVALORI: values[0] = %u, values[%d] = %u\n", values[0][1], valueIndex, values[valueIndex][1] ); - printf("DIFFENREZA: %d\n", diffPercentage ); - printf("TEMPOSTIMATO: %d\n\n\n", powerState.remainingTime ); -#endif + } + closedir(dir); } diff -Nru wmlaptop-1.4-orig/src/battery.h wmlaptop-1.4/src/battery.h --- wmlaptop-1.4-orig/src/battery.h 2008-04-18 21:55:54.497550614 +0300 +++ wmlaptop-1.4/src/battery.h 2008-04-18 21:56:45.002550126 +0300 @@ -109,11 +109,10 @@ * state is changed. */ void setNewBatteryState( ); +void read_power(); -/* function invoked every time that remaining battery percentage changes - * and calculates estimated remaining time. - * (if changed from previous updates the dockapp */ -void estimatedTimeClock ( ); +void battery_capacity(); +void print_battery(); #endif diff -Nru wmlaptop-1.4-orig/src/cpu.c wmlaptop-1.4/src/cpu.c --- wmlaptop-1.4-orig/src/cpu.c 2008-04-18 21:55:54.497550614 +0300 +++ wmlaptop-1.4/src/cpu.c 2008-04-18 21:56:45.002550126 +0300 @@ -65,10 +65,9 @@ return loadline; } - void manageCpuLoad( ) { - static u_int8 lastCpuLoad = 100; +// static u_int8 lastCpuLoad = 100; #ifndef LONGRUN static u_int32 lastFreqChange = 0; #endif @@ -76,10 +75,10 @@ cpuLoad = getCpuLoad(); - if( cpuLoad != lastCpuLoad || cpuLoad == 100 ) - draw_all(); +// if( cpuLoad != lastCpuLoad || cpuLoad == 100 ) +// draw_all(); - lastCpuLoad = cpuLoad; +// lastCpuLoad = cpuLoad; /* Longrun manages frequency automatically, so skip all this */ @@ -120,7 +119,7 @@ /* let's read actual frequency to avoid a two seconds wait * dto now it */ - cpuReadFreq(); +// cpuReadFreq(); #endif return; @@ -130,10 +129,14 @@ void cpuReadFreq( ) { + #ifndef LONGRUN FILE * fp; char red[10]; + if (governor != 1) + cpuState.setFreqFile = "/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq"; + if( (fp = fopen( cpuState.setFreqFile, "r" )) == NULL ) { fprintf(stderr, "Error reading the info file (%s):\n%s\n", cpuState.setFreqFile, strerror(errno) ); @@ -170,19 +173,50 @@ } +void cpuReadTemp( ){ + DIR *dir; + struct dirent *dirent; + FILE *file; + int cpuTemp = 0; + char filename[256]; -void cpuCheckFreq() -{ - static u_int32 lastCpuFreq = 0; + dir = opendir("/proc/acpi/thermal_zone"); + if (!dir){ + return; + } + while ((dirent = readdir(dir))) { + char line[1024]; - cpuReadFreq(); + if (strlen(dirent->d_name) < 3) + continue; - if( lastCpuFreq != cpuState.actualFreq ) - draw_all(); - lastCpuFreq = cpuState.actualFreq; -} + sprintf(filename, "/proc/acpi/thermal_zone/%s/temperature", dirent->d_name); + file = fopen(filename, "r"); + if (!file) + continue; + memset(line, 0, 1024); + while (fgets(line, 1024, file) != NULL) { + char *c; + // if (strstr(line, "present:") && strstr(line, "no")) + // break; + + c = strchr(line, ':'); + if (!c) + continue; + c++; + + if (strstr(line, "temperature") && strstr(c, "C")) + cpuTemp = strtoull(c, NULL, 10); + } + fclose(file); + + cpuState.Temp = cpuTemp; +// fprintf(stdout,"temperatura = %d\n", cpuState.Temp); + } + closedir(dir); +} void cpuSetFreq( bool direction, bool speed ) { diff -Nru wmlaptop-1.4-orig/src/cpu.h wmlaptop-1.4/src/cpu.h --- wmlaptop-1.4-orig/src/cpu.h 2008-04-18 21:55:54.497550614 +0300 +++ wmlaptop-1.4/src/cpu.h 2008-04-18 21:56:45.003550530 +0300 @@ -37,6 +37,8 @@ * global variable cpuState */ void cpuReadFreq( ); +/* read cpu temperature and puts into cpuState.Temp */ +void cpuReadTemp(); /* invoked by events cycle e time every 2 seconds, it reads actual * frequency (calling readCpuFreq) and it redraws the dockapp if it's diff -Nru wmlaptop-1.4-orig/src/draw.c wmlaptop-1.4/src/draw.c --- wmlaptop-1.4-orig/src/draw.c 2008-04-18 21:55:54.497550614 +0300 +++ wmlaptop-1.4/src/draw.c 2008-04-18 21:56:45.003550530 +0300 @@ -16,6 +16,7 @@ #include "draw.h" +extern double powerrate; void draw_area(int sx, int sy, int w, int h, int dx, int dy) { @@ -37,9 +38,13 @@ draw_cpuload ( ); + if (governor == 1){ // 1 means userspace draw_auto_freq ( ); - draw_freq_arrows ( ); + } else { + draw_cputemp(); + draw_powerrate(); + } draw_actual_freq ( ); @@ -59,6 +64,18 @@ /* Mhz */ draw_area( 46, 119, 15, 9, 38, 51 ); + // colocar graus C e Watts se ondemand + /* C */ + if (governor == 2){ + /* draw C (Celsius) */ + draw_area( 0, 117, 4, 7, 52, 36 ); + /* draw W (Watts) */ + if (powerState.isCharging) + draw_area( 70, 130, 9, 7, 25, 37 ); + else + draw_area( 81, 130, 9, 7, 25, 37 ); + } + /* two gray lines */ draw_area( 66, 118, 55, 1, 4, 24 ); draw_area( 66, 118, 55, 1, 4, 48 ); @@ -87,10 +104,6 @@ u_int8 numBars; int i; - int j; - int battery = 0; - int batterySlot; - int presentBatteries = 0; if( powerState.percentage == 100 ) /* drawing the green <1> at first position*/ @@ -118,30 +131,15 @@ /* drawing <%> symbol of the right color */ draw_area( 40, baseY, 7, 7, 20, 5 ); - - /* let's see, how many batteries are present */ - for ( batterySlot = 0; batterySlot < powerState.nBatt; batterySlot ++ ) - if (powerState.batteryVector[batterySlot] -> present) - presentBatteries ++; - - - for( batterySlot = 0; batterySlot < powerState.nBatt; batterySlot ++ ) { - - if (powerState.batteryVector[batterySlot] -> present) { - battery ++; - /* battery drawing */ - numBars = (22 * powerState.batteryVector[batterySlot] -> percentage) / 100; + numBars = (22 * powerState.percentage) / 100; for( i = 0; i < numBars; i++ ) - draw_area( 49 + ( i > 10 ? i - 11 : i ), 95 + ( i > 10 ? 7 : 0), 1, (7 / presentBatteries), 15+(i*2), 15 + (battery - 1) * (7 / presentBatteries + 1 ) ); + draw_area( 49 + ( i > 10 ? i - 11 : i ), 95 + ( i > 10 ? 7 : 0), 1, (7 / 1), 15+(i*2), 15 ); /* unlit remaining battery */ - for( j = i; j < 22; j++ ) - draw_area( 60, 95, 1, (7 / presentBatteries), 15 + (j*2), 15 + (battery - 1) * (7 / presentBatteries + 1 ) ); - - } - } +// for( j = i; j < 22; j++ ) +// draw_area( 60, 95, 1, (7 / 1), 15 + (j*2), 15 + (battery - 1) * (7 / 2 ) ); return; } @@ -232,6 +230,60 @@ } +void draw_cputemp ( ) +{ + + u_int8 decine = cpuState.Temp == 100 ? 0 : (cpuState.Temp / 10); + u_int8 unita = cpuState.Temp % 10; + + + /* tens drawing */ + if( decine == 0 && cpuState.Temp != 100 ) + draw_area( 57, 75, 4, 7, 49, 27 ); + else + draw_area( decine*4, 71, 4, 7, 40, 36 ); + + /* units drawing */ + draw_area( unita*4, 71, 4, 7, 45, 36 ); + + +} + +void draw_powerrate ( ) +{ + + u_int8 decine = 0; + u_int8 unita = 0; + u_int8 decimal = 0; + + if (powerrate > 10){ + decine = (powerrate / 10); + unita = powerrate - decine*10; + decimal = powerrate*10 - decine*100 - unita*10; + } + else { + decine = 0; + unita = powerrate; + decimal = powerrate*10 - unita*10; + } + + /* tens drawing */ + if( decine == 0 ) + draw_area( 57, 75, 4, 7, 5, 37 ); + else + draw_area( decine*4, 78 - powerState.isCharging*14, 4, 7, 5, 37 ); + + /* units drawing */ + draw_area( unita*4, 78 - powerState.isCharging*14, 4, 7, 10, 37 ); + + /* decimal point */ + draw_area( 0, 83 - powerState.isCharging*14, 2, 1, 15, 43 ); + + /* decimals drawing */ + draw_area( decimal*4, 78 - powerState.isCharging*14, 4, 7, 18, 37 ); +} + + void draw_auto_freq ( ) { if ( cpuState.auto_freq_state ){ diff -Nru wmlaptop-1.4-orig/src/draw.h wmlaptop-1.4/src/draw.h --- wmlaptop-1.4-orig/src/draw.h 2008-04-18 21:55:54.497550614 +0300 +++ wmlaptop-1.4/src/draw.h 2008-04-18 21:56:45.004550097 +0300 @@ -53,10 +53,19 @@ void draw_auto_freq ( ); /* it draws the arrows at left and right of the cpu frequency */ + void draw_freq_arrows ( ); -/* it draws actua cpu frequency */ + +/* it draws the actual cpu frequency */ void draw_actual_freq ( ); +/* it draws the cpu temperature */ +void draw_cputemp(); + +/* it draws the rate at which the battery is + * discharging/charging */ +void draw_powerrate(); + #endif diff -Nru wmlaptop-1.4-orig/src/event.c wmlaptop-1.4/src/event.c --- wmlaptop-1.4-orig/src/event.c 2008-04-18 21:55:54.497550614 +0300 +++ wmlaptop-1.4/src/event.c 2008-04-18 21:56:45.004550097 +0300 @@ -16,11 +16,10 @@ #include "event.h" - - void event_handler ( ) { - u_int32 update_seconds; + u_int32 update_seconds, update_seconds2, update_seconds3; + u_int32 batteryUpdate, powerUpdate, tempUpdate; u_int8 lastPercentage; int j; @@ -31,9 +30,11 @@ secondsCounter = time(NULL); powerState.updater(); update_seconds = time(NULL); + update_seconds2 = update_seconds; lastPercentage = powerState.percentage; - if( powerState.percentage == 100 && powerState.isCharging && args_paradisiac == PARADISIAC_ON ) + + if( powerState.percentage == 100 && powerState.isCharging && args_paradisiac == PARADISIAC_ON && governor == 1) { if( args_ttyMode && args_beQuiet == false #ifndef LONGRUN @@ -78,6 +79,7 @@ switch ( j ) { + if (governor == 1){ /* auto-freq */ case MREGION_AUTOFREQ: /* toggle auto-freqency "(c)2003 LdP" scaling mode */ @@ -112,7 +114,7 @@ cpuState.auto_freq_state = false; #endif break; - + } } /* if a cliccable region was clicked, the dockapp is redrawn */ @@ -134,17 +136,32 @@ } - /* update battery percentage and cpuFreq - * once every batteryUpdate milliseconds; check for autoscripts - * and cpuParadisiac too */ - if( update_seconds <= secondsCounter - (args_batteryUpdate/1000) ) + /* If cpuload is less than 90% then the system is 'idle', so we + * update battery percentage, temperature and power with + * defaults values (which are confortably big as to not + * overuse the acpi system and generate to many wakeups (detected + * by Intel's powertop). + * If cpuload is bigger than 90% it makes sense to check these + * values more often (especially the temperature), so we set + * the update times to default small values. + */ + + if (cpuLoad < 90) { + batteryUpdate = args_batteryUpdate; + powerUpdate = args_powerUpdate; + tempUpdate = args_tempUpdate; + } + else { + batteryUpdate = 10; + powerUpdate = 2; + tempUpdate = 2; + } + + + if( update_seconds <= secondsCounter - batteryUpdate ) { update_seconds = secondsCounter; - /* longrun adjusts so quickly that if you put the check - after the succeeding line it consistently reads a - higher MHz (in ACPI) */ - cpuCheckFreq(); - powerState.updater(); + print_battery(); if( args_autoShutdown != AUTOSHUTDOWN_OFF ) checkAutoShutdown ( ); @@ -152,13 +169,31 @@ if( args_autoAlarm != AUTOALARM_OFF ) checkAutoAlarm ( ); - if( args_paradisiac == PARADISIAC_ON ) - cpuSetParadisiac ( ); +// if( args_paradisiac == PARADISIAC_ON && governor == 1) +// cpuSetParadisiac ( ); + } + + if( update_seconds2 <= secondsCounter - tempUpdate ){ + update_seconds2 = secondsCounter; + cpuReadTemp(); +// fprintf(stdout,"executei temperatura \n"); + } + + if( update_seconds3 <= secondsCounter - powerUpdate ){ + update_seconds3 = secondsCounter; + read_power(); +// fprintf(stdout,"executei power \n"); } /* check and redraw cpu load */ + if (governor == 1) manageCpuLoad(); - usleep( 1000*args_cpuUpdate /*150000*/ ); + if (governor == 2){ + cpuLoad = getCpuLoad(); + } + cpuReadFreq(); + draw_all(); + usleep( 1000*args_cpuUpdate ); } } diff -Nru wmlaptop-1.4-orig/src/init.c wmlaptop-1.4/src/init.c --- wmlaptop-1.4-orig/src/init.c 2008-04-18 21:55:54.497550614 +0300 +++ wmlaptop-1.4/src/init.c 2008-04-18 21:56:45.005550432 +0300 @@ -189,80 +189,6 @@ } -/* this chech for the string 'userspace' is in scaling_governor file under /sys/.. dir - * (only in case we are going to use SYS's way to set cpufreq). If 'userspace' is not set - * then we try to set it by ourself */ -void scalingGovernorHelper( ) -{ - char * scaling_governor_path = "/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor"; - char * scaling_governor_av_path = "/sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors"; - char * error_msg = "Unable to read <%s>:\n%s\nwmlaptop cannot help you in cpu scaling governor\n"; - FILE * sysfp; - FILE * sysavfp; - char littleBuffer[128]; - - bool printIt = false; - int i; - - if( ( sysfp = fopen( scaling_governor_path, "r" ) ) == NULL ) { - PRINTQ( stderr, error_msg, scaling_governor_path, strerror(errno) ); - return; - } - - fgets( littleBuffer, 127, sysfp ); - fclose( sysfp ); - - if( !strcmp( littleBuffer, "userspace\n" ) ) - return; - - if( ( sysavfp = fopen( scaling_governor_av_path, "r" ) ) == NULL ) { - PRINTQ( stderr, error_msg, scaling_governor_av_path, strerror(errno) ); - return; - } - - fgets( littleBuffer, 127, sysavfp ); - fclose( sysavfp ); - - for( i = 0; i < strlen( littleBuffer ) - 9 ; i++ ) - if( !strncmp( littleBuffer, "userspace", 9 ) ) - { - /* ok, module is loaded */ - printIt = true; - break; - } - - - if( printIt == false ) { - int s; - PRINTQ( stderr, "It seems that you do not have 'cpufreq_userspace' module loaded in your kernel\n"); - PRINTQ( stderr, "I try to call \"/sbin/modprobe cpufreq_userspace\"\n"); - - /* ugly.. but very fast */ - s = system( "/sbin/modprobe cpufreq_userspace" ); - - if( s == 0 ) - PRINTQ( stderr, "..good.\n" ); - else - { - PRINTQ( stderr, "you should do it by yourself (maybe you need to recompile kernel ?)\n"); - return; - } - } - - /* All ok here */ - if( ( sysfp = fopen( scaling_governor_path, "w" )) == NULL ) - PRINTQ( stderr, error_msg, scaling_governor_path, strerror(errno)); - else - { - PRINTQ( stderr, "echoing 'userspace' > '%s'\n", scaling_governor_path ); - fprintf( sysfp, "userspace" ); - fclose( sysfp ); - } - - return; -} - - /* riempe la struttura cpuState tenendo anche conto * degli argomenti passati da linea di comando */ @@ -293,7 +219,6 @@ /* auto_freq_state */ cpuState.auto_freq_state = ( args_autoFreq == AUTOFREQ_ON ); - /* min freq */ if( (fp = fopen( paths[0][idx[0]], "r" )) == NULL ) { fprintf( stderr, "Error reading the info file (%s):\n%s\n", paths[0][idx[0]], strerror(errno) ); @@ -313,21 +238,12 @@ fgets ( red, 10, fp ); cpuState.maxFreq = atoi ( red ); - fclose ( fp ); /* set freq file */ cpuState.setFreqFile = paths[2][idx[2]]; - /* if we have to use the SYS's way to set cpufreq, then ensure that in - * scaling_governor there has been put 'userspace'; otherwise let's try - * to put it by ourself */ - if( idx[2] == 0 ) - scalingGovernorHelper( ); - - - cpuReadFreq( ); - + cpuReadFreq(); /* set freq */ cpuState.setFreq = cpuState.actualFreq; @@ -336,6 +252,7 @@ /* step freq */ cpuState.stepFreq = args_incrementalStep; + #else /* init and get first actual frequency */ /* PENDING: get these files from config */ @@ -377,8 +294,7 @@ free_and_exit( ERROR ); } #endif - switch( args_startingFreq ) - { + switch( args_startingFreq ){ case STARTINGFREQ_MIN: #ifndef LONGRUN /* frequence at min */ @@ -398,14 +314,16 @@ #endif } + #ifndef LONGRUN #ifdef DEBUG fprintf ( stderr, "min freq: %d\nmax freq: %d\nactual freq: %d\n", cpuState.minFreq, cpuState.maxFreq, cpuState.actualFreq ); #endif #else fprintf ( stderr, "LongRun CPU starts at %d, with autoadjust = %d\n\n", cpuState.setLevelIdx, cpuState.auto_freq_state ); - cpuEchoFreq(); /* set initial range */ +// cpuEchoFreq(); /* set initial range */ #endif + return; } diff -Nru wmlaptop-1.4-orig/src/main.c wmlaptop-1.4/src/main.c --- wmlaptop-1.4-orig/src/main.c 2008-04-18 21:55:54.497550614 +0300 +++ wmlaptop-1.4/src/main.c 2008-04-18 22:08:44.250548770 +0300 @@ -29,6 +29,8 @@ /* command line's args */ u_int32 args_cpuUpdate = ARGSDEF_LEAVE; + u_int32 args_powerUpdate = ARGSDEF_LEAVE; + u_int32 args_tempUpdate = ARGSDEF_LEAVE; u_int32 args_batteryUpdate = ARGSDEF_LEAVE; char * args_XDisplayName = NULL; bool args_autoFreq = ARGSDEF_LEAVE; @@ -52,6 +54,9 @@ bool args_dontBlink100 = ARGSDEF_DONTBLINK100; bool args_ttyMode = ARGSDEF_LEAVE; bool args_skin = ARGSDEF_LEAVE; + int governor = 2; // 1=userspace 2=ondemand + double powerrate = 1; + double capacity; /* X's stuff */ struct mouseRegion mouse_region[MAX_MOUSE_REGION]; @@ -106,8 +111,13 @@ } } - init_cpuState ( ); - powerState.updater(); + if (governor == 1){ + init_cpuState(); + } + battery_capacity(); + cpuReadTemp(); + print_battery(); + if( args_ttyMode ) { fprintf( stdout, "\n" ); @@ -119,6 +129,7 @@ } else { + if (governor == 1){ /* auto-freq mouse region */ AddMouseRegion( MREGION_AUTOFREQ, 7, 36, 55, 46 ); /* cpu frequency left arrow */ @@ -126,6 +137,9 @@ /* cpu frequency right arrow */ AddMouseRegion( MREGION_MAXFREQ, 55, 52, 58, 59 ); } + + } + event_handler ( ); @@ -204,9 +218,13 @@ fprintf( stderr, " v - victory jingle\n"); fprintf( stderr, " h - high-bell sounds\n"); fprintf( stderr, " --alarm-repeat=N repeat the choosen alarm N times\n"); + fprintf( stderr, "[KERNEL-related-options]:\n"); + fprintf( stderr, " --governor=ondemand|userspace choose cpu scaling governor\n"); fprintf( stderr, "[GENERAL-options]:\n"); fprintf( stderr, " --cpu-update=N how often, in milliseconds, to update CPU display\n"); - fprintf( stderr, " --battery-update=N how often, in milliseconds, update battery state\n"); + fprintf( stderr, " --battery-update=N how often, in seconds, to update battery state\n"); + fprintf( stderr, " --power-update=N how often, in seconds, to update power state\n"); + fprintf( stderr, " --temperature-update=N how often, in seconds, to update temperature state\n"); fprintf( stderr, " -p --play play alarm and exit\n"); fprintf( stderr, " -q --quiet do not print messages and warnings\n"); fprintf( stderr, " -d --default show the default compiled settings and exit\n"); @@ -318,6 +336,14 @@ args_startingFreq = STARTINGFREQ_MAX; continue; } + if( !strcmp( argv[i], "--governor=ondemand" ) ) { + governor=2; + continue; + } + if( !strcmp( argv[i], "--governor=userspace" ) ) { + governor=1; + continue; + } if( !strncmp( argv[i], "--max-freq=", 11 ) ) { EXIT_IF_ALREADY_SET( args_maxFreq, ARGSDEF_LEAVE, "maxFreq" ); @@ -465,7 +491,7 @@ ptr = strchr( argv[i], '=' ); ptr++; args_cpuUpdate = atoi( ptr ); - WARNING_IS_SET_TO_ZERO( args_maxFreq, "cpuUpdate" ); + WARNING_IS_SET_TO_ZERO( args_cpuUpdate, "cpuUpdate" ); continue; } @@ -474,7 +500,25 @@ ptr = strchr( argv[i], '=' ); ptr++; args_batteryUpdate = atoi( ptr ); - WARNING_IS_SET_TO_ZERO( args_maxFreq, "batteryUpdate" ); + WARNING_IS_SET_TO_ZERO( args_batteryUpdate, "batteryUpdate" ); + continue; + } + + if( !strncmp( argv[i], "--power-update=", 11 ) ) { + EXIT_IF_ALREADY_SET( args_powerUpdate, ARGSDEF_LEAVE, "powerUpdate" ); + ptr = strchr( argv[i], '=' ); + ptr++; + args_powerUpdate = atoi( ptr ); + WARNING_IS_SET_TO_ZERO( args_powerUpdate, "powerUpdate" ); + continue; + } + + if( !strncmp( argv[i], "--temperature-update=", 11 ) ) { + EXIT_IF_ALREADY_SET( args_tempUpdate, ARGSDEF_LEAVE, "tempUpdate" ); + ptr = strchr( argv[i], '=' ); + ptr++; + args_tempUpdate = atoi( ptr ); + WARNING_IS_SET_TO_ZERO( args_tempUpdate, "tempUpdate" ); continue; } @@ -511,6 +555,8 @@ /* setting default values not set by command line */ SET_DEFAULT( args_cpuUpdate, ARGSDEF_LEAVE, ARGSDEF_CPUUPDATE ); SET_DEFAULT( args_batteryUpdate, ARGSDEF_LEAVE, ARGSDEF_BATTERYUPDATE ); + SET_DEFAULT( args_powerUpdate, ARGSDEF_LEAVE, ARGSDEF_POWERUPDATE ); + SET_DEFAULT( args_tempUpdate, ARGSDEF_LEAVE, ARGSDEF_TEMPUPDATE ); SET_DEFAULT( args_XDisplayName, NULL, ARGSDEF_XDISPLAYNAME ); SET_DEFAULT( args_autoFreq, ARGSDEF_LEAVE, ARGSDEF_AUTOFREQ ); SET_DEFAULT( args_incrementalStep, ARGSDEF_LEAVE, ARGSDEF_INCREMENTALSTEP ); @@ -566,6 +612,8 @@ fprintf( stdout, " --skin=%d\n", ARGSDEF_SKIN ); fprintf( stdout, "[CPU-options]:\n"); fprintf( stdout, " --cpu-update=%d\n", ARGSDEF_CPUUPDATE ); + fprintf( stdout, " --temperature-update=%d\n", ARGSDEF_TEMPUPDATE ); + fprintf( stdout, " --power-update=%d\n", ARGSDEF_POWERUPDATE ); fprintf( stdout, " --auto-freq=%s\n", ARGSDEF_AUTOFREQ == AUTOFREQ_ON ? "on" : "off" ); fprintf( stdout, " --incremental-step=%d\n", ARGSDEF_INCREMENTALSTEP ); if( ARGSDEF_STARTINGFREQ != ARGSDEF_LEAVE ) diff -Nru wmlaptop-1.4-orig/src/main.h wmlaptop-1.4/src/main.h --- wmlaptop-1.4-orig/src/main.h 2008-04-18 21:55:54.497550614 +0300 +++ wmlaptop-1.4/src/main.h 2008-04-18 21:56:45.010548403 +0300 @@ -134,7 +134,7 @@ u_int8 counter; char stateFile[52]; char infoFile[52]; - u_int32 capacity; + double capacity; u_int32 actualState; u_int16 percentage; bool useLFC; @@ -175,9 +175,12 @@ u_int8 percentage; u_int16 remainingTime; bool isCharging; +// double rate; void(*updater)(); }; +extern double powerrate; +extern double capacity; /******************* * CPUS' STUFF * @@ -192,6 +195,7 @@ * events cycle. * *****************************************************************/ extern u_int8 cpuLoad; +extern int governor; /***************************************************************** * global variable cpuState is a structure of this type, it * @@ -224,6 +228,7 @@ char * setFreqFile; u_int32 setFreq; u_int32 stepFreq; + int Temp; #else u_int16 *longRunLevels; u_int16 nLongRunLevels; @@ -337,14 +342,22 @@ /* update frequencies, in milliseconds; cpu must < battery */ #ifndef ARGSDEF_CPUUPDATE -# define ARGSDEF_CPUUPDATE 80 +# define ARGSDEF_CPUUPDATE 400 #endif #ifndef ARGSDEF_BATTERYUPDATE -# define ARGSDEF_BATTERYUPDATE 5000 +# define ARGSDEF_BATTERYUPDATE 30 // seconds +#endif +#ifndef ARGSDEF_POWERUPDATE +# define ARGSDEF_POWERUPDATE 5 // seconds +#endif +#ifndef ARGSDEF_TEMPUPDATE +# define ARGSDEF_TEMPUPDATE 10 // seconds #endif extern u_int32 args_cpuUpdate; extern u_int32 args_batteryUpdate; +extern u_int32 args_powerUpdate; +extern u_int32 args_tempUpdate; /* name of diplay to open */ #ifndef ARGSDEF_XDISPLAYNAME @@ -363,7 +376,7 @@ /* incremental auto-scaling step */ #ifndef ARGSDEF_INCREMENTALSTEP -# define ARGSDEF_INCREMENTALSTEP 100000 +# define ARGSDEF_INCREMENTALSTEP 200000 #endif extern u_int32 args_incrementalStep; @@ -395,7 +408,7 @@ #define PARADISIAC_OFF 2 #ifndef ARGSDEF_PARADISIAC -# define ARGSDEF_PARADISIAC PARADISIAC_ON +# define ARGSDEF_PARADISIAC PARADISIAC_OFF #endif extern bool args_paradisiac; diff -Nru wmlaptop-1.4-orig/src/pixmap.c wmlaptop-1.4/src/pixmap.c --- wmlaptop-1.4-orig/src/pixmap.c 2008-04-18 21:55:54.497550614 +0300 +++ wmlaptop-1.4/src/pixmap.c 2008-04-18 21:56:45.012548584 +0300 @@ -18,9 +18,235 @@ char ** wmlaptop_xpm = NULL; +/* XPM */ +static char * wmlaptop_xpm_type0[] = { +"123 140 81 1", +" c None", +". c #FF0000", +"+ c #000000", +"@ c #00FF04", +"# c #968E8E", +"$ c #FFFF00", +"% c #FF1700", +"& c #FF2F00", +"* c #FF4700", +"= c #FF5F00", +"- c #FF7700", +"; c #FF8E00", +"> c #FFA600", +", c #FFBE00", +"' c #FFD600", +") c #FFEE00", +"! c #FFF900", +"~ c #F4FA00", +"{ c #DFFA00", +"] c #C9FB00", +"^ c #B4FB00", +"/ c #9FFC00", +"( c #89FD00", +"_ c #74FD00", +": c #5EFE00", +"< c #49FE00", +"[ c #3FFF00", +"} c #050500", +"| c #EFEC19", +"1 c #242303", +"2 c #B1AF13", +"3 c #262504", +"4 c #ECE919", +"5 c #060600", +"6 c #94920F", +"7 c #E7E418", +"8 c #6F6D0B", +"9 c #ABA912", +"0 c #67660B", +"a c #020200", +"b c #F3F01A", +"c c #0F0F01", +"d c #6A690B", +"e c #A2A011", +"f c #86850E", +"g c #191902", +"h c #101001", +"i c #8C8B0F", +"j c #605F0A", +"k c #AAA812", +"l c #2A2904", +"m c #FBF81B", +"n c #383706", +"o c #AEAC12", +"p c #525108", +"q c #E0DD18", +"r c #222203", +"s c #161602", +"t c #E8E518", +"u c #5B5A09", +"v c #F5F21A", +"w c #63620A", +"x c #E5E218", +"y c #0B0B01", +"z c #F8F51A", +"A c #C6C415", +"B c #BCB914", +"C c #999710", +"D c #C1BF14", +"E c #AFAD12", +"F c #7C7A0D", +"G c #F7F41A", +"H c #272604", +"I c #5F5E0A", +"J c #181802", +"K c #0E0E01", +"L c #313005", +"M c #C4C215", +"N c #DCD917", +"O c #131302", +"P c #6D6B0B", +" ...........................................................", +" ...........................................................", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...........................................................", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...........................................................", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...........................................................", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...........................................................", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...........................................................", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...........................................................", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...........................................................", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...........................................................", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...............+++.........+++....+++......+++.............", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...............+++........+++++...+++......+++.............", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...............+++.......+++.+++..+++......+++.............", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...............+++.......+++.+++..+++......+++.............", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...............+++.......+++.+++...+++....+++..............", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...............+++.......+++.+++...+++....+++..............", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...............+++.......+++.+++...+++....+++..............", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...............+++.......+++.+++...+++....+++..............", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...............+++.......+++.+++...+++.++.+++..............", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...............+++.......+++.+++...+++.++.+++..............", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...............+++.......+++.+++....++.++.++...............", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...............+++.......+++.+++....++.++.++...............", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...............+++.......+++.+++....++.++.++...............", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...............+++.......+++.+++....++.++.++...............", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...............+++++++...+++.+++.....++..++................", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...............+++++++....+++++......++..++................", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...............+++++++.....+++.......++..++................", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...........................................................", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...........................................................", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...........................................................", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...........................................................", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...........................................................", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...........................................................", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...........................................................", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ..+++++.....+++...+++++++.+++++++.+++++.+++++....+++.+++...", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ..+++++....+++++..+++++++.+++++++.+++++.+++++++..+++.+++...", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ..+++++++.+++++++.+++++++.+++++++.+++++.+++++++..+++.+++...", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ..+++.+++.+++++++...+++.....+++...+++...+++.++++.+++.+++...", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ..+++.+++.+++.+++...+++.....+++...+++...+++..+++.+++.+++...", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ..+++.+++.+++.+++...+++.....+++...+++...+++.++++.+++.+++...", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ..+++.+++.+++.+++...+++.....+++...+++...+++.+++..+++.+++...", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ..+++++++.+++.+++...+++.....+++...++++..+++++++..+++.+++...", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ..++++++..+++++++...+++.....+++...++++..+++++....+++++++...", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ..+++++++.+++++++...+++.....+++...++++..+++++.....+++++....", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ..+++.+++.+++++++...+++.....+++...+++...++++++....+++++....", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ..+++.+++.+++.+++...+++.....+++...+++...++++++.....+++.....", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ..+++.+++.+++.+++...+++.....+++...+++...+++++++....+++.....", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ..+++.+++.+++.+++...+++.....+++...+++...+++.+++....+++.....", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ..+++++++.+++.+++...+++.....+++...+++++.+++.++++...+++.....", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ..+++++...+++.+++...+++.....+++...+++++.+++..+++...+++.....", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ..+++++...+++.+++...+++.....+++...+++++.+++..+++...+++.....", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...........................................................", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...........................................................", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...........................................................", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...........................................................", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...........................................................", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...........................................................", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...........................................................", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...........................................................", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", +" +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", +"+@@+++@++@@+@@@+@+++@@@++@@+@@@@+@@++@@++@++++@++++###+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", +"@++@+@@+@++@+++@@+++@+++@++++++@@++@@++@@+@++@++++#++###+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", +"@++@@+@+@++@+++@@+++@+++@++++++@@++@@++@+@++@++++#+++#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", +"@++@++@+++@++@@+@+++@@@+@@@++++@+@@++@@@+++@++++#+#++###+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", +"@++@++@++@+++++@@+@++++@@++@++@+@++@+++@++@++@+#+++###+++++++++++++++++++++++++$$$+++++++++$$$++++$$$++++++$$$+++++++++++++", +"@++@++@+@++++++@@@@@+++@@++@++@+@++@+++@+@++@+@#+++++++++++++++++++++++++++++++$$$++++++++$$$$$+++$$$++++++$$$+++++++++++++", +"+@@+@@@@@@@@@@@+++@+@@@++@@+++@++@@++@@+@++++@+++++@@@+++......++++++++++++++++$$$+++++++$$$+$$$++$$$++++++$$$+++++++++++++", +"+$$+++$++$$+$$$+$+++$$$++$$+$$$$+$$++$$++$++++$+++@++@@@+++++++++++++++++++++++$$$+++++++$$$+$$$++$$$++++++$$$+++++++++++++", +"$++$+$$+$++$+++$$+++$+++$++++++$$++$$++$$+$++$+++@+++@+++++++++++++++++++++++++$$$+++++++$$$+$$$+++$$$++++$$$++++++++++++++", +"$++$$+$+$++$+++$$+++$+++$++++++$$++$$++$+$++$+++@+@++@@@+++++++++++++++++++++++$$$+++++++$$$+$$$+++$$$++++$$$++++++++++++++", +"$++$++$+++$++$$+$+++$$$+$$$++++$+$$++$$$+++$+++@+++@@@+++++++++++++++++++++++++$$$+++++++$$$+$$$+++$$$++++$$$++++++++++++++", +"$++$++$++$+++++$$+$++++$$++$++$+$++$+++$++$++$+@+++++++++++++++++++++++++++++++$$$+++++++$$$+$$$+++$$$++++$$$++++++++++++++", +"$++$++$+$++++++$$$$$+++$$++$++$+$++$+++$+$++$+$++++++++++++++++++++++++++++++++$$$+++++++$$$+$$$+++$$$+$$+$$$++++++++++++++", +"+$$+$$$$$$$$$$$+++$+$$$++$$+++$++$$++$$+$++++$+++++$$++++++++++++++++++++++++++$$$+++++++$$$+$$$+++$$$+$$+$$$++++++++++++++", +"+..+++.++..+...+.+++...++..+....+..++..++.++++.+++$$$$+++++++++++++++++++++++++$$$+++++++$$$+$$$++++$$+$$+$$+++++++++++++++", +".++.+..+.++.+++..+++.+++.++++++..++..++..+.++.+++$$$$$$++++++++++++++++++++++++$$$+++++++$$$+$$$++++$$+$$+$$+++++++++++++++", +".++..+.+.++.+++..+++.+++.++++++..++..++.+.++.+++$$$$$$$$+++++++++++++++++++++++$$$+++++++$$$+$$$++++$$+$$+$$+++++++++++++++", +".++.++.+++.++..+.+++...+...++++.+..++...+++.+++++$$$$$$++++++++++++++++++++++++$$$+++++++$$$+$$$++++$$+$$+$$+++++++++++++++", +".++.++.++.+++++..+.++++..++.++.+.++.+++.++.++.++++$$$$+++++++++++++++++++++++++$$$$$$$+++$$$+$$$+++++$$++$$++++++++++++++++", +".++.++.+.++++++.....+++..++.++.+.++.+++.+.++.+.++++$$++++++++++++++++++++++++++$$$$$$$++++$$$$$++++++$$++$$++++++++++++++++", +"+..+...........+++.+...++..+++.++..++..+.++++.+++++++++++++++++++++++++++++++++$$$$$$$+++++$$$+++++++$$++$$++++++++++++++++", +"+@@@@++++@+++@@@@+@@@@+++++@++@@@@@++@@@@+@@@@@@+@@@@++@@@@++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", +"@++++@++@@++@++++@++++@++++@++@+++++@+++++@++++@@++++@@++++@+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", +"@++++@+@+@++@++++@+++++@++@+++@+++++@++++++++++@@++++@@++++@#.@++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", +"@++++@@++@+++++++@+++++@++@+++@+++++@++++++++++@@++++@@++++@#.@++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", +"@++++@+++@++++++@+++@@@++@++++@@@@++@@@@@+++++@++@@@@++@@@@@+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", +"@++++@+++@+++++@++++++@++@++++++++@+@++++@++++@+@++++@+++++@+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", +"@++++@+++@++++@++++++++@@++@+++++++@@++++@+++@++@++++@+++++@#.@++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", +"@++++@+++@+++@+++++++++@@@@@@@+++++@@++++@+++@++@++++@+++++@#.@++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", +"@++++@+++@++@+++++++++@++++@++++++@+@++++@+++@++@++++@+++++@++++++$$$$$+++++$$$+++$$$$$$$+$$$$$$$+$$$$$+$$$$$++++$$$+$$$+++", +"+@@@@+@@@@@@@@@@@@@@@@+++++@++@@@@+++@@@@++++@+++@@@@++@@@@+++++++$$$$$++++$$$$$++$$$$$$$+$$$$$$$+$$$$$+$$$$$$$++$$$+$$$+++", +"..................................................%&*=-;>,')++++++$$$$$$$+$$$$$$$+$$$$$$$+$$$$$$$+$$$$$+$$$$$$$++$$$+$$$+++", +".+++++++++++++++++++++++++++++++++++++++++++++++..%&*=-;>,')++++++$$$+$$$+$$$$$$$+++$$$+++++$$$+++$$$+++$$$+$$$$+$$$+$$$+++", +".+++.+++.++.+.....++..++++++....+...++....++..++..%&*=-;>,')++++++$$$+$$$+$$$+$$$+++$$$+++++$$$+++$$$+++$$$++$$$+$$$+$$$+++", +".+++.+++.++.+++.+++.++.+++++.++++.++.+.++++.++.+..%&*=-;>,')++++++$$$+$$$+$$$+$$$+++$$$+++++$$$+++$$$+++$$$+$$$$+$$$+$$$+++", +".++.+.++.++.+++.+++.++.+++++.++++.++.+.++++.++.+..%&*=-;>,')++++++$$$+$$$+$$$+$$$+++$$$+++++$$$+++$$$+++$$$+$$$++$$$+$$$+++", +".++.+.++.++.+++.+++.++.+...+...++...++...++.++.+..%&*=-;>,')++++++$$$$$$$+$$$+$$$+++$$$+++++$$$+++$$$$++$$$$$$$++$$$+$$$+++", +".+.....+.++.+++.+++.++.+++++.++++.++.+.++++..+.+..%&*=-;>,')++++++$$$$$$++$$$$$$$+++$$$+++++$$$+++$$$$++$$$$$++++$$$$$$$+++", +".+.+++.+.++.+++.+++.++.+++++.++++.++.+.++++.+..+.!~{]^/(_:<[++++++$$$$$$$+$$$$$$$+++$$$+++++$$$+++$$$$++$$$$$+++++$$$$$++++", +".+.+++.++..++++.++++..++++++.++++.++.+....++...+.!~{]^/(_:<[++++++$$$+$$$+$$$$$$$+++$$$+++++$$$+++$$$+++$$$$$$++++$$$$$++++", +".+++++++++++++++++++++++++++++++++++++++++++++++.!~{]^/(_:<[++++++$$$+$$$+$$$+$$$+++$$$+++++$$$+++$$$+++$$$$$$+++++$$$+++++", +".................................................!~{]^/(_:<[++++++$$$+$$$+$$$+$$$+++$$$+++++$$$+++$$$+++$$$$$$$++++$$$+++++", +"#################################################!~{]^/(_:<[++++++$$$+$$$+$$$+$$$+++$$$+++++$$$+++$$$+++$$$+$$$++++$$$+++++", +"#+++++++++++++++++++++++++++++++++++++++++++++++#!~{]^/(_:<[++++++$$$$$$$+$$$+$$$+++$$$+++++$$$+++$$$$$+$$$+$$$$+++$$$+++++", +"#+++#+++#++#+#####++##++++++####+###++####++##++#!~{]^/(_:<[++++++$$$$$+++$$$+$$$+++$$$+++++$$$+++$$$$$+$$$++$$$+++$$$+++++", +"#+++#+++#++#+++#+++#++#+++++#++++#++#+#++++#++#+#++++##+++++++++++$$$$$+++$$$+$$$+++$$$+++++$$$+++$$$$$+$$$++$$$+++$$$+++++", +"#++#+#++#++#+++#+++#++#+++++#++++#++#+#++++#++#+#+++####+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", +"#++#+#++#++#+++#+++#++#+###+###++###++###++#++#+#++######++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", +"#+#####+#++#+++#+++#++#+++++#++++#++#+#++++##+#+#+########+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", +"#+#+++#+#++#+++#+++#++#+++++#++++#++#+#++++#+##+#++######++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", +"#+#+++#++##++++#++++##++++++#++++#++#+####++###+#+++####+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", +"#+++++++++++++++++++++++++++++++++++++++++++++++#++++##++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", +"#################################################++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", +"+$$$+$$$++$++$++$+++++$$$++++$+++$$$+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", +"$++++$++$+$++$++$++++$+++$+++$+++$++$++####+++++++++++++++++++++ ####################################################### ", +"$++++$++$+$++$++$++++$+++$++$+$++$++$+#++++#++@+++@+@++@+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", +"$++++$$$++$++$++$++++$+++$++$+$++$++$+#++++#++@@+@@+@++@+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", +"$++++$++++$++$++$++++$+++$+$$$$$+$++$+#++++#++@@@@@+@++@+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", +"$++++$++++$++$++$++++$+++$+$+++$+$++$+#++++#++@+@+@+@@@@+@@@@++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", +"+$$$+$+++++$$+++$$$$++$$$++$+++$+$$$++#++++#++@+++@+@@@@++++@++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", +"+...+...++.++.++.+++++...++++.+++...++#++++#++@+++@+@++@+++@+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", +".++++.++.+.++.++.++++.+++.+++.+++.++.+#++++#++@+++@+@++@+++@+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", +".++++.++.+.++.++.++++.+++.++.+.++.++.+#++++#++@+++@+@++@++@++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", +".++++...++.++.++.++++.+++.++.+.++.++.++####+++@+++@+@++@+@@@@++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", +".++++.++++.++.++.++++.+++.+.....+.++.++++++++++++++++++++++++++++}+++++++++++++++++++++++++++++++++++++++++++++++++++++++++", +".++++.++++.++.++.++++.+++.+.+++.+.++.++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", +"+...+.+++++..+++....++...++.+++.+...++++++++++++++++++++++++++++++++++@+++++++@++.+++++++.+++++++++++++++++++++++++++++++++", +"############################################# ++++++@+++++++@++.+++++++.+++++++++++++++++++++++++++++++++", +"#+++++++++++++++++++++++++++++++++++++++++++# ++++++@+++++++@++.+++++++.+++++++++++++++++++++++++++++++++", +"#+++++++++++++++++++++++++++++++++++++++++++# ++++++@+++++++@++.+++++++.+++++++++++++++++++++++++++++++++", +"#+++++++++++++++++++++++++++++++++++++++++++# ++++++@+++@+++@++.+++.+++.+++++++++++++++++++++++++++++++++", +"#+++++++++++++++++++++++++++++++++++++++++++# ++++++@@+@@@+@@++..+...+..+++++++++++++++++++++++++++++++++", +"#+++++++++++++++++++++++++++++++++++++++++++# +++++++@@+++@@++++..+++..++++++++++++++++++++++++++++++++++", +"#+++++++++++++++++++++++++++++++++++++++++++# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", +"#+++++++++++++++++++++++++++++++++++++++++++# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", +"############################################# "}; + + /* XPM */ -char * wmlaptop_xpm_type0[] = { +/*char * wmlaptop_xpm_type0[] = { "123 140 27 1", " c None", ". c #FF0000", @@ -190,7 +416,7 @@ "#+++++++++++++++++++++++++++++++++++++++++++# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "############################################# "}; - +*/ /* XPM */ diff -Nru wmlaptop-1.4-orig/src/version.h wmlaptop-1.4/src/version.h --- wmlaptop-1.4-orig/src/version.h 2008-04-18 21:55:54.497550614 +0300 +++ wmlaptop-1.4/src/version.h 2008-04-18 21:56:45.012548584 +0300 @@ -1,7 +1,7 @@ #ifndef __VERSION_H__ #define __VERSION_H__ -#define BUILD_NR 256 +#define BUILD_NR 495 #define PROGNAME "WmLaptop" #define VERSION "1.4"