#!/usr/local/bin/perl

# Einstellung der Vorder- und Hintergrundfarbe einer Sun-Console
# http://www.cs.tu-berlin.de/~czyborra/~/bin/colormap
# © 1995 Roman Czyborra@cs.tu-berlin.de
# $Id: colormap,v 1.6 1995/12/19 15:22:04 czyborra Exp $

# Lerne X11-Farbnamen

open (COLORS, $COLORS= "/usr/X11/lib/rgb.txt")
    || die "Cannot open $COLORS: $!";

for (0..255) { $char[$_]=pack("C", $_) }

while (<COLORS>)
{
    ($red, $green, $blue, $name) = /^\s*(\d+)\s+(\d+)\s+(\d+)\s+(.+)/;

    $color{$name}= pack ("ppp", $char[$red], $char[$green], $char[$blue]);
}

# Systemkonstanten knapp, aber etwas unsauberer als in C definiert.

$FBIOPUTCMAP = -e "/usr/include/sun/fbio.h" ? 0x80144603 : 0x4603;

# Als Argumente werden Vorder- und Hintergrundfarbe erwartet.

$foreground = pack ("ii", 255, 1) . $color{shift || "black"};
$background = pack ("ii",   0, 1) . $color{shift || "white"};

# Angesprochen wird dann das Framebufferdevice (fbio).

open (SCREEN, $SCREEN = "/dev/fb")
    || die "Cannot open $SCREEN: $!\n";

ioctl (SCREEN, $FBIOPUTCMAP, $background) &&
    ioctl (SCREEN, $FBIOPUTCMAP, $foreground)
    || die "FBIOPUTCMAP: $! $SCREEN\n";

# Quellen: man console, man fbio, /usr/local/src/colormap/
# /home/X11R6/xc/programs/Xserver/hw/sun/sunCfb24.c
