#!/usr/bin/perl -w
# vim: set sw=4 ts=4 si et:
#
use strict;
use vars qw($opt_h);
use Getopt::Std;
#
my $oldstr="";
my $str="";
my $subres;
#
&getopts("h")||die "ERROR: No such option. -h for help.n";
&help if ($opt_h);
system("mtxorb /dev/lcd")&&die "ERROR: initialisation failed. Could not run mtxorb /dev/lcd\n";
# called before program termination by init script:
sub catch_sig{
 print LCD chr(0xFE),"X"; # clear the display
 $str="shutdown\n\n";
	print LCD "$str";
 exit 0;
}
$SIG{INT} = \&catch_sig;
$SIG{HUP} = \&catch_sig;
$SIG{TERM} = \&catch_sig;
$SIG{QUIT} = \&catch_sig;
#
open(LCD,">/dev/lcd")||die "ERROR in lcdwriter: can not write to /dev/lcd\n";
$|=1;
my $i=0;
while(1){
 $i++;
 if ($i < 5){ $subres=&getuptime; }elsif($i < 9){ $subres=&getswap; }else{ $subres=&getswap; $i=0; } $str="LinuxFocus\n$subres\n"; # you can replace LinuxFocus with any string if ($str ne $oldstr){ sleep(1); print LCD chr(0xFE),"X"; # clear the display $oldstr=$str; }else{ sleep(3); } # write, just to be sure: print LCD "$str"; } # sub getuptime{ my ($ld,$ut,$uptime); $ut="?"; $ld="?"; open(UPT,"/proc/uptime")||die "ERROR in lcdwriter: while reading /proc/uptime\n"; while(){
 if (/(\d+)/){
 # uptime is in seconds:
 $ut=1ドル / 360;
 $ut=int $ut;
 $ut=$ut / 10;
 last;
 }
 }
 close UPT;
 open(LDT,"/proc/loadavg")||die "ERROR in lcdwriter: while reading /proc/loadavg\n";
 while(){
 if (/^([\.\d]+)/){
 $ld=1ドル;
 last;
 }
 }
 close LDT;
 "u:$ut l:$ld";
}
#
sub getswap{
 my ($total,$used,$free);
 open(SWP,"/proc/meminfo")||die "ERROR in lcdwriter: while reading /proc/meminfo\n";
 while(){
 if (/SwapTotal: *(\d+)/){
 $total=1ドル;
 }
 if (/SwapFree: *(\d+)/){
 $free=1ドル;
 }
 if ($free && $total){
 $used=$total-$free;
 }else{
 $used="";
 }
 }
 close SWP;
 return "swp:$used Kb";
}
#
sub help{
 print "lcdwriter -- perl script to update the lcd display with
some information on uptime, load and swap usage.
USAGE: lcdwriter [-h]
lcdwriter runs at startup the program mtxorb to initialize the
serial line.
\n";
exit;
}
__END__ 

AltStyle によって変換されたページ (->オリジナル) /