1
0
Fork 0
forked from len0rd/rockbox

wpsbuild: Rewrite to fix various issues and support .fms

wpsbuild.pl is enhanced to produce fallback themes that were previously
hardcoded in buildzip.pl. It also recognizes resolution strings as
regular expressions now so you can specify resolution dependant settings
as <setting>.<regex>: <value> (needed to support single themes on multiple
resolutions). The WPSBUILD syntax completely changed as
well and it includes the fallback themes as well. Ultimately wpsbuild is
also able to install .fms files.

Change-Id: Idf5994f17b9750983d7bc3ef583540a8cdae1dde
This commit is contained in:
Thomas Martitz 2012-06-10 20:28:36 +02:00
parent 300ff4c952
commit 66b6fdbb73
12 changed files with 494 additions and 563 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 478 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 478 B

View file

Before

Width:  |  Height:  |  Size: 478 B

After

Width:  |  Height:  |  Size: 478 B

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 478 B

After

Width:  |  Height:  |  Size: 478 B

Before After
Before After

View file

@ -333,57 +333,6 @@ sub filesize {
return $size; return $size;
} }
sub create_failsafefiles {
my ($dir, $remote_depth) = @_;
my $text = "# Dummy file to allow Rockbox to reset to the default skin config.
# Do not edit this file. It's never actually loaded by Rockbox.";
open (FOO, ">$dir/wps/rockbox_failsafe.wps");
print FOO $text;
close(FOO);
open (FOO, ">$dir/wps/rockbox_failsafe.sbs");
print FOO $text;
close(FOO);
open (FOO, ">$dir/wps/rockbox_failsafe.fms");
print FOO $text;
close(FOO);
if ($remote_depth) {
open (FOO, ">$dir/wps/rockbox_failsafe.rwps");
print FOO $text;
close(FOO);
open (FOO, ">$dir/wps/rockbox_failsafe.rsbs");
print FOO $text;
close(FOO);
open (FOO, ">$dir/wps/rockbox_failsafe.rfms");
print FOO $text;
close(FOO);
}
open (FOO, ">$dir/themes/rockbox_failsafe.cfg");
print FOO <<STOP
# This config has been autogenerated to reload the failsafe setup
wps: $dir/wps/rockbox_failsafe.wps
sbs: $dir/wps/rockbox_failsafe.sbs
fms: $dir/wps/rockbox_failsafe.fms
STOP
;
if ($remote_depth) {
print FOO <<STOP
rwps: $dir/wps/rockbox_failsafe.rwps
rsbs: $dir/wps/rockbox_failsafe.rsbs
rfms: $dir/wps/rockbox_failsafe.rfms
STOP
;
}
print FOO <<STOP
statusbar: top
font: 08-Schumacher-Clean.fnt
foreground color: 000000
background color: B6C6E5
selector type: bar (inverse)
backdrop: -
STOP
;
close(FOO);
}
sub buildzip { sub buildzip {
my ($image, $fonts)=@_; my ($image, $fonts)=@_;
@ -454,24 +403,8 @@ sub buildzip {
} }
glob_mkdir("$temp_dir/wps"); glob_mkdir("$temp_dir/wps");
glob_mkdir("$temp_dir/icons");
glob_mkdir("$temp_dir/themes"); glob_mkdir("$temp_dir/themes");
if ($bitmap) {
open(THEME, ">$temp_dir/themes/rockbox_default_icons.cfg");
print THEME <<STOP
# this config file was auto-generated to make it
# easy to reset the icons back to default
iconset: -
# taken from apps/gui/icon.c
viewers iconset: /$rbdir/icons/viewers.bmp
remote iconset: -
# taken from apps/gui/icon.c
remote viewers iconset: /$rbdir/icons/remote_viewers.bmp
STOP
;
close(THEME);
}
glob_mkdir("$temp_dir/codepages"); glob_mkdir("$temp_dir/codepages");
if($bitmap) { if($bitmap) {
@ -576,14 +509,6 @@ STOP
glob_unlink("$temp_dir/rocks/*.lua"); # Clean up unwanted *.lua files (e.g. actions.lua, buttons.lua) glob_unlink("$temp_dir/rocks/*.lua"); # Clean up unwanted *.lua files (e.g. actions.lua, buttons.lua)
if ($bitmap) {
glob_mkdir("$temp_dir/icons");
copy("$viewer_bmpdir/viewers.${icon_w}x${icon_h}x$depth.bmp", "$temp_dir/icons/viewers.bmp");
if ($remote_depth) {
copy("$viewer_bmpdir/remote_viewers.${remote_icon_w}x${remote_icon_h}x$remote_depth.bmp", "$temp_dir/icons/remote_viewers.bmp");
}
}
copy("$ROOT/apps/tagnavi.config", "$temp_dir/"); copy("$ROOT/apps/tagnavi.config", "$temp_dir/");
copy("$ROOT/apps/plugins/disktidy.config", "$temp_dir/rocks/apps/"); copy("$ROOT/apps/plugins/disktidy.config", "$temp_dir/rocks/apps/");
@ -606,7 +531,6 @@ STOP
"$temp_dir/rocks/demos/pictureflow_splash.bmp"); "$temp_dir/rocks/demos/pictureflow_splash.bmp");
} }
create_failsafefiles($temp_dir, $remote_depth);
if($image) { if($image) {
# image is blank when this is a simulator # image is blank when this is a simulator

View file

@ -11,7 +11,7 @@
# This should list all WPS and RWPS files we have and what their requirements # This should list all WPS and RWPS files we have and what their requirements
# and preferences are. # and preferences are.
# #
# Each <wps> section will also cause a "theme" .cfg to be made, which the # Each <theme> section will also cause a "theme" .cfg to be made, which the
# <rwps> sections will not cause. # <rwps> sections will not cause.
# #
# A <wps> section can thus mention a "preferred" rwps file to load when that # A <wps> section can thus mention a "preferred" rwps file to load when that
@ -19,21 +19,80 @@
# #
# All sections should list what font and status bar setting they "like". # All sections should list what font and status bar setting they "like".
<theme>
<rwps> Name: rockbox_default_icons
Name: rockbox_default.rwps
Author: Rockbox team Author: Rockbox team
Font: 08-Schumacher-Clean.fnt
Statusbar: top
</rwps>
<wps> <main>
Name: cabbiev2.wps iconset: -
RWPS: cabbiev2.rwps viewers iconset..+x16: icons/viewers.6x8x16.bmp
SBS: viewers iconset..+x1: icons/viewers.6x8x1.bmp
RSBS: viewers iconset..+x2: icons/viewers.6x8x2.bmp
</main>
<remote>
iconset: -
viewers iconset..+x1: icons/viewers.6x8x1.bmp
viewers iconset..+x2: icons/viewers.6x8x2.bmp
</remote>
</theme>
<theme>
Name: rockbox_failsafe
Author: Rockbox team
WPS: yes
RWPS: yes
SBS: yes
RSBS: yes
FMS: yes
RFMS: yes
<main>
backdrop: -
font: -
statusbar: top
foreground color: 000000
background color: B6C6E5
selector type: bar (inverse)
ui viewport: -
</main>
<remote>
font: -
statusbar: top
ui viewport: -
</remote>
</theme>
<theme>
Name: cabbiev2
# Real name of the creator of the WPS # Real name of the creator of the WPS
Author: Johannes Voggenthaler, Apoo Maha, Marc Guay, Alex Vanderpol, Jerry Lange, Keith Perri, Mark Fawcus, and Marianne Arnold with support from Rockbox developers and forums. Based on Cabbie by Yohann Misquitta. Authors: Johannes Voggenthaler, Apoo Maha, Marc Guay, Alex Vanderpol, Jerry Lange, Keith Perri, Mark Fawcus, and Marianne Arnold with support from Rockbox developers and forums. Based on Cabbie by Yohann Misquitta.
WPS: yes
RWPS: yes
SBS: no
RSBS: no
<main>
# override implicit .wps filename
wps.800x480x16: cabbiev2.800x480x16.wps
wps.480x800x16: cabbiev2.480x800x16.wps
wps.320x480x16: cabbiev2.320x480x16.wps
wps.320x240x16: cabbiev2.320x240x16.wps
wps.128x128x16: cabbiev2.128x128x16.wps
wps.128x160x16: cabbiev2.128x160x16.wps
wps.132x80x16: cabbiev2.132x80x16.wps
wps.138x110x2: cabbiev2.138x110x2.wps
wps.160x128x16: cabbiev2.160x128x16.wps
wps.160x128x2: cabbiev2.160x128x2.wps
wps.176x132x16: cabbiev2.176x132x16.wps
wps.176x220x16: cabbiev2.176x220x16.wps
wps.220x176x16: cabbiev2.220x176x16.wps
wps.240x320x16: cabbiev2.240x320x16.wps
wps.240x400x16: cabbiev2.240x400x16.wps
# Preferred font (including .fnt extension - leave blank for player): # Preferred font (including .fnt extension - leave blank for player):
Font.800x480x16: 35-Adobe-Helvetica.fnt Font.800x480x16: 35-Adobe-Helvetica.fnt
@ -46,19 +105,16 @@ Font.220x176x16: 12-Adobe-Helvetica.fnt
Font.176x220x16: 12-Adobe-Helvetica.fnt Font.176x220x16: 12-Adobe-Helvetica.fnt
Font.176x132x16: 12-Adobe-Helvetica.fnt Font.176x132x16: 12-Adobe-Helvetica.fnt
Font.160x128x16: 12-Adobe-Helvetica.fnt Font.160x128x16: 12-Adobe-Helvetica.fnt
Font.160x128x2: 12-Adobe-Helvetica.fnt Font.160x128x2: 12-Adobe-Helvetica.fnt
Font.160x128x1: 12-Adobe-Helvetica.fnt Font.160x128x1: 12-Adobe-Helvetica.fnt
Font.138x110x2: 12-Adobe-Helvetica.fnt Font.138x110x2: 12-Adobe-Helvetica.fnt
Font.128x128x16: 12-Adobe-Helvetica.fnt Font.128x128x16: 12-Adobe-Helvetica.fnt
Font.128x160x16: 12-Adobe-Helvetica.fnt Font.128x160x16: 12-Adobe-Helvetica.fnt
Font.128x128x2: 12-Adobe-Helvetica.fnt Font.128x128x2: 12-Adobe-Helvetica.fnt
Font.132x80x16: 11-Sazanami-Mincho.fnt Font.132x80x16: 11-Sazanami-Mincho.fnt
Font.128x64x1: 08-Rockfont.fnt Font.128x64x1: 08-Rockfont.fnt
Font.112x64x1: 08-Rockfont.fnt Font.112x64x1: 08-Rockfont.fnt
Font.96x96x16: 08-Rockfont.fnt Font.96x96x16: 08-Rockfont.fnt
# Remote font for iriver
Remote Font.128x64x1: 08-Rockfont.fnt
#misc settings that should be ignored on grayscale targets #misc settings that should be ignored on grayscale targets
foreground color: CCCCCC foreground color: CCCCCC
@ -66,92 +122,73 @@ background color: 000000
line selector start color: fde89e line selector start color: fde89e
line selector end color: b58c00 line selector end color: b58c00
line selector text color: 000000 line selector text color: 000000
filetype colours: filetype colours: -
#backdrop - remember this is the source file name in your SVN folder, not dest name! #backdrop - remember this is the source file name in your SVN folder, not dest name!
backdrop.800x480x16: backdrops/cabbiev2.800x480x16.bmp backdrop.800x480x16: backdrops/cabbiev2.800x480x16.bmp
backdrop.480x800x16: backdrops/cabbiev2.480x800x16.bmp backdrop.480x800x16: backdrops/cabbiev2.480x800x16.bmp
backdrop.320x480x16: backdrops/cabbiev2.320x480x16.bmp backdrop.320x480x16: backdrops/cabbiev2.320x480x16.bmp
backdrop.320x240x16: backdrops/cabbiev2.320x240x16.bmp backdrop.320x240x16: backdrops/cabbiev2.320x240x16.bmp
backdrop.128x128x16: backdrops/cabbiev2.128x128x16.bmp backdrop.128x128x16: backdrops/cabbiev2.128x128x16.bmp
backdrop.128x160x16: backdrops/cabbiev2.128x160x16.bmp backdrop.128x160x16: backdrops/cabbiev2.128x160x16.bmp
backdrop.132x80x16: backdrops/cabbiev2.132x80x16.bmp backdrop.132x80x16: backdrops/cabbiev2.132x80x16.bmp
backdrop.138x110x2: backdrops/cabbiev2.138x110x2.bmp backdrop.138x110x2: backdrops/cabbiev2.138x110x2.bmp
backdrop.160x128x16: backdrops/cabbiev2.160x128x16.bmp backdrop.160x128x16: backdrops/cabbiev2.160x128x16.bmp
backdrop.160x128x2: backdrops/cabbiev2.160x128x2.bmp backdrop.160x128x2: backdrops/cabbiev2.160x128x2.bmp
backdrop.176x132x16: backdrops/cabbiev2.176x132x16.bmp backdrop.176x132x16: backdrops/cabbiev2.176x132x16.bmp
backdrop.176x220x16: backdrops/cabbiev2.176x220x16.bmp backdrop.176x220x16: backdrops/cabbiev2.176x220x16.bmp
backdrop.220x176x16: backdrops/cabbiev2.220x176x16.bmp backdrop.220x176x16: backdrops/cabbiev2.220x176x16.bmp
backdrop.240x320x16: backdrops/cabbiev2.240x320x16.bmp backdrop.240x320x16: backdrops/cabbiev2.240x320x16.bmp
backdrop.240x400x16: backdrops/cabbiev2.240x400x16.bmp backdrop.240x400x16: backdrops/cabbiev2.240x400x16.bmp
backdrop.96x96x16: backdrops/cabbiev2.96x96x16.bmp backdrop.96x96x16: backdrops/cabbiev2.96x96x16.bmp
#selection bar settings for color targets #selection bar settings for color targets
selector type.800x480x16: bar (gradient) selector type..+x16: bar (gradient)
selector type.480x800x16: bar (gradient) selector type..+x2: bar (inverse)
selector type.320x480x16: bar (gradient)
selector type.320x240x16: bar (gradient)
selector type.128x128x16: bar (gradient)
selector type.128x160x16: bar (gradient)
selector type.132x80x16: bar (gradient)
selector type.220x176x16: bar (gradient)
selector type.160x128x16: bar (gradient)
selector type.240x400x16: bar (gradient)
selector type.240x320x16: bar (gradient)
selector type.176x132x16: bar (gradient)
selector type.176x220x16: bar (gradient)
selector type.160x128x2: bar (inverse)
selector type.138x110x2: bar (inverse)
selector type.96x96x16: bar (gradient)
#icons #icons
iconset.800x480x16: icons/tango_icons.32x32.bmp iconset.800x480x16: icons/tango_icons.32x32.bmp
iconset.480x800x16: icons/tango_icons.32x32.bmp iconset.480x800x16: icons/tango_icons.32x32.bmp
iconset.320x480x16: icons/tango_icons.24x24.bmp iconset.320x480x16: icons/tango_icons.24x24.bmp
iconset.320x240x16: icons/tango_icons.16x16.bmp iconset.320x240x16: icons/tango_icons.16x16.bmp
iconset.128x128x16: icons/tango_icons.12x12.bmp iconset.128x128x16: icons/tango_icons.12x12.bmp
iconset.128x160x16: icons/tango_icons.12x12.bmp iconset.128x160x16: icons/tango_icons.12x12.bmp
iconset.132x80x16: icons/tango_icons.12x12.bmp iconset.132x80x16: icons/tango_icons.12x12.bmp
iconset.138x110x2: icons/tango_small_mono.bmp iconset.160x128x16: icons/tango_icons.12x12.bmp
iconset.160x128x16: icons/tango_icons.12x12.bmp iconset.176x132x16: icons/tango_icons.12x12.bmp
iconset.160x128x2: icons/tango_small_mono.bmp iconset.176x220x16: icons/tango_icons.12x12.bmp
iconset.176x132x16: icons/tango_icons.12x12.bmp iconset.220x176x16: icons/tango_icons.12x12.bmp
iconset.176x220x16: icons/tango_icons.12x12.bmp iconset.240x320x16: icons/tango_icons.16x16.bmp
iconset.220x176x16: icons/tango_icons.12x12.bmp iconset.240x400x16: icons/tango_icons.16x16.bmp
iconset.240x320x16: icons/tango_icons.16x16.bmp iconset.96x96x16: icons/tango_icons.8x8.bmp
iconset.240x400x16: icons/tango_icons.16x16.bmp iconset..+x2: icons/tango_small_mono.bmp
iconset.96x96x16: icons/tango_icons.8x8.bmp
#viewer icons #viewer icons
viewers iconset.800x480x16: icons/tango_icons_viewers.32x32.bmp viewers iconset.800x480x16: icons/tango_icons_viewers.32x32.bmp
viewers iconset.480x800x16: icons/tango_icons_viewers.32x32.bmp viewers iconset.480x800x16: icons/tango_icons_viewers.32x32.bmp
viewers iconset.320x480x16: icons/tango_icons_viewers.24x24.bmp viewers iconset.320x480x16: icons/tango_icons_viewers.24x24.bmp
viewers iconset.320x240x16: icons/tango_icons_viewers.16x16.bmp viewers iconset.320x240x16: icons/tango_icons_viewers.16x16.bmp
viewers iconset.128x128x16: icons/tango_icons_viewers.12x12.bmp viewers iconset.128x128x16: icons/tango_icons_viewers.12x12.bmp
viewers iconset.128x160x16: icons/tango_icons_viewers.12x12.bmp viewers iconset.128x160x16: icons/tango_icons_viewers.12x12.bmp
viewers iconset.132x80x16: icons/tango_icons_viewers.12x12.bmp viewers iconset.132x80x16: icons/tango_icons_viewers.12x12.bmp
viewers iconset.138x110x2: icons/tango_small_viewers_mono.bmp viewers iconset.160x128x16: icons/tango_icons_viewers.12x12.bmp
viewers iconset.160x128x16: icons/tango_icons_viewers.12x12.bmp viewers iconset.176x132x16: icons/tango_icons_viewers.12x12.bmp
viewers iconset.160x128x2: icons/tango_small_viewers_mono.bmp viewers iconset.176x220x16: icons/tango_icons_viewers.12x12.bmp
viewers iconset.176x132x16: icons/tango_icons_viewers.12x12.bmp viewers iconset.220x176x16: icons/tango_icons_viewers.12x12.bmp
viewers iconset.176x220x16: icons/tango_icons_viewers.12x12.bmp viewers iconset.240x320x16: icons/tango_icons_viewers.16x16.bmp
viewers iconset.220x176x16: icons/tango_icons_viewers.12x12.bmp viewers iconset.240x400x16: icons/tango_icons_viewers.16x16.bmp
viewers iconset.240x320x16: icons/tango_icons_viewers.16x16.bmp viewers iconset.96x96x16: icons/tango_icons_viewers.8x8.bmp
viewers iconset.240x400x16: icons/tango_icons_viewers.16x16.bmp viewers iconset..+x2: icons/tango_small_viewers_mono.bmp
viewers iconset.96x96x16: icons/tango_icons_viewers.8x8.bmp
# Whether the WPS is designed to have the statusbar on or off statusbar: top
Statusbar: top ui viewport: -
remote statusbar: top </main>
# list & remote ui viewports <remote>
ui viewport: rwps.128x64x1: cabbiev2.128x64x1.wps
remote ui viewport: Font.128x64x1: 08-Rockfont.fnt
</wps> statusbar: top
ui viewport: -
</remote>
<rwps> </theme>
Name: cabbiev2.rwps
Author: Johannes Voggenthaler, Apoo Maha, Marc Guay, Alex Vanderpol, Jerry Lange, Keith Perri, Mark Fawcus, and Marianne Arnold with support from Rockbox developers and forums. Based on Cabbie by Yohann Misquitta.
Font: 12-Adobe-Helvetica.fnt
Statusbar: top
</rwps>

View file

@ -1,2 +0,0 @@
# Dummy file to allow Rockbox to reset to the default WPS config.
# Do not edit this file. It's never actually loaded by Rockbox.

2
wps/rockbox_failsafe.fms Normal file
View file

@ -0,0 +1,2 @@
# Dummy file to allow Rockbox to reset to the default skin config.
# Do not edit this file. It's never actually loaded by Rockbox.

2
wps/rockbox_failsafe.sbs Normal file
View file

@ -0,0 +1,2 @@
# Dummy file to allow Rockbox to reset to the default skin config.
# Do not edit this file. It's never actually loaded by Rockbox.

2
wps/rockbox_failsafe.wps Normal file
View file

@ -0,0 +1,2 @@
# Dummy file to allow Rockbox to reset to the default skin config.
# Do not edit this file. It's never actually loaded by Rockbox.

View file

@ -12,6 +12,7 @@ use strict;
use Getopt::Long qw(:config pass_through); # pass_through so not confused by -DTYPE_STUFF use Getopt::Long qw(:config pass_through); # pass_through so not confused by -DTYPE_STUFF
my $ROOT=".."; my $ROOT="..";
my $wpsdir;
my $verbose; my $verbose;
my $rbdir=".rockbox"; my $rbdir=".rockbox";
my $tempdir=".rockbox"; my $tempdir=".rockbox";
@ -31,21 +32,22 @@ GetOptions ( 'r|root=s' => \$ROOT,
my $firmdir="$ROOT/firmware"; my $firmdir="$ROOT/firmware";
my $cppdef = $target; my $cppdef = $target;
my @depthlist = ( 16, 8, 4, 2, 1 );
# These parameters are filled in as we parse wpslist # These parameters are filled in as we parse wpslist
my $req_size;
my $req_g_wps;
my $req_t; my $req_t;
my $req_t_wps; my $theme;
my $has_wps;
my $wps; my $wps;
my $wps_prefix; my $has_rwps;
my $sbs_prefix;
my $rwps; my $rwps;
my $has_sbs;
my $sbs; my $sbs;
my $sbs_w_size; my $has_rsbs;
my $rsbs; my $rsbs;
my $rsbs_w_size; my $has_fms;
my $fms;
my $has_rfms;
my $rfms;
my $width; my $width;
my $height; my $height;
my $font; my $font;
@ -53,13 +55,16 @@ my $remotefont;
my $fgcolor; my $fgcolor;
my $bgcolor; my $bgcolor;
my $statusbar; my $statusbar;
my $remotestatusbar;
my $author; my $author;
my $backdrop; my $backdrop;
my $lineselectstart; my $lineselectstart;
my $lineselectend; my $lineselectend;
my $selecttype; my $selecttype;
my $iconset; my $iconset;
my $remoteiconset;
my $viewericon; my $viewericon;
my $remoteviewericon;
my $lineselecttextcolor; my $lineselecttextcolor;
my $filetylecolor; my $filetylecolor;
my $listviewport; my $listviewport;
@ -135,28 +140,33 @@ STOP
sub mkdirs sub mkdirs
{ {
my $wpsdir = $wps;
$wpsdir =~ s/\.(r|)wps//;
mkdir "$tempdir/wps", 0777; mkdir "$tempdir/wps", 0777;
mkdir "$tempdir/themes", 0777; mkdir "$tempdir/themes", 0777;
mkdir "$tempdir/icons", 0777;
if( -d "$tempdir/wps/$wpsdir") { if( -d "$tempdir/wps/$theme") {
#print STDERR "wpsbuild warning: directory wps/$wpsdir already exists!\n"; #print STDERR "wpsbuild warning: directory wps/$theme already exists!\n";
} }
else else
{ {
mkdir "$tempdir/wps/$wpsdir", 0777; mkdir "$tempdir/wps/$theme", 0777;
} }
} }
sub normalize
{
my $in = $_[0];
# strip resolution
$in =~ s/(\.[0-9]*x[0-9]*x[0-9]*)//;
return $in;
}
sub copybackdrop sub copybackdrop
{ {
#copy the backdrop file into the build dir #copy the backdrop file into the build dir
if ($backdrop ne '') { if ($backdrop ne '') {
my $dst = $backdrop; my $dst = normalize($backdrop);
$dst =~ s/(\.[0-9]*x[0-9]*x[0-9]*)//; system("cp $ROOT/$backdrop $tempdir/$dst");
my $cmd = "cp $ROOT/$backdrop $tempdir/$dst";
`$cmd`;
} }
} }
@ -167,31 +177,30 @@ sub copythemefont
$o =~ s/\.fnt/\.bdf/; $o =~ s/\.fnt/\.bdf/;
mkdir "$tempdir/fonts"; mkdir "$tempdir/fonts";
my $cmd ="$ROOT/tools/convbdf -f -o \"$tempdir/fonts/$_[0]\" \"$ROOT/fonts/$o\" "; system("$ROOT/tools/convbdf -f -o \"$tempdir/fonts/$_[0]\" \"$ROOT/fonts/$o\" ");
`$cmd`;
} }
sub copythemeicon sub copythemeicon
{ {
my $i = $_[0];
#copy the icon specified by the theme #copy the icon specified by the theme
if ($iconset ne '') { if ($i ne "-") {
my $tempicon = $tempdir . "/" . $iconset; my $tempicon = $tempdir . "/" . $i;
$iconset = $rbdir . "/" . $iconset;
$tempicon =~ /\/.*icons\/(.*)/i; $tempicon =~ /\/.*icons\/(.*)/i;
`cp $ROOT/icons/$1 $tempicon`; system("cp $ROOT/icons/$1 $tempicon");
} }
} }
sub copythemeviewericon sub uniq {
{ my %seen = ();
#copy the viewer icon specified by the theme my @r = ();
foreach my $a (@_) {
if ($viewericon ne '') { unless ($seen{$a}) {
my $tempviewericon = $tempdir . "/" . $viewericon; push @r, $a;
$viewericon = $rbdir . "/" . $viewericon; $seen{$a} = 1;
$tempviewericon =~ /\/.*icons\/(.*)/i; }
`cp $ROOT/icons/$1 $tempviewericon`;
} }
return @r;
} }
sub copywps sub copywps
@ -199,181 +208,104 @@ sub copywps
# we assume that we copy the WPS files from the same dir the WPSLIST # we assume that we copy the WPS files from the same dir the WPSLIST
# file is located in # file is located in
my $dir; my $dir;
my %skinfiles = ("wps", $wps,
"sbs", $sbs,
"fms", $fms,
"rwps", $rwps,
"rsbs", $rsbs,
"rfms", $rfms);
my @filelist; my @filelist;
my $file; my $file;
my $__sb;
if($wpslist =~ /(.*)WPSLIST/) { if($wpslist =~ /(.*)\/WPSLIST/) {
$dir = $1; $dir = $1;
$__sb = $sbs_prefix . "." . $req_size . ".sbs";
#print "$req_t_wps $req_g_wps $sbs_prefix\n";
#print "$dir/$__sb\n";
# system("cp $dir/$wps .rockbox/wps/"); # copy fully-fledged wps, sbs, etc. including graphics
# check for <name>.WIDTHxHEIGHTxDEPTH.sbs foreach my $ext (keys %skinfiles) {
if (-e "$dir/$__sb") { next unless ($skinfiles{$ext});
system("cp $dir/$__sb $tempdir/wps/$sbs"); $file = $skinfiles{$ext};
system("cp $dir/$file $tempdir/wps/$theme.$ext");
open(SKIN, "$dir/$file");
while (<SKIN>) {
$filelist[$#filelist + 1] = $1 if (/[\(,]([^,]*?.bmp)[\),]/);
}
close(SKIN);
} }
# check for <name>.WIDTHxHEIGHTxDEPTH.<model>.sbs and overwrite the
# previous sb if needed if ($#filelist >= 0) {
$__sb = $sbs_prefix . "." . $req_size . "." . $modelname . ".sbs"; if (-e "$dir/$theme") {
if (-e "$dir/$__sb") { foreach $file (uniq(@filelist)) {
system("cp $dir/$__sb $tempdir/wps/$sbs"); system("cp $dir/$theme/$file $tempdir/wps/$theme/");
}
}
else {
print STDERR "beep, no dir to copy WPS from!\n";
}
} }
if (-e "$dir/$req_t_wps" ) {
system("cp $dir/$req_t_wps $tempdir/wps/$wps");
} elsif (-e "$dir/$req_g_wps") {
system("cp $dir/$req_g_wps $tempdir/wps/$wps");
open(WPSFILE, "$dir/$req_g_wps");
while (<WPSFILE>) {
$filelist[$#filelist + 1] = $1 if (/[\(,]([^,]*?.bmp)[\),]/);
}
close(WPSFILE);
if ($#filelist >= 0) {
if (-e "$dir/$wps_prefix/$req_size") {
foreach $file (@filelist) {
system("cp $dir/$wps_prefix/$req_size/$file $tempdir/wps/$wps_prefix/");
}
}
elsif (-e "$dir/$wps_prefix") {
foreach $file (@filelist) {
system("cp $dir/$wps_prefix/$file $tempdir/wps/$wps_prefix/");
}
}
else {
print STDERR "beep, no dir to copy WPS from!\n";
}
}
} else {
print STDERR "Skipping $wps - no matching resolution.\n";
}
} else { } else {
print STDERR "No source directory!\n"; print STDERR "No source directory!\n";
} }
} }
sub buildcfg { sub buildcfg {
my $cfg = $wps; my $cfg = $theme . ".cfg";
my @out; my @out;
$cfg =~ s/\.(r|)wps/.cfg/;
push @out, <<MOO push @out, <<MOO
\# \#
\# $cfg generated by wpsbuild.pl \# $cfg generated by wpsbuild.pl
\# $wps is made by $author \# $wps is made by $author
\# \#
wps: $rbdir/wps/$wps
MOO MOO
; ;
if(defined($sbs)) {
if ($sbs eq '') { my %skinfiles = ("wps" => $wps,
push @out, "sbs: -\n"; "sbs" => $sbs,
"fms" => $fms,
"rwps" => $rwps,
"rsbs" => $rsbs,
"rfms" => $rfms);
for my $skin (keys %skinfiles) {
my $val = $skinfiles{$skin};
print "$skin: $val\n";
if (!defined($val)) {
# dont put value if not defined (e.g. rwps when there's no remote)
next;
} elsif ($val eq '') {
# empty resets to built-in
push @out, "$skin: -\n";
} else { } else {
push @out, "sbs: $rbdir/wps/$sbs\n"; # file name is always <theme>.{wps,rwps,...} (see copywps())
push @out, "$skin: $rbdir/wps/$theme.$skin\n";
} }
} }
if(defined($rsbs) && $has_remote) {
if ($rsbs eq '') { push @out, "selector type: $selecttype\n" if (defined($selecttype));
push @out, "rsbs: -\n"; push @out, "backdrop: $backdrop\n" if (defined($backdrop));
} else { push @out, "filetype colours: $filetylecolor\n" if (defined($filetylecolor));
push @out, "rsbs: $rbdir/wps/$rsbs\n";
} if ($main_depth > 2) {
push @out, "foreground color: $fgcolor\n" if($fgcolor);
push @out, "background color: $bgcolor\n" if($bgcolor);
push @out, "line selector start color: $lineselectstart\n" if($lineselectstart);
push @out, "line selector end color: $lineselectend\n" if($lineselectend);;
push @out, "line selector text color: $lineselecttextcolor\n" if($lineselecttextcolor);
} }
if($font) {
if ($font eq '') { push @out, "font: $font\n" if (defined($font));
push @out, "font: -\n"; push @out, "statusbar: $statusbar\n" if (defined($statusbar));
} else { push @out, "iconset: $iconset\n" if (defined($iconset));
push @out, "font: $rbdir/fonts/$font\n"; push @out, "viewers iconset: $viewericon\n" if (defined($viewericon));
} push @out, "ui viewport: $listviewport\n" if (defined($listviewport));
}
if(defined($remotefont) && $has_remote) { if ($has_remote) {
if ($remotefont eq '') { push @out, "remote font: $remotefont\n" if (defined($remotefont));
push @out, "remote font: -\n"; push @out, "remote statusbar: $remotestatusbar\n" if (defined($remotestatusbar));
} else { push @out, "remote iconset: $remoteiconset\n" if (defined($remoteiconset));
push @out, "remote font: $rbdir/fonts/$remotefont\n"; push @out, "remote viewers iconset: $remoteviewericon\n" if (defined($remoteviewericon));
} push @out, "remote ui viewport: $remotelistviewport\n" if (defined($remotelistviewport));
}
if($fgcolor && $main_depth > 2) {
push @out, "foreground color: $fgcolor\n";
}
if($bgcolor && $main_depth > 2) {
push @out, "background color: $bgcolor\n";
}
if($statusbar) {
if($rwps && $has_remote ) {
push @out, "remote statusbar: $statusbar\n";
}
push @out, "statusbar: $statusbar\n";
}
if(defined($backdrop)) {
if ($backdrop eq '') {
push @out, "backdrop: -\n";
} else {
# clip resolution from filename
$backdrop =~ s/(\.[0-9]*x[0-9]*x[0-9]*)//;
push @out, "backdrop: $rbdir/$backdrop\n";
}
}
if($lineselectstart && $main_depth > 2) {
push @out, "line selector start color: $lineselectstart\n";
}
if($lineselectend && $main_depth > 2) {
push @out, "line selector end color: $lineselectend\n";
}
if($selecttype) {
push @out, "selector type: $selecttype\n";
}
if(defined($iconset)) {
if ($iconset eq '') {
push @out, "iconset: -\n";
} else {
push @out, "iconset: $iconset\n";
}
}
if(defined($viewericon)) {
if ($viewericon eq '') {
push @out, "viewers iconset: -\n";
} else {
push @out, "viewers iconset: $viewericon\n";
}
}
if($lineselecttextcolor && $main_depth > 2 ) {
push @out, "line selector text color: $lineselecttextcolor\n";
}
if($filetylecolor && $main_depth > 2) {
if ($filetylecolor eq '') {
push @out, "filetype colours: -\n";
} else {
push @out, "filetype colours: $filetylecolor\n";
}
}
if($rwps && $has_remote ) {
if ($rwps eq '') {
push @out, "rwps: -\n";
} else {
push @out, "rwps: $rbdir/wps/$rwps\n";
}
}
if(defined($listviewport)) {
if ($listviewport eq '') {
push @out, "ui viewport: -\n";
} else {
push @out, "ui viewport: $listviewport\n";
}
}
if(defined($remotelistviewport) && $has_remote) {
if ($remotelistviewport eq '') {
push @out, "remote ui viewport: -\n";
} else {
push @out, "remote ui viewport: $listviewport\n";
}
} }
if(-f "$tempdir/wps/$cfg") { if(-f "$tempdir/wps/$cfg") {
print STDERR "wpsbuild warning: wps/$cfg already exists!\n"; print STDERR "wpsbuild warning: wps/$cfg already exists!\n";
} }
@ -391,8 +323,47 @@ MOO
#print "LCD: ${main_width}x${main_height}x${main_depth}\n"; #print "LCD: ${main_width}x${main_height}x${main_depth}\n";
$has_remote = 1 if ($remote_height && $remote_width && $remote_depth); $has_remote = 1 if ($remote_height && $remote_width && $remote_depth);
my $isrwps;
my $within; # check if line matches the setting string or if it contains a regex
# that contains the targets resolution
sub check_res {
my ($line, $string, $remote) = @_;
if ($line =~ /^${string}: *(.*)/i) {
return $1;
}
elsif($line =~ /^${string}.(.*): *(.*)/i) {
# $1 is a resolution regex, $2 the filename incl. resolution
my $fn = $2;
my $size_str = "${main_width}x${main_height}x${main_depth}";
if ($remote) {
$size_str = "${remote_width}x${remote_height}x${remote_depth}";
}
if ($size_str =~ /$1$/) {
return $fn;
}
}
return "";
}
# check if <theme>.<model>.<ext> exists. If not, check if <theme>.<ext> exists
sub check_skinfile {
my $ext = $_[0];
my $req_skin = $theme . "." . $modelname . ".$ext";
if (-e "$wpsdir/$req_skin") {
return $req_skin;
} else {
$req_skin = $theme . ".$ext";
if (-e "$wpsdir/$req_skin") {
return $req_skin;
}
}
return '';
}
# Infer WPS (etc.) filename from the the if it wasnt given
$wpslist =~ /(.*)WPSLIST/;
$wpsdir = $1;
open(WPS, "<$wpslist"); open(WPS, "<$wpslist");
while(<WPS>) { while(<WPS>) {
@ -410,15 +381,21 @@ while(<WPS>) {
$rbdir = "/" . $rbdir; $rbdir = "/" . $rbdir;
} }
if($l =~ /^ *<(r|)wps>/i) { if($l =~ /^ *<theme>/i) {
$isrwps = $1;
$within = 1;
# undef is a unary operator (!) # undef is a unary operator (!)
undef $theme;
undef $has_wps;
undef $has_rwps;
undef $has_sbs;
undef $has_rsbs;
undef $has_fms;
undef $has_rfms;
undef $wps; undef $wps;
undef $wps_prefix;
undef $rwps; undef $rwps;
undef $sbs; undef $sbs;
undef $rsbs; undef $rsbs;
undef $fms;
undef $rfms;
undef $width; undef $width;
undef $height; undef $height;
undef $font; undef $font;
@ -426,224 +403,213 @@ while(<WPS>) {
undef $fgcolor; undef $fgcolor;
undef $bgcolor; undef $bgcolor;
undef $statusbar; undef $statusbar;
undef $remotestatusbar;
undef $author; undef $author;
undef $req_g_wps;
undef $req_t_wps;
undef $backdrop; undef $backdrop;
undef $lineselectstart; undef $lineselectstart;
undef $lineselectend; undef $lineselectend;
undef $selecttype; undef $selecttype;
undef $iconset; undef $iconset;
undef $remoteiconset;
undef $viewericon; undef $viewericon;
undef $remoteviewericon;
undef $lineselecttextcolor; undef $lineselecttextcolor;
undef $filetylecolor; undef $filetylecolor;
undef $listviewport; undef $listviewport;
undef $remotelistviewport; undef $remotelistviewport;
next;
} }
if($within) { elsif($l =~ /^Name: *(.*)/i) {
if($l =~ /^ *<\/${isrwps}wps>/i) { $theme = $1;
# Get the required width and height }
my ($rheight, $rwidth, $rdepth); elsif($l =~ /^Authors: *(.*)/i) {
if($isrwps) { $author = $1;
($rheight, $rwidth, $rdepth) = }
($remote_height, $remote_width, $remote_depth); elsif ($l =~ /^WPS: *(yes|no)/i) {
$has_wps = $1;
}
elsif ($l =~ /^RWPS: *(yes|no)/i) {
$has_rwps = $1;
}
elsif ($l =~ /^SBS: *(yes|no)/i) {
$has_sbs = $1;
}
elsif ($l =~ /^RSBS: *(yes|no)/i) {
$has_rsbs = $1;
}
elsif ($l =~ /^FMS: *(yes|no)/i) {
$has_fms = $1;
}
elsif ($l =~ /^RFMS: *(yes|no)/i) {
$has_rfms = $1;
}
elsif($l =~ /^ *<main>/i) {
# parse main unit settings
while(<WPS>) {
my $l = $_;
if ($l =~ /^ *<\/main>/i) {
last;
} }
else { elsif($_ = check_res($l, "wps")) {
($rheight, $rwidth, $rdepth) = $wps = $_;
($main_height, $main_width, $main_depth); }
elsif($_ = check_res($l, "sbs")) {
$sbs = $_;
}
elsif($_ = check_res($l, "fms")) {
$fms = $_;
}
elsif($_ = check_res($l, "Font")) {
$font = $_;
}
elsif($_ = check_res($l, "Statusbar")) {
$statusbar = $_;
}
elsif($_ = check_res($l, "Backdrop")) {
$backdrop = $_;
}
elsif($l =~ /^Foreground Color: *(.*)/i) {
$fgcolor = $1;
}
elsif($l =~ /^Background Color: *(.*)/i) {
$bgcolor = $1;
}
elsif($l =~ /^line selector start color: *(.*)/i) {
$lineselectstart = $1;
}
elsif($l =~ /^line selector end color: *(.*)/i) {
$lineselectend = $1;
}
elsif($_ = check_res($l, "selector type")) {
$selecttype = $_;
}
elsif($_ = check_res($l, "iconset")) {
$iconset = $_;
}
elsif($_ = check_res($l, "viewers iconset")) {
$viewericon = $_;
}
elsif($l =~ /^line selector text color: *(.*)/i) {
$lineselecttextcolor = $1;
}
elsif($l =~ /^filetype colours: *(.*)/i) {
$filetylecolor = $1;
}
elsif($_ = check_res($l, "ui viewport")) {
$listviewport = $_;
}
}
}
elsif($l =~ /^ *<remote>/i) {
while(<WPS>) {
# parse remote settings
my $l = $_;
if ($l =~ /^ *<\/remote>/i) {
last;
}
elsif(!$has_remote) {
next; # dont parse <remote> section
}
elsif($_ = check_res($l, "rwps", 1)) {
$rwps = $_;
}
elsif($_ = check_res($l, "rsbs", 1)) {
$rsbs = $_;
}
elsif($_ = check_res($l, "rfms", 1)) {
$rfms = $_;
}
elsif($_ = check_res($l, "Font", 1)) {
$remotefont = $_;
}
elsif($_ = check_res($l, "iconset", 1)) {
$remoteiconset = $_;
}
elsif($_ = check_res($l, "viewers iconset", 1)) {
$remoteviewericon = $_;
}
elsif($_ = check_res($l, "statusbar", 1)) {
$remotestatusbar = $_;
}
elsif($_ = check_res($l, "ui viewport", 1)) {
$remotelistviewport = $_;
}
}
}
elsif($l =~ /^ *<\/theme>/i) {
# for each wps,sbs,fms (+ remote variants) check if <theme>[.<model>].wps
# exists if no filename was specified in WPSLIST
my $req_skin;
if ($has_wps eq "yes" && !$wps) {
$wps = check_skinfile("wps");
} elsif ($has_wps eq "no") {
$wps = '';
}
if ($has_sbs eq "yes" && !$sbs) {
$sbs = check_skinfile("sbs");
} elsif ($has_sbs eq "no") {
$sbs = '';
}
if ($has_fms eq "yes" && !$fms) {
$fms = check_skinfile("fms");
} elsif ($has_fms eq "no") {
$fms = '';
}
# now check for remote skin files (use main screen's extension)
if ($has_remote) {
if ($has_rwps eq "yes" && !$rwps) {
$rwps = check_skinfile("wps");
} elsif ($has_rwps eq "no") {
$rwps = '';
} }
if(!$rheight || !$rwidth) { if ($has_rsbs eq "yes" && !$rsbs) {
#printf STDERR "wpsbuild notice: No %sLCD size, skipping $wps\n", $rsbs = check_skinfile("sbs");
#$isrwps?"remote ":""; } elsif ($has_rsbs eq "no") {
$within = 0; $rsbs = '';
next;
} }
$wpslist =~ /(.*)WPSLIST/;
my $wpsdir = $1;
# If this WPS installable on this platform, one of the following
# two files will be present
foreach my $d (@depthlist) {
next if ($d > $rdepth);
$req_size = $rwidth . "x" . $rheight . "x" . $d; if ($has_rfms eq "yes" && !$rfms) {
$rfms = check_skinfile("fms");
# check for model specific wps } elsif ($has_rfms eq "no") {
$req_g_wps = $wps_prefix . "." . $req_size . "." . $modelname . ".wps"; $rfms = '';
last if (-e "$wpsdir/$req_g_wps");
# check for normal wps (with WIDTHxHEIGHTxDEPTH)
$req_g_wps = $wps_prefix . "." . $req_size . ".wps";
last if (-e "$wpsdir/$req_g_wps");
if ($isrwps) {
$req_size = $req_size . "." . $main_width . "x" . $main_height . "x" . "$main_depth";
$req_g_wps = $wps_prefix . "." . $req_size . ".wps";
last if (-e "$wpsdir/$req_g_wps");
}
} }
$req_t_wps = $wps_prefix . ".txt" . ".wps"; }
#print "LCD: $wps wants $width x $height\n";
#print "LCD: $wps wants $width x $height\n"; #
#print "LCD: is $rwidth x $rheight\n"; # The target model has an LCD that is suitable for this
# WPS
#print "gwps: $wpsdir/$req_g_wps" . "\n"; #
if (-e "$wpsdir/$req_g_wps" || -e "$wpsdir/$req_t_wps" ) { #print "Size requirement is fine!\n";
# mkdirs() if (-e "$wpsdir/$theme");
# The target model has an LCD that is suitable for this # Do the copying before building the .cfg - buildcfg()
# WPS # mangles some filenames
# if (defined($backdrop) && $backdrop ne "-") {
#print "Size requirement is fine!\n"; copybackdrop();
mkdirs() if (-e "$wpsdir/$req_g_wps"); $backdrop = normalize($backdrop);
# Do the copying before building the .cfg - buildcfg() }
# mangles some filenames foreach my $i ($iconset, $viewericon, $remoteiconset, $remoteviewericon) {
if ($backdrop) { if (defined($i) && $i ne "-") {
copybackdrop(); copythemeicon($i);
}
if ($iconset) {
copythemeicon();
}
if ($viewericon) {
copythemeviewericon();
}
if ($font) {
copythemefont($font);
}
if ($remotefont) {
copythemefont($remotefont);
}
if(!$isrwps) {
# We only make .cfg files for <wps> sections:
buildcfg();
}
copywps();
} }
else {
#print "(${wps_prefix}-${rwidth}x${rheight}x$rdepth) ";
#print "Skip $wps due to size restraints\n";
}
$within = 0;
} }
elsif($l =~ /^Name: *(.*)/i) { if (defined($font) && $font ne "-") {
# Note that in the case this is within <rwps>, $wps will contain the copythemefont($font);
# name of the rwps. Use $isrwps to figure out what type it is. $font = "$rbdir/fonts/$font";
$wps = $wps_prefix = $1;
$wps_prefix =~ s/\.(r|)wps//;
#print $wps_prefix . "\n";
} }
elsif($l =~ /^RWPS: *(.*)/i) { if (defined($remotefont) && $remotefont ne "-") {
$rwps = $1; copythemefont($remotefont);
} $remotefont = "$rbdir/fonts/$remotefont";
elsif($l =~ /^RWPS\.${main_width}x${main_height}x$main_depth: *(.*)/i) {
$rwps = $1;
}
elsif($l =~ /^SBS: *(.*)/i) {
$sbs = $sbs_prefix = $1;
$sbs_prefix =~ s/\.(r|)sbs//;
}
elsif($l =~ /^SBS\.${main_width}x${main_height}x$main_depth: *(.*)/i) {
$sbs = $sbs_prefix = $1;
$sbs_prefix =~ s/\.(r|)sbs//;
}
elsif($l =~ /^RSBS: *(.*)/i) {
$rsbs = $1;
}
elsif($l =~ /^RSBS\.${main_width}x${main_height}x$main_depth: *(.*)/i) {
$rsbs = $1;
}
elsif($l =~ /^Author: *(.*)/i) {
$author = $1;
}
elsif($l =~ /^Width: *(.*)/i) {
$width = $1;
}
elsif($l =~ /^Width\.${main_width}x${main_height}x$main_depth: *(.*)/i) {
$width = $1;
}
elsif($l =~ /^Height: *(.*)/i) {
$height = $1;
}
elsif($l =~ /^Height\.${main_width}x${main_height}x$main_depth: *(.*)/i) {
$height = $1;
}
elsif($l =~ /^Font: *(.*)/i) {
$font = $1;
}
elsif($l =~ /^Font\.${main_width}x${main_height}x$main_depth: *(.*)/i) {
$font = $1;
}
elsif($l =~ /^Remote Font\.${remote_width}x${remote_height}x$remote_depth: *(.*)/i) {
$remotefont = $1;
}
elsif($l =~ /^Remote Font: *(.*)/i) {
$remotefont = $1;
}
elsif($l =~ /^Foreground Color: *(.*)/i) {
$fgcolor = $1;
}
elsif($l =~ /^Background Color: *(.*)/i) {
$bgcolor = $1;
}
elsif($l =~ /^Statusbar: *(.*)/i) {
$statusbar = $1;
}
elsif($l =~ /^Statusbar\.${main_width}x${main_height}x$main_depth: *(.*)/i) {
$statusbar = $1;
}
elsif($l =~ /^Backdrop: *(.*)/i) {
$backdrop = $1;
}
elsif($l =~ /^Backdrop\.${main_width}x${main_height}x$main_depth: *(.*)/i) {
$backdrop = $1;
}
elsif($l =~ /^line selector start color: *(.*)/i) {
$lineselectstart = $1;
}
elsif($l =~ /^line selector end color: *(.*)/i) {
$lineselectend = $1;
}
elsif($l =~ /^selector type: *(.*)/i) {
$selecttype = $1;
}
elsif($l =~ /^selector type\.${main_width}x${main_height}x$main_depth: *(.*)/i) {
$selecttype = $1;
}
elsif($l =~ /^iconset: *(.*)/i) {
$iconset = $1;
}
elsif($l =~ /^iconset\.${main_width}x${main_height}x$main_depth: *(.*)/i) {
$iconset = $1;
}
elsif($l =~ /^viewers iconset: *(.*)/i) {
$viewericon = $1;
}
elsif($l =~ /^viewers iconset\.${main_width}x${main_height}x$main_depth: *(.*)/i) {
$viewericon = $1;
}
elsif($l =~ /^line selector text color: *(.*)/i) {
$lineselecttextcolor = $1;
}
elsif($l =~ /^filetype colours: *(.*)/i) {
$filetylecolor = $1;
}
elsif($l =~ /^ui viewport: *(.*)/i) {
$listviewport = $1;
}
elsif($l =~ /^ui viewport\.${main_width}x${main_height}x$main_depth: *(.*)/i) {
$listviewport = $1;
}
elsif($l =~ /^remote ui viewport: *(.*)/i) {
$remotelistviewport = $1;
}
elsif($l =~ /^remote ui viewport\.${main_width}x${main_height}x$main_depth: *(.*)/i) {
$remotelistviewport = $1;
}
else{
#print "Unknown line: $l!\n";
} }
buildcfg();
copywps();
}
else{
#print "Unknown line: $l!\n";
} }
} }