:
#  ------------------------------------------------------------------------
#  Title        : SetUp - Shellskript fuer ArtCom-Anwender
#  ------------------------------------------------------------------------
#                  This is an UNPUBLISHED work COPYRIGHT by
#                 "ArtCom, Atelier fuer Computergrafik GmbH"
#          Schwachhauser Heerstr. 78, D-2800 Bremen 1, West-Germany
#       It may be used, copied, or distributed only as permitted in a
#                              written license.
#  ------------------------------------------------------------------------
#  Created      :            08-Aug-89 / 11:25 / (rb)
#  Version      :       Fri, 26-Jan-96 / 01:18 / (pf,rb,md,mk+)
#  Portability  : XENIX Bourne shell
#  State        : under development
#  Purpose      : belongs to the XENIX port of BITS
#I Usage        : setup
#I Remarks      : Dieses Skript wird von den Kunden zum SetUp der kunden-
#I		  spezifischen Systemparameter verwendet.
#I	Achtung : Dieses Skript wird moeglicherweise vom Account 'service'
#I		  aus aufgerufen und muss sich deshalb (da service mit 
#I		  einer bourne sh arbeitet) die aktuellen Werte der 
#I		  Environment-Variablen verschaffen. Dies passiert 
#I		  durch die Prozedur 'GetThem' ! (pf / 08-Sep-89)
#I		  Diese Prozedur basiert darauf, dass die Dateien
#I		  $BITSLIB/mustermann/{.cshrc,.login} miteinander
#I		  $BITSLIB/service/{.cshrc,.login} verlinkt sind !
#I		  Alle Stellen, die bei der Einfuehrung einer neuen
#I		  Environment-Variablen geaendert werden muessen,
#I		  sind mit dem Kommentar '# @ADD' markiert ! (pf / 09-Mar-89)
#  ------------------------------------------------------------------------
#
$DBG_SH

[ -z "$BITSLIB" ] && BITSLIB=/bitslib
[ -z "$LANGUAGE" ] && LANGUAGE=deu
[ -z "$OS" ] && . $BITSLIB/bin/setOS

MSG_CAT=$BITSLIB/service/SERVImsg.${LANGUAGE}
. $BITSLIB/bin/.Messages

# einige nuetzliche Bourne Shell Prozeduren
#
# PROCEDURE Yes : Prompt for yes or no answer - returns non-zero for no
Yes() {
	while	read yn
	do	case $yn in
		       [yYjJ])	return 0 	;;
		       [nN])	return 1	;;
		       *) Error 1
		       ;;
		esac
	done
}
#
# PROCEDURE Error (msgNum : CARDINAL);
Error() {
	PARAM=$1
	(echo "\007\c"; Print serviceSH 2;
	 echo " : "; PrintLn serviceSH ${PARAM}) >&2
	return 1
}
#
# PROCEDURE Super : BOOLEAN;  (* are we root ? else error ! *)
Super() {
    if [ -w /etc/passwd ]
    then	return 0
    else	
#> Sie muessen Superuser ('root') -Zugriffsrechte haben.
		Error 3
#> Der Benutzer 'service' sollte die userid-Nummer '0' haben !
#> Bitte pruefen Sie, ob Sie sich als service eingeloggt haben und was
#> in der /etc/passwd steht.
		MultiPrint serviceSH 4 5 6
	    return 1
    fi
}
#
Interuptus() {
    PrintLn serviceSH 7 #> *** Konfiguration abgebrochen !!! ***
}
#
# Die Hauptspeichergroessen (muessen sich jeweils unterscheiden !)
# und zugeordneter PHYSMEM :
if   [ "$OS" = SCOSV ] || [ "$OS" = XENIX ]
then . $OS/memConfig
fi

#
Display() {
	# Irgendwie bringt GetMessage() die Parameter durcheinander; daher
	# rette ich sie zu Beginn der Prozedur
	P1=$1 ; P2=$2 ; P3=$3 ; P4=$4 ; P5=$5 ; P6=$6 ; P7=$7 ; P8=$8 ; P9=$9
	shift ; P10=$9
	GetMessage setup 8 # Hauptspeicher
	if   [ -z "$P1" ]
	then : #> Hauptspeichergroesse PHYSMEM nicht definiert
	     PrintLn setup 10
	fi
	if   [ "$OS" = "SCOSV" ] || [ "$OS" = XENIX ]
	then if   [ "$P1" = "$mem2" ]
	     then echo "$MESSAGE : 2 MB"
	     elif [ "$P1" = "$mem4" ]
	     then echo "$MESSAGE : 4 MB"
	     elif [ "$P1" = "$mem8" ]
	     then echo "$MESSAGE : 8 MB"
	     elif [ "$P1" = "$mem16" ]
	     then echo "$MESSAGE : 16 MB"
	     elif [ "$P1" = "$mem20" ]
	     then echo "$MESSAGE : 20 MB"
	     elif [ "$P1" = "$mem32" ]
	     then echo "$MESSAGE : 32 MB"
	     elif [ "$P1" = "$mem64" ]
	     then echo "$MESSAGE : 64 MB"
	     elif [ "$P1" = "$mem128" ]
	     then echo "$MESSAGE : 128 MB"
	     else #> Unbekannte Hauptspeichergroesse
		  PrintLn setup 9
	     fi
	else : # PHYSMEN ist standardmaessig 75% des Haupspeichers
	     sz=`echo "scale=4;$P1/3*4/1024"|bc`
	     echo "$MESSAGE : ~$sz MB"
	fi
	GetMessage setup 11 #> Eingabegeraet
	echo "$MESSAGE : " $P2
	if [ "$P6" != "" ]
	then	GetMessage setup 12 #> Standard Scanner = 
		echo $MESSAGE $P6
	else	PrintLn setup 13 #> Scanner Typ nicht definiert
	fi
	if [ "$P3" != "" ]
	then	if [ $P3 -gt 0 ]
		then	GetMessage setup 14 #> "Begleitzettel : "
			echo $MESSAGE $P3
		else	#> Kein automatischer Begleitzettelausdruck
			PrintLn setup 15
		fi
	else	#> Anzahl Begleitzettel BGLCOPIES nicht definiert
		PrintLn setup 16
	fi
	if [ "$P4" != "" ]
	then	if [ "$P7" = "fix" ]
		then	GetMessage setup 17 #> "Painter VMEM = "
			echo $MESSAGE $P4
		else 	PrintLn setup 18 #> Painter VMEM ueber Multiscreen
		fi
	else	#> Painter VMEM nicht definiert
		PrintLn setup 19
	fi
	if [ "$P5" != "" ]
	then	GetMessage setup 20 #> "Standard TMP Verzeichnis = "
		echo $MESSAGE $P5
	else	#> Standard TMP Verzeichnis nicht definiert
		PrintLn setup 21
	fi
	GetMessage setup 22 #> "Standard-Farbdrucker : "
	echo $MESSAGE $P8
	GetMessage setup 90 #> "Landessprache : "
	echo $MESSAGE $P9
	GetMessage setup 130 #> "Standard-Tape : "
	echo $MESSAGE $P10
	# @ADD here
	echo
}
#
ShowThem() {
	PrintLn setup 23 #> Jetzige Einstellung :
	Display "$physmem" "$grdevice" "$bglcopies" "$vmem" "$tmp" \
		"$scanner" "$vmemflag" "$colorprn" "$lang" \
		"$stdtape" 
	GetMessage setup 140
	echo $MESSAGE "$c2netid"
		# @ADD here
}
#
WriteThem() {
	if [ ! -d /customer ]
	then #> Erzeugung des Verzeichnisses /customer
	     PrintLn setup 24
	     mkdir /customer
	fi
	chmod 777 /customer
	chgrp anwender /customer ; chown ArtCom /customer
	echo "setenv PHYSMEM $physmem"    	 > /customer/.cshrc
	echo "setenv GRDEVICE $grdevice" 	>> /customer/.cshrc
	echo "setenv SCANNER $scanner"		>> /customer/.cshrc
	echo "setenv COLORPRN $colorprn"	>> /customer/.cshrc
	echo "setenv LANGUAGE $lang"		>> /customer/.cshrc
	echo "setenv BGLCOPIES $bglcopies"	>> /customer/.cshrc
	if [ "$vmemflag" = "fix" ]
	then	echo "setenv VMEMFLAG fix"              >> /customer/.cshrc
		echo "setenv VMEM ${vmem}/.VMEM"        >> /customer/.cshrc
	else	echo "setenv VMEMFLAG tty"              >> /customer/.cshrc
		echo \
"( who am i >& /dev/null )
if (\$status == 0) then
    set TTY=\`who am i\`
    if (\$#TTY > 0) then
	set TTY=(\$TTY[2])
	setenv VMEM /projects/vmem/\$TTY/.VMEM
    endif
endif"                                          >> /customer/.cshrc
	fi
	echo "setenv TMP $tmp"			>> /customer/.cshrc
	echo "setenv STDTAPE $stdtape"		>> /customer/.cshrc
	echo "setenv C2NETID $c2netid"          >> /customer/.cshrc
	# @ADD here
	chmod 666 /customer/.cshrc
	chgrp anwender /customer/.cshrc ; chown ArtCom /customer/.cshrc
}
#
GetThem() {
	Print setup 25 #> Bisherige Einstellung pruefen...\c
	# Falls bisher noch nicht definiert :
	VMEMFLAG="fix"
	if [ -r /customer/.cshrc ]
	then cat << EOF | csh > /tmp/doitnow.$$
	     source $BITSLIB/mustermann/.cshrc
	     source /customer/.cshrc
	     echo "PHYSMEM=\$PHYSMEM"
	     echo "GRDEVICE=\$GRDEVICE"
	     echo "BGLCOPIES=\$BGLCOPIES"
	     echo "VMEMFLAG=\$VMEMFLAG"
	     echo "VMEM=\$VMEM"
	     echo "TMP=\$TMP"
	     echo "SCANNER=\$SCANNER"
	     echo "COLORPRN=\$COLORPRN"
	     echo "LANGUAGE=\$LANGUAGE"
	     echo "STDTAPE=\$STDTAPE"
	     echo "C2NETID=\$C2NETID"
	     # @ADD here
EOF
##########
##### Bitte auch GetThem() in serviceSH aendern ! Insbesondere das "export"
##########
	     . /tmp/doitnow.$$
	     rm /tmp/doitnow.$$
	fi
	# Assume some defaults for undefined environment variables :
	[ "$PHYSMEM" ]	|| PHYSMEM=400
	[ "$GRDEVICE" ]	|| GRDEVICE=WacomII
	[ "$BGLCOPIES" ]	|| BGLCOPIES=0
	[ "$VMEMFLAG" ]	|| VMEMFLAG=fix
	[ "$VMEM" ]	|| VMEM=/projects/vmem/.VMEM
	[ "$TMP" ]	|| TMP=/projects/tmp
	[ "$SCANNER" ]	|| SCANNER=NONE
	[ "$COLORPRN" ]	|| COLORPRN=versatec.dev
	[ "$LANGUAGE" ]	|| LANGUAGE=deu
	[ "$STDTAPE" ]	|| STDTAPE=TAPE
	[ "$C2NETID" ]	|| C2NETID=100
	# @ADD here 
	# -- Set Defaultvalues for the interaction :
	physmem=$PHYSMEM
	grdevice=$GRDEVICE
	bglcopies=$BGLCOPIES
	tmp=$TMP
	scanner=$SCANNER
	colorprn=$COLORPRN
	lang=$LANGUAGE
	vmemflag=$VMEMFLAG
	vmem=`dirname $VMEM`
	stdtape=$STDTAPE
	c2netid=$C2NETID
	# @ADD here
	# -- update /customer/.cshrc nevertheless : --
	WriteThem
	clear
}
#
# --- 
ChangePhysmem_SCO() {
#> Hauptspeicher :
#> 	2 MB
#> 	4 MB
#> 	8 MB
#>     16 MB 
#>     20 MB 
#>     32 MB
#>     64 MB 
#>    128 MB 
	while MultiPrint setup 26 27 28 29 30 31 32 33 1000
	      Print setup 34 #> Speicher > \c
	      read answ
	do
	    case $answ in
		2) physmem=$mem2 ; break ;;
		4) physmem=$mem4 ; break ;;
		8) physmem=$mem8 ; break ;;
		16) physmem=$mem16 ; break ;;
		20) physmem=$mem20 ; break ;;
		32) physmem=$mem32 ; break ;;
		64) physmem=$mem64 ; break ;;
	       128) physmem=$mem128 ; break ;;
		*) #> Falsche Eingabe !
		   PrintLn setup 35 ;;
	    esac
	done
}
PhysMem()
{ case $OS in
	IRIX) hinv | sed -n 's/^Main memory size:[^0-9]*\([0-9]*\).*/\1/p';;
       SunOS) prtconf | sed -n 's/^Memory size:[^0-9]*\([0-9]*\).*/\1/p';;
	   *) echo "<unknown>";;
  esac
}
ChangePhysmem()
{ if   [ "$OS" = SCOSV ] || [ "$OS" = XENIX ]
  then ChangePhysmem_SCO;
  else mem=
       while [ -z "$mem" ];
       do  default=`PhysMem`; export default
	   GetMsg setup askMemSize
	   read mem
	   [ -z "$mem" ] && mem=$default
	   if   [ "$mem" -gt 15 ] && [ "$mem" -lt 1025 ]
	   then physmem=`echo "$mem*0.75*1024"|bc`
	   else mem=
		GetMsg setup invalidMemSize
	   fi
       done
  fi
}
#
ChangeGrdevice() {
#> Grafisches Eingabegeraet :
#> 	m. Microsoftkompatible Seriell-Maus
#> 	s. Summagraphics MM-1812 oder Summasketch Professional
#> 	w. Wacom II
#> 	k. Kein Eingabegeraet
	while MultiPrint setup 36 37 38 39 40
	      Print setup 41 #> Eingabegeraet > \c
	      read answ
	do
	    case $answ in
		[mM]*) grdevice=Mouse ; break ;;
		[sS]*) grdevice=Tablet ; break ;;
		[wW]*) grdevice=WacomII ; break ;;
		[kK]*) grdevice=None ; break ;;
		*) #> Falsche Eingabe !
		   PrintLn setup 35 ;;
	    esac
	done
}
#
ChangeScanner() {
#> Flachbett-Scanner :
#> 	3. Sharp JX-300 DIN-A4
#> 	4. Sharp JX-450 oder Howtek Scanmaster DIN-A3
#> 	6. Sharp JX-600 DIN-A3, 600 dpi Aufloesung
#> 	k. Kein Scanner
	while MultiPrint setup 42 43 44 45 46
	      Print setup 47 #> Scanner > \c
	      read answ
	do
	    case $answ in
		3*) scanner=JX-300 ; break ;;
		4*) scanner=JX-450 ; break ;;
		6*) scanner=JX-600 ; break ;;
		[kK]*) scanner=NONE ; break ;;
		*) #> Falsche Eingabe !
		   PrintLn setup 35 ;;
	    esac
	done
}
#
ChangeColorprn() {
#> Standard-Farbdrucker :
#>	0. Mitsubishi G6710 Super A3
#>	1. Versatec
#>	2. Shinko 1-farbig
#>	3. Shinko 3-farbig
#>	4. Shinko 4-farbig
#>	5. Shinko Super A4 1-farbig
#>	6. Shinko Super A4 3-farbig
#>	7. Shinko Super A4 4-farbig
#>	8. Mitsubishi S6600-30 A3 1-farbig
#>	9. Mitsubishi S6600-30 A3 3-farbig
#>	A. Mitsubishi S6600-30 A3 4-farbig
#>	B. Mitsubishi S6600-30 WB 1-farbig
#>	C. Mitsubishi S6600-30 WB 3-farbig
#>	D. Mitsubishi S6600-30 WB 4-farbig
#>	E. NovaJet II DIN A0 Farbplotter
#>	F. Epson EPL-7500 DIN A4 Postscript
#>	G. Calcomp CCL 600 S A3 Postscript
#>	H. CCP (Configurated Color Printer) HP-GL/2
#>	k. Kein Drucker
	while MultiPrint setup 100  99 101 102 103 104 105 106 107 \
                               108 109 110 111 112 113 116 117 118 119 114
	      Print setup 115 #> Drucker > \c
	      read answ
	do
	    case $answ in
		 0*) colorprn=mitsu.dev ; break ;;
		 1*) colorprn=versatec.dev ; break ;;
		 2*) colorprn=shinko1c.dev ; break ;;
		 3*) colorprn=shinko3c.dev ; break ;;
		 4*) colorprn=shinko.dev ; break ;;
		 5*) colorprn=shinkoS1c.dev ; break ;;
		 6*) colorprn=shinkoS3c.dev ; break ;;
		 7*) colorprn=shinkoS.dev ; break ;;
		 8*) colorprn=mitsu31c.dev ; break ;;
	 	 9*) colorprn=mitsu33c.dev ; break ;;
		[aA]*) colorprn=mitsu3.dev ; break ;;
		[bB]*) colorprn=mitsuW1c.dev ; break ;;
		[cC]*) colorprn=mitsuW3c.dev ; break ;;
		[dD]*) colorprn=mitsuW.dev ; break ;;
		[eE]*) colorprn=novajet.dev ; break ;;
		[fF]*) colorprn=psa4.dev ; break ;;
		[gG]*) colorprn=psa3.dev ; break ;;
		[hH]*) colorprn=ccp.dev ; break ;;
		[kK]*) colorprn=null.dev ; break ;;
		*) #> Falsche Eingabe !
		   PrintLn setup 35 ;;
	    esac
	done
}
#
ChangeLanguage() {
#> Landessprache :
#> 	1. deutsch
#> 	2. franzoesisch
#>      3. englisch
	while MultiPrint setup 90 91 92 93 94 95
	      Print setup 98 #> Sprache > \c
	      read answ
	do
	    case $answ in
		1*) lang=deu ; break ;;
		2*) lang=fra ; break ;;
		3*) lang=eng ; break ;;
		4*) lang=por ; break ;;
		5*) lang=spa ; break ;;
		*) #> Falsche Eingabe !
		   PrintLn setup 35 ;;
	    esac
	done
	# Die richtigen dazu passenden Message-Files installieren :
	[ -d $BITSLIB/env/$lang ] && {
	    ln $BITSLIB/env/$lang/* $BITSLIB/env 2>/dev/null
	}
}
#
ChangeBglcopies() {
	#> Sollen Bandbegleitzettel automatisch ausgedruckt werden ? \c
	Print setup 54
	if Yes
	then	Print setup 55 #> 2 Stueck ? \c
	        if Yes
		then	bglcopies=2
		else	bglcopies=1
		fi
	else	bglcopies=0
	fi
}
#
ChangeTmp() {
	#> Grosse Zwischendateien in /projects/tmp verwalten (Normalfall) ? \c
	Print setup 56
	if Yes
	then	tmp=/projects/tmp
	else	PrintLn setup 57 #> Anderes Verzeichnis :
		tmp=`line`
	fi
}
#
ChangeVmem() {
	if [ -d /proj ] && Print setup 58 && Yes
	    #> Soll der VMEM des Painter in /proj/vmem liegen (2.Platte) ? \c
	then	vmem=/proj/vmem
		vmemflag=fix
	else Print setup 59
	#> Soll der VMEM des Painters in /projects/vmem liegen (Normalfall) ? \c
	     if Yes
	     then vmem=/projects/vmem
		  vmemflag=fix
	     else #> Soll der VMEM vom Multiscreen abhaengig sein ? \c
		  Print setup 60
		  if Yes
		  then vmem=/projects/vmem
		       vmemflag=tty
		  else PrintLn setup 61 #> Anderes Verzeichnis :
		       vmem=`line`
		       vmemflag=fix
		  fi
	     fi
	fi
}
#
CheckTTYDirs() {
	for n in 00 01 02 03 04 05 06 07 08 09 10 11
	do	if [ ! -d /projects/vmem/tty"$n" ]
		then	#> "Erzeugung von /projects/vmem/tty$n..."
			GetMessage setup 62
			echo $MESSAGE
			mkdir /projects/vmem/tty"$n"
			chmod 777 /projects/vmem/tty"$n"
		fi
	done
}
#
ChangeTape() {
#> Standard-Tape :
#>	e. Exatape
#>	m. Spulenmagnetband
	while MultiPrint setup 130 131 132
	      Print setup 133 #> Tape > \c
	      read answ
	do
	    case $answ in
		 e*) stdtape=EXA  ; break ;;
		 m*) stdtape=TAPE ; break ;;
		*) #> Falsche Eingabe !
		   PrintLn setup 35 ;;
	    esac
	done

}
#
ChangeC2NETID() {
    while MultiPrint setup 140
          Print setup 141
          read answ
    do
        case $answ in
            [0-9]*) c2netid=$answ ; break ;;
            *) PrintLn setup 35 ; break ;;
	esac
    done
}
#
# @ADD a function Change..... here
#
InstallConf() {
	ShowThem
	echo "========================="
	Print setup 63 #> Sollen die Werte so installiert werden ? \c
	Yes || return 1
	if [ "$vmemflag" = "fix" ] && [ -d /projects/vmem/tty01 ] && \
	#> Sollen die an Multiscreens gebundenen VMEMs geloescht werden ?\c
	Print setup 64 && Yes
	then rm -rf /projects/vmem/tty* 2> /dev/null
	fi
	WriteThem
	if [ "$vmemflag" = "tty" ]
	then CheckTTYDirs
	elif [ ! -d $vmem ]
	then #> "ACHTUNG : Verzeichnis $vmem muss noch erzeugt werden (mkdir) !"
	     GetMessage setup 65
	     echo $MESSAGE
	fi
	if [ ! -d $tmp ]
	then #> "ACHTUNG : Verzeichnis $tmp muss noch erzeugt werden (mkdir) !"
	     GetMessage setup 66
	     echo $MESSAGE
	fi
	grep "source /customer" $BITSLIB/mustermann/.cshrc \
			> /dev/null 2> /dev/null
	if [ $? -ne 0 ]
	then 	#> Aufruf von /customer/.cshrc aus $BITSLIB/mustermann/.cshrc
		PrintLn setup 67
		echo \
"if ( -e /customer/.cshrc ) then
    source /customer/.cshrc
endif" >> $BITSLIB/mustermann/.cshrc
	fi
#> Die Werte sind installiert und werden beim naechsten Login aktiv.
#> -----------------------------------------------------------------
	MultiPrint setup 68 69
	return 0
}
#
#========================================================================
# main starts here :
#========================================================================
#
trap Interuptus 1 2 3 15 
# ASSERT, that we are 'root' :
Super || exit 1
clear
GetThem
#
#> Konfiguration des Systems
#> =========================
MultiPrint setup 70 71
ShowThem
Print setup 72 #> Sind diese Einstellungen so richtig ? \c
Yes && exit 0
#> Systemparameter aendern :
#> 	<A> Alle Parameter durchgehen
#> 	<1> Haupspeicher-Ausstattung
#> 	<2> Grafisches Eingabegeraet
#> 	<3> Flachbett-Scanner
#> 	<4> Bandbegeleitzettel
#> 	<5> Verzeichnis fuer Temporaere Dateien (TMP)
#> 	<6> Verzeichnis fuer Paint-VMEM
#> 	<7> Standard-Farbdrucker
#> 	<8> Sprache
#> 
#> 	<I> Installieren der jetzt gewaehlten Konfiguration	
#> 	<E> Ende ohne Aenderung
#> 
#> Auswahl > \c
while MultiPrint setup 73 74 75 76 77 78 79 80 81 82 88 89 83 84 85 86
      Print setup 87 #> Auswahl > \c
      read auswahl
# @ADD a choice to the menu above !
do
	case $auswahl in
		[aA]*)	ChangePhysmem
			ChangeGrdevice
			ChangeScanner
			ChangeBglcopies
			ChangeTmp
			ChangeVmem
			ChangeColorprn
			ChangeLanguage
			# @ADD a call to your Change... procedure
			if InstallConf
			then break
			fi
			;;
		1)	ChangePhysmem	;;
		2)	ChangeGrdevice	;;
		3)	ChangeScanner	;;
		4)	ChangeBglcopies	;;
		5)	ChangeTmp	;;
		6)	ChangeVmem	;;
		7)	ChangeColorprn	;;
		8)	ChangeLanguage	;;
		9)	ChangeTape	;;
		[cC]*)  ChangeC2NETID   ;;
		# @ADD a alternative here
		[iI]*)	if InstallConf 
			then break 
			fi ;;
		[eE]*)	Interuptus; break ;;
	esac
done

exit 0
