diff options
Diffstat (limited to 'wps/wpsbuild.pl')
-rwxr-xr-x | wps/wpsbuild.pl | 724 |
1 files changed, 345 insertions, 379 deletions
diff --git a/wps/wpsbuild.pl b/wps/wpsbuild.pl index e516c3d444..873331318a 100755 --- a/wps/wpsbuild.pl +++ b/wps/wpsbuild.pl @@ -12,6 +12,7 @@ use strict; use Getopt::Long qw(:config pass_through); # pass_through so not confused by -DTYPE_STUFF my $ROOT=".."; +my $wpsdir; my $verbose; my $rbdir=".rockbox"; my $tempdir=".rockbox"; @@ -31,21 +32,22 @@ GetOptions ( 'r|root=s' => \$ROOT, my $firmdir="$ROOT/firmware"; my $cppdef = $target; -my @depthlist = ( 16, 8, 4, 2, 1 ); # These parameters are filled in as we parse wpslist -my $req_size; -my $req_g_wps; my $req_t; -my $req_t_wps; +my $theme; +my $has_wps; my $wps; -my $wps_prefix; -my $sbs_prefix; +my $has_rwps; my $rwps; +my $has_sbs; my $sbs; -my $sbs_w_size; +my $has_rsbs; my $rsbs; -my $rsbs_w_size; +my $has_fms; +my $fms; +my $has_rfms; +my $rfms; my $width; my $height; my $font; @@ -53,13 +55,16 @@ my $remotefont; my $fgcolor; my $bgcolor; my $statusbar; +my $remotestatusbar; my $author; my $backdrop; my $lineselectstart; my $lineselectend; my $selecttype; my $iconset; +my $remoteiconset; my $viewericon; +my $remoteviewericon; my $lineselecttextcolor; my $filetylecolor; my $listviewport; @@ -135,28 +140,33 @@ STOP sub mkdirs { - my $wpsdir = $wps; - $wpsdir =~ s/\.(r|)wps//; mkdir "$tempdir/wps", 0777; mkdir "$tempdir/themes", 0777; + mkdir "$tempdir/icons", 0777; - if( -d "$tempdir/wps/$wpsdir") { - #print STDERR "wpsbuild warning: directory wps/$wpsdir already exists!\n"; + if( -d "$tempdir/wps/$theme") { + #print STDERR "wpsbuild warning: directory wps/$theme already exists!\n"; } 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 { #copy the backdrop file into the build dir if ($backdrop ne '') { - my $dst = $backdrop; - $dst =~ s/(\.[0-9]*x[0-9]*x[0-9]*)//; - my $cmd = "cp $ROOT/$backdrop $tempdir/$dst"; - `$cmd`; + my $dst = normalize($backdrop); + system("cp $ROOT/$backdrop $tempdir/$dst"); } } @@ -167,31 +177,30 @@ sub copythemefont $o =~ s/\.fnt/\.bdf/; mkdir "$tempdir/fonts"; - my $cmd ="$ROOT/tools/convbdf -f -o \"$tempdir/fonts/$_[0]\" \"$ROOT/fonts/$o\" "; - `$cmd`; + system("$ROOT/tools/convbdf -f -o \"$tempdir/fonts/$_[0]\" \"$ROOT/fonts/$o\" "); } sub copythemeicon { + my $i = $_[0]; #copy the icon specified by the theme - if ($iconset ne '') { - my $tempicon = $tempdir . "/" . $iconset; - $iconset = $rbdir . "/" . $iconset; + if ($i ne "-") { + my $tempicon = $tempdir . "/" . $i; $tempicon =~ /\/.*icons\/(.*)/i; - `cp $ROOT/icons/$1 $tempicon`; + system("cp $ROOT/icons/$1 $tempicon"); } } -sub copythemeviewericon -{ - #copy the viewer icon specified by the theme - - if ($viewericon ne '') { - my $tempviewericon = $tempdir . "/" . $viewericon; - $viewericon = $rbdir . "/" . $viewericon; - $tempviewericon =~ /\/.*icons\/(.*)/i; - `cp $ROOT/icons/$1 $tempviewericon`; +sub uniq { + my %seen = (); + my @r = (); + foreach my $a (@_) { + unless ($seen{$a}) { + push @r, $a; + $seen{$a} = 1; + } } + return @r; } sub copywps @@ -199,181 +208,104 @@ sub copywps # we assume that we copy the WPS files from the same dir the WPSLIST # file is located in my $dir; + my %skinfiles = ("wps", $wps, + "sbs", $sbs, + "fms", $fms, + "rwps", $rwps, + "rsbs", $rsbs, + "rfms", $rfms); my @filelist; my $file; - my $__sb; - if($wpslist =~ /(.*)WPSLIST/) { + if($wpslist =~ /(.*)\/WPSLIST/) { $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/"); - # check for <name>.WIDTHxHEIGHTxDEPTH.sbs - if (-e "$dir/$__sb") { - system("cp $dir/$__sb $tempdir/wps/$sbs"); + + # copy fully-fledged wps, sbs, etc. including graphics + foreach my $ext (keys %skinfiles) { + next unless ($skinfiles{$ext}); + $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 - $__sb = $sbs_prefix . "." . $req_size . "." . $modelname . ".sbs"; - if (-e "$dir/$__sb") { - system("cp $dir/$__sb $tempdir/wps/$sbs"); + + if ($#filelist >= 0) { + if (-e "$dir/$theme") { + foreach $file (uniq(@filelist)) { + 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 { print STDERR "No source directory!\n"; } } sub buildcfg { - my $cfg = $wps; - my @out; - - $cfg =~ s/\.(r|)wps/.cfg/; + my $cfg = $theme . ".cfg"; + my @out; push @out, <<MOO \# \# $cfg generated by wpsbuild.pl \# $wps is made by $author \# -wps: $rbdir/wps/$wps MOO ; - if(defined($sbs)) { - if ($sbs eq '') { - push @out, "sbs: -\n"; - } else { - push @out, "sbs: $rbdir/wps/$sbs\n"; - } - } - if(defined($rsbs) && $has_remote) { - if ($rsbs eq '') { - push @out, "rsbs: -\n"; - } else { - push @out, "rsbs: $rbdir/wps/$rsbs\n"; - } - } - if($font) { - if ($font eq '') { - push @out, "font: -\n"; - } else { - push @out, "font: $rbdir/fonts/$font\n"; - } - } - if(defined($remotefont) && $has_remote) { - if ($remotefont eq '') { - push @out, "remote font: -\n"; - } else { - push @out, "remote font: $rbdir/fonts/$remotefont\n"; - } - } - 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"; + + my %skinfiles = ("wps" => $wps, + "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 { - push @out, "rwps: $rbdir/wps/$rwps\n"; + # file name is always <theme>.{wps,rwps,...} (see copywps()) + push @out, "$skin: $rbdir/wps/$theme.$skin\n"; } } - if(defined($listviewport)) { - if ($listviewport eq '') { - push @out, "ui viewport: -\n"; - } else { - push @out, "ui viewport: $listviewport\n"; - } + + push @out, "selector type: $selecttype\n" if (defined($selecttype)); + push @out, "backdrop: $backdrop\n" if (defined($backdrop)); + push @out, "filetype colours: $filetylecolor\n" if (defined($filetylecolor)); + + 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(defined($remotelistviewport) && $has_remote) { - if ($remotelistviewport eq '') { - push @out, "remote ui viewport: -\n"; - } else { - push @out, "remote ui viewport: $listviewport\n"; - } + + push @out, "font: $font\n" if (defined($font)); + push @out, "statusbar: $statusbar\n" if (defined($statusbar)); + push @out, "iconset: $iconset\n" if (defined($iconset)); + push @out, "viewers iconset: $viewericon\n" if (defined($viewericon)); + push @out, "ui viewport: $listviewport\n" if (defined($listviewport)); + + if ($has_remote) { + push @out, "remote font: $remotefont\n" if (defined($remotefont)); + push @out, "remote statusbar: $remotestatusbar\n" if (defined($remotestatusbar)); + push @out, "remote iconset: $remoteiconset\n" if (defined($remoteiconset)); + push @out, "remote viewers iconset: $remoteviewericon\n" if (defined($remoteviewericon)); + push @out, "remote ui viewport: $remotelistviewport\n" if (defined($remotelistviewport)); } + if(-f "$tempdir/wps/$cfg") { 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"; $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"); while(<WPS>) { @@ -410,15 +381,21 @@ while(<WPS>) { $rbdir = "/" . $rbdir; } - if($l =~ /^ *<(r|)wps>/i) { - $isrwps = $1; - $within = 1; + if($l =~ /^ *<theme>/i) { # 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_prefix; undef $rwps; undef $sbs; undef $rsbs; + undef $fms; + undef $rfms; undef $width; undef $height; undef $font; @@ -426,224 +403,213 @@ while(<WPS>) { undef $fgcolor; undef $bgcolor; undef $statusbar; + undef $remotestatusbar; undef $author; - undef $req_g_wps; - undef $req_t_wps; undef $backdrop; undef $lineselectstart; undef $lineselectend; undef $selecttype; undef $iconset; + undef $remoteiconset; undef $viewericon; + undef $remoteviewericon; undef $lineselecttextcolor; undef $filetylecolor; undef $listviewport; undef $remotelistviewport; - - next; } - if($within) { - if($l =~ /^ *<\/${isrwps}wps>/i) { - # Get the required width and height - my ($rheight, $rwidth, $rdepth); - if($isrwps) { - ($rheight, $rwidth, $rdepth) = - ($remote_height, $remote_width, $remote_depth); + elsif($l =~ /^Name: *(.*)/i) { + $theme = $1; + } + elsif($l =~ /^Authors: *(.*)/i) { + $author = $1; + } + 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 { - ($rheight, $rwidth, $rdepth) = - ($main_height, $main_width, $main_depth); + elsif($_ = check_res($l, "wps")) { + $wps = $_; } - - if(!$rheight || !$rwidth) { - #printf STDERR "wpsbuild notice: No %sLCD size, skipping $wps\n", - #$isrwps?"remote ":""; - $within = 0; - next; + elsif($_ = check_res($l, "sbs")) { + $sbs = $_; } - $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; - - # check for model specific wps - $req_g_wps = $wps_prefix . "." . $req_size . "." . $modelname . ".wps"; - 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"); - } + elsif($_ = check_res($l, "fms")) { + $fms = $_; } - $req_t_wps = $wps_prefix . ".txt" . ".wps"; - - #print "LCD: $wps wants $width x $height\n"; - #print "LCD: is $rwidth x $rheight\n"; - - #print "gwps: $wpsdir/$req_g_wps" . "\n"; - if (-e "$wpsdir/$req_g_wps" || -e "$wpsdir/$req_t_wps" ) { - # - # The target model has an LCD that is suitable for this - # WPS - # - #print "Size requirement is fine!\n"; - mkdirs() if (-e "$wpsdir/$req_g_wps"); - # Do the copying before building the .cfg - buildcfg() - # mangles some filenames - if ($backdrop) { - copybackdrop(); - } - 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(); + elsif($_ = check_res($l, "Font")) { + $font = $_; } - else { - #print "(${wps_prefix}-${rwidth}x${rheight}x$rdepth) "; - #print "Skip $wps due to size restraints\n"; + 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 = $_; } - $within = 0; - } - elsif($l =~ /^Name: *(.*)/i) { - # Note that in the case this is within <rwps>, $wps will contain the - # name of the rwps. Use $isrwps to figure out what type it is. - $wps = $wps_prefix = $1; - $wps_prefix =~ s/\.(r|)wps//; - #print $wps_prefix . "\n"; - } - elsif($l =~ /^RWPS: *(.*)/i) { - $rwps = $1; - } - 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 =~ /^ *<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 =~ /^line selector text color: *(.*)/i) { - $lineselecttextcolor = $1; + } + 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 = ''; } - elsif($l =~ /^filetype colours: *(.*)/i) { - $filetylecolor = $1; + + if ($has_sbs eq "yes" && !$sbs) { + $sbs = check_skinfile("sbs"); + } elsif ($has_sbs eq "no") { + $sbs = ''; } - elsif($l =~ /^ui viewport: *(.*)/i) { - $listviewport = $1; + + if ($has_fms eq "yes" && !$fms) { + $fms = check_skinfile("fms"); + } elsif ($has_fms eq "no") { + $fms = ''; } - elsif($l =~ /^ui viewport\.${main_width}x${main_height}x$main_depth: *(.*)/i) { - $listviewport = $1; + + # 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 ($has_rsbs eq "yes" && !$rsbs) { + $rsbs = check_skinfile("sbs"); + } elsif ($has_rsbs eq "no") { + $rsbs = ''; + } + + if ($has_rfms eq "yes" && !$rfms) { + $rfms = check_skinfile("fms"); + } elsif ($has_rfms eq "no") { + $rfms = ''; + } } - elsif($l =~ /^remote ui viewport: *(.*)/i) { - $remotelistviewport = $1; + #print "LCD: $wps wants $width x $height\n"; + + # + # The target model has an LCD that is suitable for this + # WPS + # + #print "Size requirement is fine!\n"; + mkdirs() if (-e "$wpsdir/$theme"); + # Do the copying before building the .cfg - buildcfg() + # mangles some filenames + if (defined($backdrop) && $backdrop ne "-") { + copybackdrop(); + $backdrop = normalize($backdrop); + } + foreach my $i ($iconset, $viewericon, $remoteiconset, $remoteviewericon) { + if (defined($i) && $i ne "-") { + copythemeicon($i); + } } - elsif($l =~ /^remote ui viewport\.${main_width}x${main_height}x$main_depth: *(.*)/i) { - $remotelistviewport = $1; + if (defined($font) && $font ne "-") { + copythemefont($font); + $font = "$rbdir/fonts/$font"; } - else{ - #print "Unknown line: $l!\n"; + if (defined($remotefont) && $remotefont ne "-") { + copythemefont($remotefont); + $remotefont = "$rbdir/fonts/$remotefont"; } + buildcfg(); + copywps(); + } + else{ + #print "Unknown line: $l!\n"; } } |