From 9f1dd44ca147dfb63671bd1967125479b8531c9f Mon Sep 17 00:00:00 2001 From: Chmouel Boudjnah Date: Wed, 30 Jan 2002 13:16:47 +0000 Subject: Initial revision --- scripts/detect-resolution | 117 ++++++++++++++++++++++++++++++++++++++++++++++ scripts/make-boot-splash | 87 ++++++++++++++++++++++++++++++++++ scripts/rewritejpeg | 29 ++++++++++++ 3 files changed, 233 insertions(+) create mode 100755 scripts/detect-resolution create mode 100755 scripts/make-boot-splash create mode 100755 scripts/rewritejpeg (limited to 'scripts') diff --git a/scripts/detect-resolution b/scripts/detect-resolution new file mode 100755 index 0000000..dad066e --- /dev/null +++ b/scripts/detect-resolution @@ -0,0 +1,117 @@ +#!/usr/bin/perl +# -*- Mode: cperl -*- +# Copyright (C) 2002 by Chmouel Boudjnah +# Redistribution of this file is permitted under the terms of the GNU +# Public License (GPL) +# +# Detect vga resolution we want. +# + +#use strict; +my (%main, %entry); + +my $vga = detect_from_cmdline(cat_('/proc/cmdline')); +undef $vga if $vga =~ /x/; #lilo cmdline can't convert +detect_from_loader() if not $vga; +if ($vga) { + chomp $vga; + $vga =~ s/vga=//; + $vga = convert_vgamode(); +} +print $vga, "\n" if $vga; + +sub detect_from_cmdline {return (grep /vga=\d+/, split("[ \t]", shift))[0];} +sub detect_from_loader { + my $loader = `detectloader -q`;chomp $loader; + if ($loader =~ m/lilo/i ) { + parse_lilo_conf(); + $vga = $entry{$main{default}}{vga}; + $vga = $main{vga} if not $vga; + } elsif ($loader =~ /grub/i ) { + parse_grub_conf(); + $vga = detect_from_cmdline($entry{$main{default}}{options}); + } +} +sub parse_grub_conf { + my ($title); + my $cnt = 0; + my $grub_conf = "/boot/grub/menu.lst"; + open F, $grub_conf or die "Can't open $grub_conf\n"; + + while () { + next if /^\s*#/; + $main{default} = $1 if /^default (\d+)/; + if (/^title\s+(.*)/) { + $title=$1; + $entry{$title}{title} = $title; + $entry{$title}{cnt} = $cnt; + $main{default} = $title if $entry{$title}{cnt} eq $main{default}; + $cnt++; + } + if (m/kernel\s+(\(.*\))([^\s]+)\s+(.*)/) { + $entry{$title}{partition} = $1; + $entry{$title}{kernel} = $2; + $entry{$title}{options} = $3; + } + $entry{$title}{initrd} = $1 if m/\s*initrd.*\)(.*)/; + } + close F; +} + +sub parse_lilo_conf { + my $lilo_conf="/etc/lilo.conf"; + my ($vga, $label); + open F, $lilo_conf or die "Can't open $lilo_conf\n"; + while () { + next if /^\s*#/; + $main{default} = $1 if m/^default=(.*)/; + $main{vga} = $1 if m/^vga=(.*)/; + $vga = $1 if /vga=(.*)/; + $label=$1 if /label=(.*)/; + $entry{$label}{vga} = $vga if ($label and $vga); + undef $vga if (/image=/ and $vga); + } + close F; +} + +sub convert_vgamode { + my $v; + #From drakx Xconfigurator_consts.pm + my %vgamodes = ( + '640xx8' => 769, + '640x480x8' => 769, + '800xx8' => 771, + '800x600x8' => 771, + '1024xx8' => 773, + '1024x768x8' => 773, + '1280xx8' => 775, + '1280x1024x8' => 775, + '640xx15' => 784, + '640x480x15' => 784, + '800xx15' => 787, + '800x600x15' => 787, + '1024xx15' => 790, + '1024x768x15' => 790, + '1280xx15' => 793, + '1280x1024x15' => 793, + '640xx16' => 785, + '640x480x16' => 785, + '800xx16' => 788, + '800x600x16' => 788, + '1024xx16' => 791, + '1024x768x16' => 791, + '1280xx16' => 794, + '1280x1024x16' => 794, + #- '640xx24' => 786, #- there is a problem with these resolutions since the BIOS may take 24 or 32 planes. + #- '640x480x24' => 786, + #- '800xx24' => 789, + #- '800x600x24' => 789, + #- '1024xx24' => 792, + #- '1024x768x24' => 792, + #- '1280xx24' => 795, + #- '1280x1024x24' => 795, + ); + foreach my $k (keys %vgamodes) { $v = $k if $vgamodes{$k} == $vga } + undef $vga if not $v;return $v; +} +sub cat_ { local *F; open F, $_[0] or $_[1] ? die "cat of file $_[0] failed: $!\n" : return; my @l = ; wantarray ? @l : join '', @l } diff --git a/scripts/make-boot-splash b/scripts/make-boot-splash new file mode 100755 index 0000000..45b8c56 --- /dev/null +++ b/scripts/make-boot-splash @@ -0,0 +1,87 @@ +#!/bin/sh +# -*- Mode: shell-script -*- +# Copyright (C) 2002 by Chmouel Boudjnah +# Redistribution of this file is permitted under the terms of the GNU +# Public License (GPL) +# $Id$ + +: ${splash_dir=/usr/share/bootsplash} + +initrd_file=$1 + +[[ -z $initrd_file ]] && { + echo "You need to specify a initrd file as argument" + exit 1; +} + +vgamode=$( $splash_dir/scripts/detect-resolution ) +if [[ $vgamode == 800* ]];then + resolution=800x600 +elif [[ $vgamode == 1024* ]];then + resolution=1024x768 +elif [[ $vgamode == 1280* ]];then + resolution=1280x1024 +fi + +if [[ -f $splash_dir/images/bootsplash-$resolution.jpg && -f $splash_dir/cfg/bootsplash-$resolution.cfg ]];then + image=$splash_dir/images/bootsplash-$resolution.jpg + config=$splash_dir/cfg/bootsplash-$resolution.cfg +fi + +if [[ -n $image ]];then + if [[ -z $config ]];then + echo "Can't find a config files for $resolution"; + exit 1; + fi +else #no image + echo "Can't find images for $resolution"; +fi + +# From SuSe mk_initrd script +function out_byte() +{ + let x=$1 + echo -en "`printf \\\\%o $x`" +} +function write_int() +{ + let tmp1=($1 & 255) + let tmp2=($1>>8) + let tmp2=($tmp2&255) + let tmp3=($1>>16) + let tmp3=($tmp3&255) + let tmp4=($1>>24) + let tmp4=($tmp4&255) + out_byte $tmp1 + out_byte $tmp2 + out_byte $tmp3 + out_byte $tmp4 +} +function write_short() +{ + let tmp1=($1>>8) + let tmp2=($1&0xff) + out_byte $tmp2 + out_byte $tmp1 +} + +function write_header() +{ + # write signature + echo -n "BOOTSPL1" + # write text x coordinate + write_short $1 + # write text y coordinate + write_short $2 + # write text width + write_short $3 + # write text height + write_short $4 + # write file length + write_int $5 +} + +source $config +size=`wc -c<$image` +write_header $tx $ty $tw $th $size >> $initrd_file +cat $image >> $initrd_file \ No newline at end of file diff --git a/scripts/rewritejpeg b/scripts/rewritejpeg new file mode 100755 index 0000000..b2e36ea --- /dev/null +++ b/scripts/rewritejpeg @@ -0,0 +1,29 @@ +#!/bin/bash +# -*- Mode: shell-script -*- +# Copyright (C) 2002 by Chmouel Boudjnah +# Redistribution of this file is permitted under the terms of the GNU +# Public License (GPL) +# +# Take a Jpeg and reconvert it via ppm-tools to make sure is +# compatible for boot logo +# $Id$ + +files="$@" + +[[ -z $files ]] && { + echo "I need jpeg files argument" + exit 1 +} + +for file in $files;do + [[ $file != *.jpg ]] && { + echo "$file is not a jpeg" + continue; + } + echo "Converting $file" + tmp=${file/.jpg/.ppm} + jpegtopnm $file > $tmp + ppmtojpeg $tmp > $file + rm -f $tmp +done + -- cgit v1.2.1