@ -45,40 +45,56 @@
}
}
return ( i = = LEN ( map ) ) ? " ? " : map [ i ] . symbol ;
return ( i = = LEN ( map ) ) ? " ? " : map [ i ] . symbol ;
}
}
const char *
battery_remaining ( const char * bat )
{
/* TODO: Implement */
return NULL ;
}
# elif defined(__OpenBSD__)
# elif defined(__OpenBSD__)
# include <fcntl.h>
# include <fcntl.h>
# include <machine/apmvar.h>
# include <machine/apmvar.h>
# include <sys/ioctl.h>
# include <sys/ioctl.h>
# include <unistd.h>
# include <unistd.h>
const char *
static int
battery_perc ( const char * unused )
load_apm_power_info ( struct apm_power_info * apm_info )
{
{
struct apm_power_info apm_info ;
int fd ;
int fd ;
fd = open ( " /dev/apm " , O_RDONLY ) ;
fd = open ( " /dev/apm " , O_RDONLY ) ;
if ( fd < 0 ) {
if ( fd < 0 ) {
warn ( " open '/dev/apm': " ) ;
warn ( " open '/dev/apm': " ) ;
return NULL ;
return 0 ;
}
}
if ( ioctl ( fd , APM_IOC_GETPOWER , & apm_info ) < 0 ) {
memset ( apm_info , 0 , sizeof ( struct apm_power_info ) ) ;
if ( ioctl ( fd , APM_IOC_GETPOWER , apm_info ) < 0 ) {
warn ( " ioctl 'APM_IOC_GETPOWER': " ) ;
warn ( " ioctl 'APM_IOC_GETPOWER': " ) ;
close ( fd ) ;
close ( fd ) ;
return NULL ;
return 0 ;
}
return close ( fd ) , 1 ;
}
const char *
battery_perc ( const char * unused )
{
struct apm_power_info apm_info ;
if ( load_apm_power_info ( & apm_info ) ) {
return bprintf ( " %d " , apm_info . battery_life ) ;
}
}
close ( fd ) ;
return bprintf ( " %d " , apm_info . battery_life ) ;
return NULL ;
}
}
const char *
const char *
battery_state ( const char * unused )
battery_state ( const char * unused )
{
{
int fd ;
size_t i ;
struct apm_power_info apm_info ;
struct apm_power_info apm_info ;
size_t i ;
struct {
struct {
unsigned int state ;
unsigned int state ;
char * symbol ;
char * symbol ;
@ -87,24 +103,28 @@
{ APM_AC_OFF , " - " } ,
{ APM_AC_OFF , " - " } ,
} ;
} ;
fd = open ( " /dev/apm " , O_RDONLY ) ;
if ( load_apm_power_info ( & apm_info ) ) {
if ( fd < 0 ) {
for ( i = 0 ; i < LEN ( map ) ; i + + ) {
warn ( " open '/dev/apm': " ) ;
if ( map [ i ] . state = = apm_info . ac_state ) {
return NULL ;
break ;
}
}
return ( i = = LEN ( map ) ) ? " ? " : map [ i ] . symbol ;
}
}
if ( ioctl ( fd , APM_IOC_GETPOWER , & apm_info ) < 0 ) {
return NULL ;
warn ( " ioctl 'APM_IOC_GETPOWER': " ) ;
}
close ( fd ) ;
return NULL ;
}
close ( fd ) ;
for ( i = 0 ; i < LEN ( map ) ; i + + ) {
const char *
if ( map [ i ] . state = = apm_info . ac_state ) {
battery_remaining ( const char * unused )
break ;
{
}
struct apm_power_info apm_info ;
if ( load_apm_power_info ( & apm_info ) ) {
return bprintf ( " %u:%02u " , apm_info . minutes_left / 60 ,
apm_info . minutes_left % 60 ) ;
}
}
return ( i = = LEN ( map ) ) ? " ? " : map [ i ] . symbol ;
return NULL ;
}
}
# endif
# endif