#!/bin/sh
# dummy line, needed so wish does not execute the next line \
exec wish "$0" "$@" -f
# ###############################################################
# powercolor Version 0.3
# ###############################################################
# 
# 
# Use at your own risk!
# Only for use with Ghostscript Version 5.10 or higher
# with enabled uniprint driver
# 
# ###############################################################
# If you use your printer on another device than /dev/lp1 change it here:

set printer {/dev/lp1}

# There is no need to edit any lines below
# ######################################################################

frame .oben
frame .mitte
frame .unten
frame .links 
frame .mmitte
frame .mitte.l
frame .mitte.m
frame .mitte.r
frame .rechts
frame .rechts.oben
frame .rechts.unten
frame .ganzunten
frame .tiefer
frame .tiefer.l
frame .tiefer.m
frame .tiefer.r

set gs_version [exec gs --version]

set ps_extension .ps

set header {	-supModel="HP Deskjet"
		-sDEVICE=uniprint
		-dNOPAUSE
		-dSAFER
		-dupColorModel=/DeviceCMYKgenerate
		-dupRendering=/}

set error {ErrorDiffusion
          }

set floydsteinberg {FSCMYK32
                   }
		
set transfer {	-dupOutputFormat=/Pcl
		-r300x300
		-dupMargins="{ 12.0 36.0 12.0 12.0}"
		-dupBlackTransfer="{
                     0.0000 0.0001 0.0002 0.0003 0.0004 0.0005 0.0014 0.0025
		     0.0044 0.0071 0.0108 0.0158 0.0224 0.0309 0.0415 0.0548
		     0.0709 0.0904 0.1136 0.1411 0.1732 0.2105 0.2536 0.3030
		     0.3592 0.4229 0.4948 0.5754 0.6655 0.7658 0.8770 1.0000
				}"
		-dupCyanTransfer="{
		     0.0000 0.0010 0.0042 0.0094 0.0166 0.0260 0.0375 0.0510 
		     0.0666 0.0843 0.1041 0.1259 0.1498 0.1758 0.2039 0.2341
		     0.2663 0.3007 0.3371 0.3756 0.4162 0.4589 0.5036 0.5505
		     0.5994 0.6504 0.7034 0.7586 0.8158 0.8751 0.9365 1.0000
				}"
		-dupMagentaTransfer="{
		     0.0000 0.0010 0.0042 0.0094 0.0166 0.0260 0.0375 0.0510 
		     0.0666 0.0843 0.1041 0.1259 0.1498 0.1758 0.2039 0.2341
		     0.2663 0.3007 0.3371 0.3756 0.4162 0.4589 0.5036 0.5505
		     0.5994 0.6504 0.7034 0.7586 0.8158 0.8751 0.9365 1.0000
				}"
		-dupYellowTransfer="{
		     0.0000 0.0010 0.0042 0.0094 0.0166 0.0260 0.0375 0.0510 
		     0.0666 0.0843 0.1041 0.1259 0.1498 0.1758 0.2039 0.2341
		     0.2663 0.3007 0.3371 0.3756 0.4162 0.4589 0.5036 0.5505
		     0.5994 0.6504 0.7034 0.7586 0.8158 0.8751 0.9365 1.0000
				}"
		-dupBeginPageCommand="<
		}

set plain {1b266C304D
          }
	  
set bond  {1b266C314D
          }
set premier {1b266C324D
            }
	    
set glossy {1b266C334D
           }
	   
set transparency {1b266C344D
                 }

set draft  {1b2a723151
           }
	   
set normal {1b2a723051
           }
	   
set high   {1b2a723251
           }

set footer  {  	1b2a726243
   		1b2a7433303052
   		1b266c33616f6c45
   		1b2a6f31643251
   		1b2a703059
   		1b2a72732d34753041
   		1b2a62326d
		>"
		-dupAdjustPageWidthCommand
		-dupEndPageCommand="(0M\033*rbC\033E\033&l0H)"
		-dupAbortCommand="(0M\033*rbC\033E\15\12\12\12\12    Printout-Aborted\15\033&l0H)"
		-dupYMoveCommand="(%dy\0)"
		-dupWriteComponentCommands="{ (%dv\0) (%dv\0) (%dv\0) (%dw\0) }"
		}

set paper $plain
set quality $normal
set render $error

set pre1 \x1b\x26\x62\x31\x38\x57\x50\x4d\x4c\x20\x04\x00\x07\x01\x04\x01\x05\x03\x02\x06\x08\x02
set pre2 \x1b\x26\x62\x31\x38\x57\x50\x4d\x4c\x20\x04\x00\x07\x01\x04\x01\x05\x03\x02\x05\x08\x02
set A \xff\xc4
set B \xff\xd0
set C \xff\xdc
set D \xff\xe8
set E \xff\xf4
set F \x00\x00
set G \x00\x0c
set H \x00\x18
set I \x00\x24
set J \x00\x30
set K \x00\x3c
set 1 \xff\xc4
set 2 \xff\xd0
set 3 \xff\xdc
set 4 \xff\xe8
set 5 \xff\xf4
set 6 \x00\x00
set 7 \x00\x0c
set 8 \x00\x18
set 9 \x00\x24
set 10 \x00\x30
set 11 \x00\x3c

set selbsttest \x1b\x7a

button .power -text "Powercolor 0.3 for Color Deskjets" -relief ridge -command infor
label .paper -text "Paper" 
label .quality -text "Quality" 
label .render -text "Rendering" 

button .test -text "Test" -command selftest
button .align -text "Alignment" -command alignment
button .exit -text "Exit" -command {destroy .}

radiobutton .plain -text "Plain" -variable paper -value $plain -anchor w -command setlink
radiobutton .bond -text "Bond" -variable paper -value $bond  -anchor w -command setlink
radiobutton .premier -text "Premier" -variable paper -value $premier -anchor w -command setlink
radiobutton .glossy -text "Glossy" -variable paper -value $glossy  -anchor w -command setlink
radiobutton .transparency -text "Transparency" -variable paper -value $transparency -anchor w -command setlink

radiobutton .low -text "Low" -variable quality -value $draft -anchor w -command setlink
radiobutton .normal -text "Normal" -variable quality -value $normal -anchor w -command setlink
radiobutton .high -text "High" -variable quality -value $high -anchor w -command setlink

radiobutton .error -text "Error" -variable render -value $error -anchor w -command setlink
radiobutton .floyd -text "Floyd- Steinberg" -variable render -value $floydsteinberg -anchor w -command setlink

scale .bright -label Brightness -from 1 -to 5 -orient horizontal -relief ridge -command setgamma 
.bright set 3

wm title . "Powercolor 0.3"

pack .oben .mitte .unten .ganzunten .tiefer -fill x
pack .power -in .oben -fill x -ipady 10
pack .mitte.l .mitte.m .mitte.r -in .mitte -side left -expand 1
pack .links .mmitte .rechts -side left -in .unten
pack .tiefer.l .tiefer.m .tiefer.r -in .tiefer -side left -expand 1

pack .paper -in .mitte.l  -fill x
pack .quality -in .mitte.m -fill x
pack .render -in .mitte.r -fill x

pack .plain .bond .premier .glossy .transparency -in .links -fill x
pack .low .normal .high -in .mmitte -fill x 
pack .error .floyd -in .rechts -fill x

pack .bright -in .ganzunten -fill x

pack .test -in .tiefer.l -fill x
pack .align -in .tiefer.m -fill x
pack .exit -in .tiefer.r -fill x

proc setlink {} {
	global header transfer footer paper quality render gs_version
	set datei [open /usr/share/ghostscript/$gs_version/powercolor.upp w]
	puts $datei $header$render$transfer$quality$paper$footer
	close $datei
}

proc setgamma wert {
	global ps_extension
	global .bright
	set white #FFFFFF
	set black #000000
	exec rm -f /etc/powergamma.ps
	eval exec ln -s /etc/gamma$wert$ps_extension /etc/powergamma.ps
	set farbwert [expr $wert * 50]
	set color [format #%02x%02x%02x $farbwert $farbwert $farbwert]
	.bright configure -background $color
	if {$wert < 3} {
		.bright configure -foreground $white
		}
	 if {$wert > 2} {
	 	.bright configure -foreground $black
	 	}
	}

proc selftest {} {
	global selbsttest printer
	set drucker [open $printer w]
	puts -nonewline $drucker $selbsttest
	close $drucker
        }
	
proc alignment {} {
	global pre1 pre2 A B C D E F G H I J K 1 2 3 4 5 6 7 8 9 10 11 printer
	toplevel .al
	wm title .al Alignment
	set buchstabe "A"
	set zahl "1"
	
	frame .al.oben
	frame .al.mitte1
	frame .al.mitte2
	frame .al.unten
	
	button .al.label -text "The printer has printed a pattern of lines. Select the best values in this field" -relief ridge
	button .al.cancel -text Cancel -command {destroy .al}
	button .al.ok -text OK -command {print2; destroy .al}
	
	radiobutton .al.a -text A -variable buchstabe -value A
	radiobutton .al.b -text B -variable buchstabe -value B
	radiobutton .al.c -text C -variable buchstabe -value C
	radiobutton .al.d -text D -variable buchstabe -value D
	radiobutton .al.e -text E -variable buchstabe -value E
	radiobutton .al.f -text F -variable buchstabe -value F
	radiobutton .al.g -text G -variable buchstabe -value G
	radiobutton .al.h -text H -variable buchstabe -value H
	radiobutton .al.i -text I -variable buchstabe -value I
	radiobutton .al.j -text J -variable buchstabe -value J
	radiobutton .al.k -text K -variable buchstabe -value K
	radiobutton .al.1 -text 1 -variable zahl -value 1
	radiobutton .al.2 -text 2 -variable zahl -value 2
	radiobutton .al.3 -text 3 -variable zahl -value 3
	radiobutton .al.4 -text 4 -variable zahl -value 4
	radiobutton .al.5 -text 5 -variable zahl -value 5
	radiobutton .al.6 -text 6 -variable zahl -value 6
	radiobutton .al.7 -text 7 -variable zahl -value 7
	radiobutton .al.8 -text 8 -variable zahl -value 8
	radiobutton .al.9 -text 9 -variable zahl -value 9
	radiobutton .al.10 -text 10 -variable zahl -value 10
	radiobutton .al.11 -text 11 -variable zahl -value 11
	
	pack .al.oben .al.mitte1 .al.mitte2 .al.unten 
	pack .al.label -in .al.oben -fill x
	pack .al.1 .al.2 .al.3 .al.4 .al.5 .al.6 .al.7 .al.8 .al.9 .al.10 .al.11 -in .al.mitte1 -side left
	pack .al.a .al.b .al.c .al.d .al.e .al.f .al.g .al.h .al.i .al.j .al.k -in .al.mitte2 -side left
	pack .al.ok .al.cancel -in .al.unten -side left -expand 1
	
	exec cat /etc/align1.dat >$printer
	
	proc print2 {} {
		global printer pre1 pre2 buchstabe zahl 1 2 3 4 5 6 7 8 9 10 11 A B C D E F G H I J K
		switch $zahl {
			1 {set zahl1 $1}
			2 {set zahl1 $2}
			3 {set zahl1 $3}
			4 {set zahl1 $4}
			5 {set zahl1 $5}
			6 {set zahl1 $6}
			7 {set zahl1 $7}
			8 {set zahl1 $8}
			9 {set zahl1 $9}
			10 {set zahl1 $10}
			11 {set zahl1 $11}
			}
		switch $buchstabe {
			A {seet buchstabe1 $A}
			B {set buchstabe1 $B}
			C {set buchstabe1 $C}
			D {set buchstabe1 $D}
			E {set buchstabe1 $E}
			F {set buchstabe1 $F}
			G {set buchstabe1 $G}
			H {set buchstabe1 $H}
			I {set buchstabe1 $I}
			J {set buchstabe1 $J}
			K {set buchstabe1 $K}
			}
		
		set drucker [open $printer w]
		puts -nonewline $drucker $pre1$buchstabe1$pre2$zahl1
		close $drucker
		exec cat /etc/align2.dat >$printer
		}
	
	grab .al
	}
	
proc infor {} {
	toplevel .z
	wm title .z About
	wm iconbitmap .z questhead
	label .z.oben -relief raised -background lightgreen
	label .z.unten -relief raised -background lightgreen
	frame .z.oben.links -background lightgreen
	frame .z.oben.rechts -background lightgreen
	label .z.text -text "powercolor by Carsten Schwede" -background lightgreen
	label .z.text2 -text "mailto:teddy@frankfurt.netsurf.de" -background lightgreen
	label .z.pix -bitmap questhead -foreground blue -background lightgreen
	button .z.ok -text "OK" -command {destroy .z}
	pack .z.oben .z.unten -fill x
	pack .z.oben.links .z.oben.rechts -side left -in .z.oben
	pack .z.pix -in .z.oben.links -padx 20 -pady 20
	pack .z.text .z.text2 -fill x -fill y -padx 10 -in .z.oben.rechts
	pack .z.ok -in .z.unten -pady 10
	bind .z <Return> {destroy .z}
	grab .z
	}

	
setlink
setgamma 3

if {$gs_version < 5.10} {
	exec rm -f /usr/share/ghostscript/$gs_version/powercolor.upp
	toplevel .gserror
	wm title .gserror Error
	button .gserror.exit -text Exit -command {destroy .gserror; destroy .}
	label .gserror.label -text "You have`nt installed the right version of gs."
	label .gserror.label2 -text "This program requires Ghostscript version 5.10 or higher."
	pack .gserror.label .gserror.label2 .gserror.exit
	grab .gserror
	bind .gserror.exit <Return> {destroy .gserror; destroy .}
	}
