#!/bin/sh DATE=`date +%d.%m.%y/%T` PWD=`pwd` DRUCKER="`basename $PWD`" LOG=$PWD/interfacelog TMPLOG=$PWD/tmpinterfacelog NACHRICHT="/usr/ucb/mail" EMPFAENGER="daemon" DISPATCHER="service@hrz" POOLSERVER="primus" ####das scheint ja nun doch nicht noetig zu sein... ####oder doch??? Manche Jobs kommen mit Laufwerks- ####buchstaben und verlangen damit nach DOS-Passwort- ####pruefung... 7.10.97 DUPLEX=e SEITENZAHL=0 SEITENZAHL_MAL_KOPIEN=0 COPIES=1 NUMDOCS=1 NUMCOPIES=0 GEPRUEFT="nein" GESCHENK="nein" FREI="nein" SEITEN=0 SZVOR=0 SZNACH=0 SZSUM=0 SZN=0 BINPFAD="/var/spool/lpd/bin" ACCTPFAD="/var/spool/lpd/acct" MAILPFAD="/var/spool/lpd/mailtexte" TMPFILE="/var/tmp/druckdaten$$" ACCTPROG=$BINPFAD/pgcnt503 COPIES_CHECK=$BINPFAD/copies_check SEITENZAEHLER=$BINPFAD/seitenzaehler BUCHUNGSPROGRAMM=$BINPFAD/buchung STORNIERUNGSPROGRAMM=$BINPFAD/stornierung ACCTFILE=$ACCTPFAD/prtacctlog STATISTIK=$ACCTPFAD/statistik FEHLBUCHUNG=$ACCTPFAD/buchungsfehler ZAEHLER=$BINPFAD/seitenzaehler CFILEZERLEGEN=$BINPFAD/cfilezerlegen PRUEFPROGRAMM=$BINPFAD/pruefung LEERPS=$BINPFAD/leer.ps DECKBLATTDRUCK () { echo "/F /Courier findfont [120 0 0 120 0 0] makefont def" echo "/hF /Courier-Bold findfont [100 0 0 100 0 0] makefont def" echo ".1 .1 scale 4.8 setlinewidth" echo "F setfont" echo "540 7200 moveto (####) show" echo "540 7080 moveto (#### Druckausgabe fuer Nutzer : $NKZ \(Konto $KONTO\)) show" echo "540 6960 moveto (####) show" echo "540 6840 moveto (#### Herkunft des Druckauftrages: $SYSTEM) show" echo "540 6720 moveto (#### Zeitpunkt des Ausdruckes : $DATE) show" echo "540 6600 moveto (####) show" echo "540 6480 moveto (#### $BUCHUNGSTEXT1) show" echo "540 6360 moveto (#### $BUCHUNGSTEXT2) show" echo "540 6240 moveto (#### $BUCHUNGSTEXT3) show" echo "540 6120 moveto (#### $BUCHUNGSTEXT4) show" echo "540 6000 moveto (#### $BUCHUNGSTEXT5) show" echo "540 5880 moveto (####) show" echo "540 360 moveto (#### $SYSTEM / $DATE) show" echo "540 240 moveto (#### Nutzer: $NKZ \(Konto $KONTO\)) show" #echo "90 neg rotate" #echo "8000 neg 170 moveto (#### Druckausgabe fuer Nutzer: $NKZ \(Konto $KONTO\) vom $SYSTEM / $DATE) show" echo "showpage save restore" } BUCHUNG () { if [ "$DUPLEX" = "e" -o $SEITEN -eq 1 ] then ABFRAGEPREIS=`expr $SEITEN \* $SEITENPREIS_EIN` else ABFRAGEPREIS=`expr $SEITEN \* $SEITENPREIS_ZWEI` fi TRY=5 SLP=5 while [ $TRY -gt 0 ] ; do BUCHUNGSSATZ="`$BUCHUNGSPROGRAMM $KONTO $DRUCKER $SEITEN $ABFRAGEPREIS $DUPLEX n $GRATIS_ANGREIFBAR`" if [ "$BUCHUNGSSATZ" = "rpcfehler" -o "$BUCHUNGSSATZ" = "db-lesefehler" -o "$BUCHUNGSSATZ" = "drucker unbekannt" -o "$BUCHUNGSSATZ" = "nkz unbekannt" -o "$BUCHUNGSSATZ" = "db gelockt" -o "$BUCHUNGSSATZ" = "rpcfehler_verbindung" -o "$BUCHUNGSSATZ" = "rpcfehler_anfrage" ] ; then sleep $SLP TRY=`expr $TRY - 1` else TRY=0 fi done } STORNIERUNG () { if [ "$SZVOR" -ne 0 ] ; then # meh 27.10.98 Versuch Seitenzahl von Interface zu lesen: #SZNACH=0 #while [ $SZNACH -eq 0 ] #do PAGECOUNTER SZNACH=$SZN #SZNACH=`echo $?` #SZNACH=`$SEITENZAEHLER $ZIEL 2>&1` #echo "$SZNACH" | grep connect 2>&1 >/dev/null #if [ $? -eq 0 ] ; then # SZNACH=0 #fi #done #SZSUM=`expr $SZNACH - $SZVOR` #echo "##$DATE:$DRUCKER: Seiten real $NKZ($KONTO)=$SZSUM ($SZVOR-$SZNACH)" >> $ACCTFILE fi if [ "$GESCHENK" = "ja" ] then echo "## $DATE,$NKZ($KONTO),$SEITENZAHL_MAL_KOPIEN frei; Buchung nicht erfolgt" >> $ACCTFILE else SEITEN=$SEITENZAHL_MAL_KOPIEN # BUCHUNG if [ "$DUPLEX" = "e" ] then ABFRAGEPREIS=`expr $SEITENZAHL_MAL_KOPIEN \* $SEITENPREIS_EIN` else ABFRAGEPREIS=`expr $SEITENZAHL_MAL_KOPIEN \* $SEITENPREIS_ZWEI` fi STORNOTEXT="`$STORNIERUNGSPROGRAMM $KONTO $DRUCKER $SEITENZAHL_MAL_KOPIEN $ABFRAGEPREIS $DUPLEX j $GRATIS_ANGREIFBAR`" if [ -z "$STORNOTEXT" -o "$STORNOTEXT" = "rpcfehler" -o "$STORNOTEXT" = "db-lesefehler" -o "$STORNOTEXT" = "drucker unbekannt" -o "$STORNOTEXT" = "nkz unbekannt" -o "$STORNOTEXT" = "db gelockt" -o "$STORNOTEXT" = "mistergebnis" ] then $NACHRICHT -s "zu Fuss stornieren: $STORNOTEXT bei $NKZ($KONTO):$DRUCKER:$SEITENZAHL_MAL_KOPIEN:1:$DUPLEX" $EMPFAENGER < /dev/null >/dev/null 2>&1 echo "## $DATE,$NKZ($KONTO), $SEITENZAHL_MAL_KOPIEN nicht storniert!!!!! ($SZNACH)" >>$ACCTFILE else echo "## $DATE,$NKZ($KONTO), $SEITENZAHL_MAL_KOPIEN ordnungsgemmaess storniert ($SZNACH)" >>$ACCTFILE fi fi } PAGECOUNTER () { # meh 27.10.98 Versuch Seitenzahl von Interface zu lesen: SZN=0 if [ $SEITENABFRAGE -gt 0 ] ; then while [ $SZN -eq 0 ] do SZN=`$SEITENZAEHLER $ZIEL 2>&1` echo "$SZN" | grep connect 2>&1 >/dev/null if [ $? -eq 0 ] ; then SZN=0 fi if [ $SZN -lt 3 ] ; then SZN=0 fi done #echo "##$DATE:$DRUCKER: Pagecounter $SZN" >> $ACCTFILE fi echo "$DATE/$DRUCKER($NKZ): PAGECOUNTER $SZN" >>/var/tmp/seitenabfrage.log return $SZN } while [ $# -gt 0 ] do case $1 in -n) NKZ=$2; shift;; -h) SYSTEM=$2; shift;; -f) ARGFILES="$ARGFILES $2"; shift;; -*) ;; *) ;; esac shift done # meh 11.9.98 HACK: nur kleine Accounts !!! (NT-Falle !) NKZ=`echo $NKZ | tr 'A-Z' 'a-z'` KONTO="$NKZ" ADRESSE="$NKZ" trap 'rm -f $TMPFILE; echo "$DATE: Filter empfing Signal 1 2 3 oder 15 bei \"$NKZ\"! Noch nichts gemacht, Abbruch!" >> $LOG; exit 2' 1 2 3 15 umask 113 ### ### Default-Parametrierung: ### HEIMAT="`cat /etc/resolv.conf | grep domain | cut -d' ' -f2`" TYP="unbekannt" STANDORT="unbekannt" MEDIUM="unbekannt" SEITENPREIS_EIN="5" SEITENPREIS_ZWEI="-1" KANNDUPLEX=0 GRATIS_ANGREIFBAR=0 DRUCKERFAMILIE="andere" VOR_DECKBLATT=0 NACH_DECKBLATT=0 MAXSEITEN=0 FILTER="cat" KONTROLLZEILE="" ZIEL=`echo $DRUCKER | cut -d'_' -f1` JOBSCHACHT="" DECKBLATTSCHACHT="" DECKBLATTABRECHNUNG=0 ABRECHNUNG=1 SEITENABFRAGE=0 POOLDRUCKER=0 ### Parametrierung durch Auslesen von "/etc/drucker_info" oder aus ### "/afs/.tucz/admin/printer/drucker_info" ### ### gesetzt werden (koennen, wenn nicht benoetigt, einfach leer): ### ### 01 HEIMAT (wem gehoert der Drucker? -> hrz.tu-chemnitz.de) ### 02 TYP (ausfuehrliche Beschreibung) ### 03 STANDORT (ausfuehrliche Beschreibung) ### 04 MEDIUM (ausfuehrliche Beschreibung) ### 05 SEITENPREIS_EIN ### 06 SEITENPREIS_ZWEI ### KANNDUPLEX (1, wenn SEITENPREIS_ZWEI != -1) ### 07 GRATIS_ABGREIFBAR (wenn 0 erfolgt Buchung nur auf Nutzereinzahlung) ### 08 DRUCKERFAMILIE (Familien von Druckern: laserjet, qms, axis, apple, andere ### 09 VOR_DECKBLATT (1=wenn nicht unterdrueckt, dann Deckblatt vor dem Job, ### 0=immer ohne) ### 10 NACH_DECKBLATT (1=wenn nicht unterdrueckt, dann Deckblatt nach dem Job, ### 0=immer ohne) ### 11 MAXSEITEN (0=keine Obergrenze fuer Laenge des Ausdruckes) ### 12 FILTER (wenn der Drucker ein spezielles Konvertierungsprogramm benoetigt) ### 13 ZIEL (wenn Hostname des Druckers nicht aus Namen gebildet werden kann) ### 14 KONTROLLZEILE (eine Zeile, auf deren Vorhandensein im File geprueft wird. ### Damit sollen alle Jobs ausser denen eines bestimmten Typs ### vom Druck auf diesem Drucker ausgeschlossen werden. ### 15 JOBSCHACHT (wichtig bei Druckern, wo ein spezielles Format benoetigt wird ### (A3, Formulare)) ### 16 DECKBLATTSCHACHT ### 17 DECKBLATTABRECHNUNG (bei 1 wird das Deckblatt mit berechnet, ### so der Drucker der Abrechnung unterliegt) ### 18 ABRECHNUNG (wenn 0 erfolgt keine Abrechnung) ### 19 WHAT ? ### 20 SEITENABFRAGE (wenn 1 dann Abfrage mittels seitenzaehler - meh 20.11.98) ### 21 POOLDRUCKER (wenn 1 dann "freier Druck" - meh 25.11.98) ### DRINFO=/etc/drucker_info #DRINFO=/etc/drucker_info.exp if [ -r $DRINFO ] then INFOZEILE="`grep \"^$DRUCKER\.\" $DRINFO`" else INFOZEILE="`grep \"^$DRUCKER\.\" /afs/.tucz/admin/printer/drucker_info`" fi if [ -n "$INFOZEILE" ] then HEIMAT="`echo $INFOZEILE | cut -f 1 -d '#' | cut -f 2- -d '.'`" TYP="`echo $INFOZEILE | cut -f 2 -d '#'`" STANDORT="`echo $INFOZEILE | cut -f 3 -d '#'`" MEDIUM="`echo $INFOZEILE | cut -f 4 -d '#'`" SEITENPREIS_EIN="`echo $INFOZEILE | cut -f 5 -d '#'`" SEITENPREIS_ZWEI="`echo $INFOZEILE | cut -f 6 -d '#'`" if [ "$SEITENPREIS_ZWEI" -eq -1 ] then KANNDUPLEX=0 else KANNDUPLEX=1 fi GRATIS_ANGREIFBAR="`echo $INFOZEILE | cut -f 7 -d '#'`" DRUCKERFAMILIE="`echo $INFOZEILE | cut -f 8 -d '#'`" VOR_DECKBLATT="`echo $INFOZEILE | cut -f 9 -d '#'`" NACH_DECKBLATT="`echo $INFOZEILE | cut -f 10 -d '#'`" MAXSEITEN="`echo $INFOZEILE | cut -f 11 -d '#'`" FILTER="`echo $INFOZEILE | cut -f 12 -d '#'`" if [ -z "$FILTER" ] then FILTER=cat fi KONTROLLZEILE="`echo $INFOZEILE | cut -f 13 -d '#'`" ZIEL_FILE="`echo $INFOZEILE | cut -f 14 -d '#'`" if [ -z "$ZIEL_FILE" ] then ZIEL="`echo $DRUCKER | cut -d'_' -f1`" else ZIEL="$ZIEL_FILE" fi JOBSCHACHT="`echo $INFOZEILE | cut -f 15 -d '#'`" DECKBLATTSCHACHT="`echo $INFOZEILE | cut -f 16 -d '#'`" DECKBLATTABRECHNUNG="`echo $INFOZEILE | cut -f 17 -d '#'`" ABRECHNUNG="`echo $INFOZEILE | cut -f 18 -d '#'`" SEITENABFRAGE="`echo $INFOZEILE | cut -f 20 -d '#'`" POOLDRUCKER="`echo $INFOZEILE | cut -f 21 -d '#'`" else $NACHRICHT -s "Keine Info zu \"$DRUCKER\" in \".../drucker_info\"" $EMPFAENGER /dev/null 2>&1 fi ALLG_FILTER="$BINPFAD/hpnpf -x $ZIEL" HPFILTER="$BINPFAD/hpnpf -x $ZIEL" QMSFILTER="$BINPFAD/qef -s $TMPLOG -h $ZIEL" AXISFILTER="$BINPFAD/pros_$DRUCKER" APPLEFILTER="$BINPFAD/hpnpf -x $ZIEL" CFILE=lock JOBNR=999 if [ -r ./lock ] then CFILE="`cat ./lock | grep cf`" JOBNR="`echo $CFILE | cut -c 4-6`" TMPFILE=${TMPFILE}_${DRUCKER}_$JOBNR fi if [ `echo $SYSTEM | grep "\." | wc -l` -eq 0 ] then SYSTEM="`echo $CFILE | cut -c 7-`" fi umask 117 if [ -n "$ARGFILES" ] then cat $ARGFILES > $TMPFILE DRUCKERFAMILIE=lpd-drucker else cat - > $TMPFILE fi umask 113 if [ `echo $DRUCKER | grep raw | wc -l` -ne 0 ] then ABRECHNUNG=0 fi if [ -n "$KONTROLLZEILE" ] then KONTROLLMUSTER="`grep "$KONTROLLZEILE" $TMPFILE`" if [ -z "$KONTROLLMUSTER" ] then $NACHRICHT -s "Ihr Druckjob vom $SYSTEM zum $DRUCKER" $ADRESSE < $MAILPFAD/inhaltsmail >/dev/null 2>&1 $NACHRICHT -s "Missbrauch bei $NKZ von $SYSTEM zum $DRUCKER" $EMPFAENGER /dev/null 2>&1 echo "##Missbrauch##$DATE,$NKZ von $SYSTEM an $DRUCKER" >> $ACCTFILE rm -f $TMPFILE exit 0 fi fi if [ $ABRECHNUNG -eq 1 ] then PC_POOL=`echo $SYSTEM | grep "$POOLSERVER"` if [ -n "$PC_POOL" ] then DOSPRUEFUNGGANZ="ok bei $NKZ" else DOSPRUEFUNGGANZ="`$CFILEZERLEGEN $CFILE`" fi DOSPRUEFUNG="`echo $DOSPRUEFUNGGANZ | cut -d' ' -f1`" DOSNKZ="`echo $DOSPRUEFUNGGANZ | cut -d' ' -f3`" if [ "$DOSPRUEFUNG" = "keine-angaben" ] then $NACHRICHT -s "Problem mit Ihrem Druckjob zum \"$DRUCKER\"" $NKZ <$MAILPFAD/dosmail >/dev/null 2>&1 $NACHRICHT -s "kein NKZ/PW bei $NKZ zum \"$DRUCKER\"" $EMPFAENGER <$CFILE echo "##$DATE: kein NKZ/PW bei $NKZ vom \"$SYSTEM\" zum \"$DRUCKER\", abgelehnt" >> $ACCTFILE rm -f $TMPFILE exit 0 fi if [ "$DOSPRUEFUNG" = "nkz/pw-fehler" ] then $NACHRICHT -s "Problem mit Ihrem Druckjob zum \"$DRUCKER\"" $DOSNKZ <$MAILPFAD/dospwmail >/dev/null 2>&1 $NACHRICHT -s "falsches NKZ/PW bei $NKZ zum \"$DRUCKER\"" $EMPFAENGER < /dev/null echo "$DATE: ##falsches NKZ/PW bei $DOSNKZ vom \"$SYSTEM\" zum \"$DRUCKER\", abgelehnt" >> $ACCTFILE rm -f $TMPFILE exit 0 fi if [ "$DOSPRUEFUNG" = "rpcfehler" -o "$DOSPRUEFUNG" = "db-lesefehler" -o "$DOSPRUEFUNG" = "db-gelockt" ] then GEPRUEFT="ja" KONTO="$DOSNKZ" ADRESSE="$DOSNKZ" echo "##DB-Problem bei $DOSNKZ zum \"$DRUCKER\", durchgelassen" >> $ACCTFILE $NACHRICHT -s "$DOSPREUFUNGGANZ" $EMPFAENGER < /dev/null >/dev/null 2>&1 fi if [ "$DOSPRUEFUNG" = "ok" ] then GEPRUEFT="ja" echo "##DOS-Pruefung ok bei $DOSNKZ zum \"$DRUCKER\", durchgelassen" >> $ACCTFILE KONTO="$DOSNKZ" ADRESSE="$DOSNKZ" fi if [ "$DOSPRUEFUNG" = "normal" ] then GEPRUEFT="nein" fi FREMDKONTOGANZ=`grep "^%%Fremdkonto" $TMPFILE 2>/dev/null | cut -d':' -f2-` if [ -n "$FREMDKONTOGANZ" ] then PRUEFUNG=`grep "^%%Sichtweite:" $TMPFILE 2>/dev/null` PRUEFDATEN=`echo "$PRUEFUNG" | cut -d':' -f2-` FREMDKONTO=`echo "$FREMDKONTOGANZ" | cut -d':' -f1` YPKONTO=`echo "$FREMDKONTOGANZ" | cut -d':' -f2` if [ -n "$PRUEFUNG" ] then $PRUEFPROGRAMM "$TMPFILE" "$PRUEFDATEN" "$FREMDKONTO" RICHTIG=$? else RICHTIG=0 fi if [ $RICHTIG -eq 0 ] then $NACHRICHT -s "Manipulation bei $NKZ ($FREMDKONTO) von $SYSTEM zum $DRUCKER" $EMPFAENGER /dev/null 2>&1 echo "##Manipulation## $DATE, $NKZ von $SYSTEM" >> $ACCTFILE rm $TMPFILE exit 0 fi fi if [ -n "$FREMDKONTO" ] then KONTO="$FREMDKONTO" fi LANGNAME=`echo $SYSTEM | grep '\.'` VONHIER=`echo $SYSTEM | grep $HEIMAT` ### Folgende Bedingung macht es dann, wenn der Hostname nicht langgemacht wird, ### unmoeglich, eine vernuenftige Mailadresse (==Fremdkonto) zu bilden... ### Das ist aber nicht zu aendern. Die Alternative waere, jedesmal, wenn ein ### Fremkonto (YP-Konto) spezifiziert ist, alle Mails an den Kontoinhaber ### zu schicken. Kann aber nicht sinnvoll sein, weil es sich ja dabei offen- ### bar nicht um denjenigen handelt, der wirklich druckt. ### 17.9.97 rok ### gegessen, weil der Langname nun aus dem Namen den cf-Files gewonnen wird ### und nicht aus dem H-Eintrag in demselben, der erst durch den "lpd" lang ### gemacht wurde. if [ -z "$VONHIER" -a -n "$LANGNAME" -a "$GEPRUEFT" = "nein" ] then MAILZIEL="`echo $SYSTEM | cut -d'.' -f2-`" if [ -z "$FREMDKONTO" ] then ADRESSE="$NKZ@$MAILZIEL" echo "##abgelehnt, k. FrKto## $DATE, $NKZ von $SYSTEM" >> $ACCTFILE $NACHRICHT -s "Ihr Druckjob vom $SYSTEM zum $DRUCKER" $ADRESSE < $MAILPFAD/rechtemail >/dev/null 2>&1 rm -f $TMPFILE exit 0 else if [ $YPKONTO -eq 1 ] then ADRESSE="$FREMDKONTO" else ADRESSE="$NKZ@$MAILZIEL" fi fi fi fi ############# if $ABRECHNUNG... # meh 10.11.98: Test auf PJL-Start-Anweisung PJLFILE=1 head -5 $TMPFILE | grep '%-12345X' >/dev/null PJLBEGIN=$? tail -5 $TMPFILE | grep '%-12345X' >/dev/null PJLEND=$? # PJLFILE=0 ist ein PJLFILE ! if [ $PJLBEGIN -ne 0 -o $PJLEND -ne 0 ] ; then PJLFILE=0 fi # meh 28.9.98: Test auf numcopies-Anweisung $COPIES_CHECK <$TMPFILE >/dev/null NUMCOPIES=$? if [ $NUMCOPIES -gt 1 ] ; then echo "##NUMCOPIES=$NUMCOPIES##$DATE,$NKZ von $SYSTEM an $DRUCKER" >> /var/tmp/seitenabfrage.log fi if grep "^%%IncludeFeature: header(off) trailer(off)" $TMPFILE >/dev/null 2>&1 then VOR_DECKBLATT=0 NACH_DECKBLATT=0 fi if grep "^%%IncludeFeature:keindeckblatt" $TMPFILE >/dev/null 2>&1 then VOR_DECKBLATT=0 NACH_DECKBLATT=0 fi if [ "$VOR_DECKBLATT" -ne 0 -o "$NACH_DECKBLATT" -ne 0 ] then DECKBLATT=1 else DECKBLATT=0 fi if [ $KANNDUPLEX -eq 1 ] then #### hier muessen nun alle Moeglichkeiten verewigt werden, mit denen Treiber #### dem Drucker stecken, dass er das Blatt auch noch von hinten vollmalen soll. #### Neue Dinge bekommt man dabei aus dem Druckfile raus, nachdem sich Nutzer #### beschwert haben, dass die Dinge, die sie doppelseitig gedruckt haben, #### als einseitig und damit teurer abgerechnet worden sind. if grep "statusdict begin true setduplexmode false settumble end" $TMPFILE >/dev/null 2>&1 ; then DUPLEX=d elif grep "<> setpagedevice" $TMPFILE >/dev/null 2>&1 ; then DUPLEX=d elif grep "true statusdict /setduplexmode get exec false statusdict /settumble get exec" $TMPFILE >/dev/null 2>&1 ; then DUPLEX=d elif grep "^%%IncludeFeature: duplex ( tumble )" $TMPFILE >/dev/null 2>&1 ; then DUPLEX=t elif grep "statusdict begin true setduplexmode true settumble end" $TMPFILE >/dev/null 2>&1 ; then DUPLEX=t elif grep "<> setpagedevice" $TMPFILE >/dev/null 2>&1 ; then DUPLEX=t elif grep "true statusdict /setduplexmode get exec true statusdict /settumble get exec" $TMPFILE >/dev/null 2>&1 ; then DUPLEX=t elif grep "^%%IncludeFeature: duplex" $TMPFILE >/dev/null 2>&1 ; then DUPLEX=d elif grep "/Duplex true put setpagedevice" $TMPFILE >/dev/null 2>&1 ; then DUPLEX=d fi fi DOC_COPIES=1 JOB_COPIES=1 #meh: Kopien im File ! (Kommando druck !) KOPIENANZAHL="`grep '^%%IncludeFeature: numdocs' $TMPFILE`" >/dev/null 2>&1 if [ -n "$KOPIENANZAHL" ] then NUMDOCS=`echo "$KOPIENANZAHL" | cut -d' ' -f4` echo "##NUMDOCS=$NUMDOCS##$DATE,$NKZ von $SYSTEM an $DRUCKER" >> /var/tmp/seitenabfrage.log fi if [ $ABRECHNUNG -eq 1 ] then JOBDATEN="`$ACCTPROG $TMPFILE`" if [ -z "$JOBDATEN" ] then JOBDATEN="-1 -1" fi SEITENZAHL_MAL_KOPIEN="`echo $JOBDATEN | cut -d' ' -f1`" JOB_COPIES="`echo $JOBDATEN | cut -d' ' -f2`" # meh; 10.11.98; um Berechnungsfehler von pgcnt auszuschliessen: # if [ $SEITENZAHL_MAL_KOPIEN -eq 0 -a $POOLDRUCKER -eq 1 ] # then # head -1 $TMPFILE | grep '^%!' >/dev/null # if [ $? -eq 0 ] ; then # SEITENZAHL_MAL_KOPIEN=1 # head -8 $TMPFILE | $NACHRICHT -s "Druckjob von 0 auf 1 Seite bei $NKZ von $SYSTEM zum $DRUCKER" $EMPFAENGER >/dev/null 2>&1 # fi # fi if [ $MAXSEITEN -ne 0 -a $SEITENZAHL_MAL_KOPIEN -ge $MAXSEITEN ] then $NACHRICHT -s "Ihr Druckjob vom $SYSTEM zum $DRUCKER" $ADRESSE < $MAILPFAD/zulangmail >/dev/null 2>&1 rm -f $TMPFILE exit 0 fi #meh: bei fehlerhafter Berechnung ohne duplex ??? # if [ $SEITENZAHL_MAL_KOPIEN -eq 1 ] # then # DUPLEX=e # fi if [ "$DRUCKERFAMILIE" = qms ] then KOPIENANZAHL="`grep '^%%IncludeFeature: numcopies' $TMPFILE`" >/dev/null 2>&1 if [ -n "$KOPIENANZAHL" ] then DOC_COPIES=`echo "$KOPIENANZAHL" | cut -d' ' -f4` fi fi if [ $NUMDOCS -gt $DOC_COPIES ] ; then DOC_COPIES=$NUMDOCS fi COPIES="`echo $JOBDATEN | cut -d' ' -f2`" if [ "$COPIES" -eq 1 -a "$DOC_COPIES" -gt "$COPIES" ] then COPIES="$DOC_COPIES" fi if [ "$NUMCOPIES" -gt 1 ] ; then SEITENZAHL_MAL_KOPIEN=`expr $SEITENZAHL_MAL_KOPIEN \* $NUMCOPIES` if [ "$COPIES" -eq 1 ] then COPIES="$NUMCOPIES" fi else if [ "$NUMDOCS" -gt 1 ] ; then SEITENZAHL_MAL_KOPIEN=`expr $SEITENZAHL_MAL_KOPIEN \* $NUMDOCS` fi fi if [ $SEITENZAHL_MAL_KOPIEN -eq 0 ] then $NACHRICHT -s "Ihr Druckjob vom $SYSTEM zum $DRUCKER" $ADRESSE < $MAILPFAD/nullseitenmail >/dev/null 2>&1 # head -8 $TMPFILE | $NACHRICHT -s "Druckjob mit 0 Seiten bei $NKZ von $SYSTEM zum $DRUCKER" $EMPFAENGER >/dev/null 2>&1 rm -f $TMPFILE exit 0 fi if [ $DECKBLATT -ne 0 -a $DECKBLATTABRECHNUNG -eq 1 ] then SEITENZAHL_MAL_KOPIEN=`expr $SEITENZAHL_MAL_KOPIEN + 1` fi echo "$DATE,$NKZ($KONTO),$DRUCKER,$SYSTEM,$SEITENZAHL_MAL_KOPIEN,$COPIES,$DUPLEX" >> $ACCTFILE # # Abbuchungssatz: # ^^^^^^^^^^^^^^^ # if [ "$SEITENZAHL_MAL_KOPIEN" -ne -1 ] then SEITEN=$SEITENZAHL_MAL_KOPIEN # BUCHUNG if [ "$DUPLEX" = "e" -o $SEITENZAHL_MAL_KOPIEN -eq 1 ] then ABFRAGEPREIS=`expr $SEITENZAHL_MAL_KOPIEN \* $SEITENPREIS_EIN` else ABFRAGEPREIS=`expr $SEITENZAHL_MAL_KOPIEN \* $SEITENPREIS_ZWEI` fi TRY=5 SLP=5 while [ $TRY -gt 0 ] ; do BUCHUNGSSATZ="`$BUCHUNGSPROGRAMM $KONTO $DRUCKER $SEITENZAHL_MAL_KOPIEN $ABFRAGEPREIS $DUPLEX n $GRATIS_ANGREIFBAR`" if [ "$BUCHUNGSSATZ" = "rpcfehler" -o "$BUCHUNGSSATZ" = "db-lesefehler" -o "$BUCHUNGSSATZ" = "drucker unbekannt" -o "$BUCHUNGSSATZ" = "nkz unbekannt" -o "$BUCHUNGSSATZ" = "db gelockt" -o "$BUCHUNGSSATZ" = "rpcfehler_verbindung" -o "$BUCHUNGSSATZ" = "rpcfehler_anfrage" ] ; then sleep $SLP TRY=`expr $TRY - 1` else TRY=0 fi done else BUCHUNGSSATZ="berechnungsfehler" fi if [ "$BUCHUNGSSATZ" = "rpcfehler" -o "$BUCHUNGSSATZ" = "db-lesefehler" -o "$BUCHUNGSSATZ" = "drucker unbekannt" -o "$BUCHUNGSSATZ" = "nkz unbekannt" -o "$BUCHUNGSSATZ" = "db gelockt" -o "$BUCHUNGSSATZ" = "berechnungsfehler" -o "$BUCHUNGSSATZ" = "rpcfehler_verbindung" -o "$BUCHUNGSSATZ" = "rpcfehler_anfrage" ] then BUCHUNGSTEXT="Problem -> Job ist ggf. geschenkt." echo "$BUCHUNGSPROGRAMM $KONTO $DRUCKER $SEITENZAHL_MAL_KOPIEN $ABFRAGEPREIS $DUPLEX n $GRATIS_ANGREIFBAR" >>$FEHLBUCHUNG $NACHRICHT -s "$BUCHUNGSSATZ bei $NKZ($KONTO):$DRUCKER:$SEITENZAHL_MAL_KOPIEN,$COPIES,$DUPLEX" $EMPFAENGER < $MAILPFAD/datenbankmail >/dev/null 2>&1 GESCHENK="ja" echo "## $DATE,$NKZ($KONTO), $SEITENZAHL_MAL_KOPIEN nicht gebucht" >>$ACCTFILE else if [ "$BUCHUNGSSATZ" = "ueberzogen" ] then $NACHRICHT -s "Ihr Konto ist leer" $ADRESSE < $MAILPFAD/allemail >/dev/null 2>&1 echo "## $DATE,$NKZ($KONTO), $SEITENZAHL_MAL_KOPIEN ungueltig, Geld alle!" >>$ACCTFILE rm -f $TMPFILE exit 2 else if [ "$BUCHUNGSSATZ" = "nullseiten" ] then rm -f $TMPFILE exit 2 else BUCHUNGSTEXT1="Dieser Druckauftrag umfasst $SEITENZAHL_MAL_KOPIEN Seite(n) / $COPIES Exemplar($DUPLEX)." BUCHUNGSTEXT_QMS_1="Die Angaben unter *Version* gelten als Beleg:" if [ `echo "$BUCHUNGSSATZ" | cut -d '#' -f 1` = "keinlimit" ] then FREI="ja" PREIS=`echo $BUCHUNGSSATZ | cut -d '#' -f 2` BUCHUNGSTEXT2="Er wuerde $PREIS DM kosten, aber Ihr Kontingent ist unbegrenzt" BUCHUNGSTEXT3="" BUCHUNGSTEXT4="" BUCHUNGSTEXT5="" BUCHUNGSTEXT_QMS_2="Jobpreis: $PREIS DM / Kontingent unbegrenzt" else PREIS=`echo $BUCHUNGSSATZ | cut -d '#' -f 1` KONTO_ALT=`echo $BUCHUNGSSATZ | cut -d '#' -f 2` KONTO_NEU=`echo $BUCHUNGSSATZ | cut -d '#' -f 3` KREDIT="`echo $KONTO_NEU | grep '-'`" if [ -n "$KREDIT" ] then $NACHRICHT -s "Ihr neuer Kontostand betraegt DM $KONTO_NEU" $ADRESSE < $MAILPFAD/kreditmail >/dev/null 2>&1 fi BUCHUNGSTEXT2="Er kostet Sie $PREIS DM." BUCHUNGSTEXT3="Ihr alter Kontostand war $KONTO_ALT DM," BUCHUNGSTEXT4="der neue betraegt $KONTO_NEU DM." BUCHUNGSTEXT5="Dieses Blatt koennen Sie als Beleg verwenden." BUCHUNGSTEXT_QMS_2="Jobpreis: $PREIS DM / Kontostand: alt = $KONTO_ALT DM ; neu = $KONTO_NEU DM" fi fi fi fi trap 'rm -f $TMPFILE ; echo "$DATE: Filter empfing Signal bei \"$NKZ\"! Stornierung veranlasst. Quit!" >> $LOG; STORNIERUNG; exit 2' 1 2 3 15 fi ########## if $ABRECHNUNG... ### ### ### Hier beginnt der eigentliche Ausdruck ### ### # meh 2.11.98: Abfrage Seitenzahl von Drucker - NUTZUNG SZVOR fuer STORNIERUNG ! if [ $SEITENABFRAGE -gt 0 ] ; then # meh 27.10.98 Versuch Seitenzahl von Interface zu lesen: #while [ $SZVOR -eq 0 ] #do #SZVOR=`$SEITENZAEHLER $ZIEL 2>&1` #echo "$SZVOR" | grep connect 2>&1 >/dev/null #if [ $? -eq 0 ] ; then # SZVOR=0 #fi #done #echo "$DATE/$DRUCKER($NKZ): Beginn SEITENABFRAGE" >>/var/tmp/seitenabfrage.log PAGECOUNTER SZVOR=$SZN #SZVOR=`echo $?` echo "$DATE/$DRUCKER($NKZ): SEITENABFRAGE = $SZVOR" >>/var/tmp/seitenabfrage.log fi case $DRUCKERFAMILIE in lpd-drucker) ###### Beginn Ausgabe fuer Druckerfamilie "lpd-drucker" ###### rm -f $TMPFILE > /dev/null 2>&1 exit 0 ###### Ende Ausgabe fuer Druckerfamilie "lpd-drucker" ######## ;; laserjet) ###### Beginn Ausgabe fuer Druckerfamilie "laserjet" ###### ### Festlegung des Timeout-Wertes, nach Verstreichen dessen die Uebertragung ### zum Drucker abgebrochen wird (Angabe in Sekunden) TIMEOUT=3600 { echo "%-12345X@PJL" ### Hiermit bekaeme man nach jeder Seite die laufende Nummer derselben zurueck. ### Meldung wird bei Geraetestoerungen abgebrochen, nuetzt also nicht viel. #echo "@PJL USTATUS PAGE = ON" ### Meldet den Geraetestatus bei Aenderungen zurueck. ### Wird abgebrochen bei Geraetefehlern, laesst aber deren Ursache erkennen. echo "@PJL USTATUS DEVICE = ON" ### Gibt bei normaler Beendigung die tatsaechliche Seitenzahl zurueck. ### Sehr hilfreich. echo "@PJL USTATUS JOB = ON" ### Job-Beginn (wichtig) echo "@PJL JOB" echo "@PJL SET RESOLUTION = 600" echo "@PJL SET COPIES = 1" echo "%-12345X@PJL ENTER LANGUAGE=POSTSCRIPT" echo "/#copies 1 def" if [ $VOR_DECKBLATT -eq 1 ] then echo "statusdict begin false setduplexmode false settumble end" if [ -n "$DECKBLATTSCHACHT" ] then echo "statusdict begin false settrayswitch $DECKBLATTSCHACHT end" fi ##### DECKBLATT folgendes koennte man eigentlich als Prozedur DECKBLATT () ##### auslagern, aber das funktioniert aus irgendwelchen ##### Gruenden nicht. echo "/F /Courier findfont [120 0 0 120 0 0] makefont def" echo "/hF /Courier-Bold findfont [100 0 0 100 0 0] makefont def" echo ".1 .1 scale 4.8 setlinewidth" echo "F setfont" echo "540 7200 moveto (####) show" echo "540 7080 moveto (#### Druckausgabe fuer Nutzer : $NKZ \(Konto $KONTO\)) show" echo "540 6960 moveto (####) show" echo "540 6840 moveto (#### Herkunft des Druckauftrages: $SYSTEM) show" echo "540 6720 moveto (#### Zeitpunkt des Ausdruckes : $DATE) show" echo "540 6600 moveto (####) show" echo "540 6480 moveto (#### $BUCHUNGSTEXT1) show" echo "540 6360 moveto (#### $BUCHUNGSTEXT2) show" echo "540 6240 moveto (#### $BUCHUNGSTEXT3) show" echo "540 6120 moveto (#### $BUCHUNGSTEXT4) show" echo "540 6000 moveto (#### $BUCHUNGSTEXT5) show" echo "540 5880 moveto (####) show" echo "540 360 moveto (#### $SYSTEM / $DATE) show" echo "540 240 moveto (#### Nutzer: $NKZ \(Konto $KONTO\)) show" #echo "90 neg rotate" #echo "8000 neg 170 moveto (#### Druckausgabe fuer Nutzer: $NKZ \(Konto $KONTO\) vom $SYSTEM / $DATE) show" echo "showpage save restore" fi if [ -n "$JOBSCHACHT" ] then echo "statusdict begin false settrayswitch $JOBSCHACHT end" fi if [ $DUPLEX = "d" ] then echo "statusdict begin true setduplexmode false settumble end" else if [ $DUPLEX = "t" ] then echo "statusdict begin true setduplexmode true settumble end" fi fi #if [ $NUMCOPIES -le 1 ] ; then if [ $NUMDOCS -gt 1 ] ; then echo "/#copies $NUMDOCS def" fi cat $TMPFILE | fgrep -v "%-12345X@PJL EOJ" #else #echo "/#copies $NUMCOPIES def" #$COPIES_CHECK <$TMPFILE 2>/dev/null #fi if [ $NACH_DECKBLATT -eq 1 -o $ZIEL = raffael ] then #meh 30.9.98 1 Kopie Deckblatt testen !!! #echo "&l1H" #echo "/#copies 2 def" #echo "@PJL SET COPIES = 1" echo "/#copies 1 def" #meh: diese Anweisung erzeugt im Seitenzaehler auf raphael 2 Seiten ! echo "statusdict begin true setduplexmode false settumble end" #meh: setzen inputtray per postscript echo "statusdict begin false settrayswitch 2 end" if [ -n "$DECKBLATTSCHACHT" ] then echo "statusdict begin false settrayswitch $DECKBLATTSCHACHT end" fi # diese Anweisung dreht die Seite: damit lesbar ! echo "showpage" echo "/F /Courier findfont [120 0 0 120 0 0] makefont def" #echo "/hF /Courier-Bold findfont [100 0 0 100 0 0] makefont def" echo ".1 .1 scale 4.8 setlinewidth" echo "F setfont" echo "540 7200 moveto (####) show" echo "540 7080 moveto (#### Druckausgabe fuer Nutzer : $NKZ \(Konto $KONTO\)) show" echo "540 6960 moveto (####) show" echo "540 6840 moveto (#### Herkunft des Druckauftrages: $SYSTEM) show" echo "540 6720 moveto (#### Zeitpunkt des Ausdruckes : $DATE) show" echo "540 6600 moveto (####) show" echo "540 6480 moveto (#### $BUCHUNGSTEXT1) show" echo "540 6360 moveto (#### $BUCHUNGSTEXT2) show" echo "540 6240 moveto (#### $BUCHUNGSTEXT3) show" echo "540 6120 moveto (#### $BUCHUNGSTEXT4) show" echo "540 6000 moveto (#### $BUCHUNGSTEXT5) show" echo "540 5880 moveto (####) show" echo "540 360 moveto (#### $SYSTEM / $DATE) show" echo "540 240 moveto (#### Nutzer: $NKZ \(Konto $KONTO\)) show" #echo "90 neg rotate" #echo "8000 neg 170 moveto (#### Druckausgabe fuer Nutzer: $NKZ \(Konto $KONTO\) vom $SYSTEM / $DATE) show" echo "showpage save restore" fi echo -n "" ### Job-Ende (auch wichtig, alle Angaben des Druckers beziehen sich auf diesen ### Rahmen. echo "%-12345X@PJL EOJ" } | $HPFILTER -T $TIMEOUT -E PAGES >rueckmeldung 2>>interfacelog RC=`echo $?` echo "HPFILTER-RC = $RC" >>rueckmeldung if [ $RC -ne 0 ] ; then cat err* >/tmp/err$$ if [ -s /tmp/err$$ ] ; then cat /tmp/err$$ | $NACHRICHT -s "$DRUCKER: RC = $RC" meh fi rm -rf err* /tmp/err$$ fi # meh 27.10.98 Versuch Seitenzahl von Interface zu lesen: if [ $SEITENABFRAGE -gt 0 ] ; then #while [ $SZNACH -eq 0 ] #do #SZNACH=`$SEITENZAEHLER $ZIEL 2>&1` #echo "$SZNACH" | grep connect 2>&1 >/dev/null #if [ $? -eq 0 ] ; then # SZNACH=0 #fi #done PAGECOUNTER SZNACH=$SZN #SZNACH=`echo $?` SZSUM=`expr $SZNACH - $SZVOR` echo "$DATE/$DRUCKER($NKZ): SEITEN = $SZSUM ($SZVOR-$SZNACH)" >>/var/tmp/seitenabfrage.log #echo "##$DATE:$DRUCKER: Seiten real $NKZ($KONTO)=$SZSUM ($SZVOR-$SZNACH)" >> $ACCTFILE fi if [ $ABRECHNUNG -eq 1 ] then trap 'echo "$DATE: Filter empfing Signal bei \"$NKZ\"! Fuer Stornierung zu spaet (Druck fertig)." >> $LOG' 1 2 3 15 ZEIT="`grep JOB-DAUER rueckmeldung | tr '\015' '=' | cut -d= -f2`" ###### ###### Die Bearbeitung von CODE=4.... ist ueberfluessig, da es bei dem LJ 8000 ###### nach einem 40000er Code doch weitergeht mit den Statusmeldungen. hpnpf ###### wurde entsprechend korrigiert. ###### CODE="`grep CODE=4 rueckmeldung | tr '\015' '=' | cut -d= -f2`" ###### ANZEIGE="`grep DISPLAY rueckmeldung`" ###### GEDRUCKT="`grep PAGES rueckmeldung`" LEER=`grep LEER rueckmeldung |tail -1|sed -e 's/=//g'` #LEER="`grep LEER rueckmeldung`" if [ -n "$LEER" ] ; then tail -22 rueckmeldung | $NACHRICHT -s "Kontrolle $DRUCKER: Papier leer ?" $DISPATCHER # $NACHRICHT -s "Kontrolle $DRUCKER: Papier leer ?" $EMPFAENGER /dev/null if [ $? -eq 0 ] ; then A3HACK=YES $NACHRICHT -s "A3-Druck auf raffael" $EMPFAENGER <A3 bei $NKZ($KONTO):$DRUCKER:$SEITENZAHL_MAL_KOPIEN,$COPIES,$DUPLEX END echo "##$DATE: KORREKTUR A4->A3 bei $NKZ($KONTO):$DRUCKER:$SEITENZAHL_MAL_KOPIEN,$COPIES,$DUPLEX" >>$ACCTFILE DRUCKER=${DRUCKER}_a3 echo "$DATE,$NKZ($KONTO),${DRUCKER},$SYSTEM,$SEITENZAHL_MAL_KOPIEN,$COPIES,$DUPLEX" >> $ACCTFILE BUCHUNG SEITENPREIS_EIN=`expr $SEITENPREIS_EIN \* 2` SEITENPREIS_ZWEI=`expr $SEITENPREIS_ZWEI \* 2` fi fi if [ -n "$GEDRUCKT" ] then ### Normales Jobende, man beachte, dass unter "PAGES" die eventuell ### unbedruckte Rueckseite des letzten Blattes in jedem Falle ### mitgezaehlt ist (siehe auch Korrekturroutine). SEITEN=`echo $GEDRUCKT | tr '\015' '=' | cut -d= -f2` if [ -n $SEITEN -a $SEITEN -ne $SZSUM ] ; then SZPLUS=`expr $SEITEN + 1` if [ $SZPLUS -ne $SZSUM ] ; then # meh 9.2.98 Abfrage wegen Fehlerproblemen wiederholen PAGECOUNTER SZNACH=$SZN SZSUM=`expr $SZNACH - $SZVOR` echo "$DATE/$DRUCKER($NKZ): SEITEN = $SZSUM ($SZVOR-$SZNACH)" >>/var/tmp/seitenabfrage.log if [ $SEITEN -ne $SZSUM ] ; then echo "##$DATE:$DRUCKER: Seitenkorrektur $NKZ($KONTO) $SEITEN->$SZSUM($SZVOR-$SZVOR)" >> $ACCTFILE fi fi SEITEN=$SZSUM fi if [ $DECKBLATT -eq 1 -a $DECKBLATTABRECHNUNG -ne 1 -a $SEITEN -gt 1 ] then SEITEN=`expr $SEITEN - 1` #meh: 6.10.98: WICHTIG: bei Titelpage 2seitig $SEITEN -2 !!!! if [ $NACH_DECKBLATT -eq 1 ] ; then SEITEN=`expr $SEITEN - 1` fi fi echo "##$DATE:$DRUCKER: SEITEN fuer $NKZ($KONTO)=$SEITEN($SZNACH), Dauer=$ZEIT s" >> $ACCTFILE STATUS=0 else if [ -n "`echo $ZEIT | grep TIMEOUT`" ] then ### Jobende per Timeout, warum der Drucker so lange bummelt ### ist im Einzelfall rauszubekommen. Bei der Seitenberechnung ### stuetzen wir uns auf die Vorausberechnung. ### Die Uebertragung endet, wenn keine Daten mehr ### auf dem Host vorliegen. SEITEN=$SEITENZAHL_MAL_KOPIEN echo "##$DATE:$DRUCKER: $NKZ($KONTO), Zeit groesser $TIMEOUT s!!" >> $ACCTFILE $NACHRICHT -s "Zeitueberschreitung ($ZEIT s) bei $NKZ($KONTO):$DRUCKER:$SEITENZAHL_MAL_KOPIEN,$COPIES,$DUPLEX" $EMPFAENGER /dev/null 2>&1 $NACHRICHT -s "Ihr Druckjob vom $SYSTEM zum $DRUCKER, timeout = $TIMEOUT s" $ADRESSE < $MAILPFAD/timeoutmail >/dev/null 2>&1 STATUS=0 else if [ $RC -ne 0 ] ; then ### meh: wenn der HPFILTER mit rc=1 kommt, dann werden in der Regel die ### Daten richtig ausgegeben aber keine Interface-Daten geliefert ### also: vertrauen auf die Richtigkeit des Drucks ! echo "##$DATE:$DRUCKER: $NKZ($KONTO), RC=1 nicht storniert, $SEITEN($SZVOR-$SZNACH)" >> $ACCTFILE rm -f $TMPFILE exit 0 else ### Die Uebertragung zum Drucker ist durch unbekannte ### Ursache zum Erliegen gekommen; "hpnpf" ist abgestuerzt. SEITEN=$SEITENZAHL_MAL_KOPIEN echo "##$DATE:$DRUCKER: $NKZ($KONTO), Zeit groesser $TIMEOUT s!!" >> $ACCTFILE $NACHRICHT -s "Uebertragungsabbruch bei $NKZ($KONTO):$DRUCKER:$SEITENZAHL_MAL_KOPIEN,$COPIES,$DUPLEX" $EMPFAENGER /dev/null 2>&1 $NACHRICHT -s "Abbruch Ihres Druckjobs vom $SYSTEM zum $DRUCKER" $ADRESSE < $MAILPFAD/abbruchmail >/dev/null 2>&1 STATUS=1 fi fi fi if [ $STATUS != 0 ] then ### Das hat bei den HP-Druckern dann nur noch rein theoretische Bedeutung. ### Zu einer Stronierung kommt es dann nur noch bei Job-Abbruch (cancel) ### oder im Zuge einer Korrektur. Sollten reine Uebertragungsfehler ### auftreten, so duerfte sich dies per Timeout aeussern. ### ### Vorsichtshalber reagieren wir hier aber auf Abstuerze des "hpnpf". CODE="`grep CODE= rueckmeldung | tail -1 | cut -d= -f2`" CODECLASS=`expr substr "$CODE" 1 2` if [ $CODECLASS = "40" ] ; then STORNIERUNG STATUS=0 echo "##$DATE:$DRUCKER: $SEITEN Seiten fuer $NKZ($KONTO) in den Sand gesetzt" >> $ACCTFILE else echo "##$DATE:$DRUCKER: $CODE - keine Nachbetrachtung" >> $ACCTFILE fi else ### HPFILTER nicht o.k.: keine Auswertung drin ### normale Nachbetrachtung, eventuell Korrektur: if [ $SEITEN -ge 0 -a \( $DUPLEX = 'e' -a $SEITEN -gt `expr $SEITENZAHL_MAL_KOPIEN + 2` -o $DUPLEX != 'e' -a `expr $SEITEN - 2` -gt `expr $SEITENZAHL_MAL_KOPIEN + $COPIES` -o $DUPLEX = 'e' -a $SEITENZAHL_MAL_KOPIEN -gt `expr $SEITEN + 2` -o $DUPLEX != 'e' -a $SEITENZAHL_MAL_KOPIEN -gt `expr $SEITEN + 2` \) ] then echo "$DATE,$NKZ($KONTO),$DRUCKER,$SYSTEM,$SEITEN,1,$DUPLEX" >> $STATISTIK $NACHRICHT -s "KORREKTUR bei $NKZ($KONTO):$DRUCKER:$SEITENZAHL_MAL_KOPIEN,$COPIES,$DUPLEX->$SEITEN" $EMPFAENGER /dev/null 2>&1 echo "##$DATE: KORREKTUR bei $NKZ($KONTO):$DRUCKER:$SEITENZAHL_MAL_KOPIEN,$COPIES,$DUPLEX->$SEITEN" >>$ACCTFILE if [ "$FREI" = "nein" ] then STORNIERUNG if [ $SEITEN -ne 0 ] then if [ "$DUPLEX" = "e" ] then ABFRAGEPREIS=`expr $SEITEN \* $SEITENPREIS_EIN` else ABFRAGEPREIS=`expr $SEITEN \* $SEITENPREIS_ZWEI` fi TRY=5 SLP=5 while [ $TRY -gt 0 ] ; do BUCHUNGSSATZ=`$BUCHUNGSPROGRAMM $KONTO $DRUCKER $SEITEN $ABFRAGEPREIS $DUPLEX j $GRATIS_ANGREIFBAR` if [ "$BUCHUNGSSATZ" = "rpcfehler" -o "$BUCHUNGSSATZ" = "db-lesefehler" -o "$BUCHUNGSSATZ" = "db gelockt" -o "$BUCHUNGSSATZ" = "rpcfehler_verbindung" -o "$BUCHUNGSSATZ" = "rpcfehler_anfrage" ] ; then sleep $SLP TRY=`expr $TRY - 1` else TRY=0 fi done if [ "$BUCHUNGSSATZ" = "rpcfehler" -o "$BUCHUNGSSATZ" = "db-lesefehler" -o "$BUCHUNGSSATZ" = "drucker unbekannt" -o "$BUCHUNGSSATZ" = "nkz unbekannt" -o "$BUCHUNGSSATZ" = "db gelockt" -o "$BUCHUNGSSATZ" = "rpcfehler_verbindung" -o "$BUCHUNGSSATZ" = "rpcfehler_anfrage" -o -z "$BUCHUNGSSATZ" ] then $NACHRICHT -s "$BUCHUNGSSATZ bei KORREKTUR fuer $NKZ($KONTO):$DRUCKER:$SEITEN:$COPIES:$DUPLEX" $EMPFAENGER < $MAILPFAD/datenbankmail >/dev/null 2>&1 echo "## $DATE,$NKZ($KONTO), KORREKTUR nicht gebucht" >>$ACCTFILE echo "$BUCHUNGSPROGRAMM $KONTO $DRUCKER $SEITEN $ABFRAGEPREIS $DUPLEX j $GRATIS_ANGREIFBAR" >>$FEHLBUCHUNG else PREIS=`echo $BUCHUNGSSATZ | cut -d '#' -f 1` KONTO_ALT=`echo $BUCHUNGSSATZ | cut -d '#' -f 2` KONTO_NEU=`echo $BUCHUNGSSATZ | cut -d '#' -f 3` KREDIT="`echo $KONTO_NEU | grep '-'`" if [ -n "$KREDIT" ] then cp $MAILPFAD/korrekturmail_mit_kredit_werte /tmp/korrekturmail_mit_kredit$$ echo "" >> /tmp/korrekturmail_mit_kredit$$ echo "Ihr alter Kontostand war: $KONTO_ALT DM" >> /tmp/korrekturmail_mit_kredit$$ echo "Der Auftrag kostete : $PREIS DM" >> /tmp/korrekturmail_mit_kredit$$ echo "Ihr neuer Kontostand ist: $KONTO_NEU DM" >> /tmp/korrekturmail_mit_kredit$$ echo "" >> /tmp/korrekturmail_mit_kredit$$ $NACHRICHT -s "Jobdaten-Korrektur(\"$DRUCKER\"): von $SEITENZAHL_MAL_KOPIEN->$SEITEN S. insges." $ADRESSE < /tmp/korrekturmail_mit_kredit$$ >/dev/null 2>&1 rm -f /tmp/korrekturmail_mit_kredit$$ else cp $MAILPFAD/korrekturmail_werte /tmp/korrekturmail$$ echo "" >> /tmp/korrekturmail$$ echo "Ihr alter Kontostand war: $KONTO_ALT DM" >> /tmp/korrekturmail$$ echo "Der Auftrag kostete : $PREIS DM" >> /tmp/korrekturmail$$ echo "Ihr neuer Kontostand ist: $KONTO_NEU DM" >> /tmp/korrekturmail$$ echo "" >> /tmp/korrekturmail$$ $NACHRICHT -s "Jobdaten-Korrektur(\"$DRUCKER\"): von $SEITENZAHL_MAL_KOPIEN->$SEITEN S. insges." $ADRESSE < /tmp/korrekturmail$$ >/dev/null 2>&1 rm -f /tmp/korrekturmail$$ fi fi fi fi else echo "$DATE,$NKZ($KONTO),$DRUCKER,$SYSTEM,$SEITENZAHL_MAL_KOPIEN,1,$DUPLEX" >> $STATISTIK fi fi #Kontrollausgabe if [ $RC -ne 0 ] ; then echo "##$DATE:$DRUCKER: $NKZ($KONTO), RC=1, $STATUS " >> $ACCTFILE fi fi ########### if $ABRECHNUNG.... ###### Ende Ausgabe fuer Druckerfamilie "laserjet" ###### ;; qms) ###### Beginn Ausgabe fuer Druckerfamilie "qms" ###### { if [ $ABRECHNUNG -eq 1 ] then echo "%!" echo "%%Date: $DATE" echo "%%For: $NKZ (Konto $KONTO)" echo "%%CopyRight: $BUCHUNGSTEXT_QMS_1" echo "%%Version: $BUCHUNGSTEXT_QMS_2" else echo "%!" echo "%%Date: $DATE" echo "%%For: $NKZ" echo "%%CopyRight: Dieser Drucker unterliegt keiner Abrechnung" fi ############# if $ABRECHNUNG... #echo "/#copies 1 def" #####geht am QMS nicht... #if [ $NUMCOPIES -le 1 ] ; then cat $TMPFILE #else #echo "/#copies $NUMCOPIES def" #$COPIES_CHECK <$TMPFILE 2>/dev/null #fi } | $QMSFILTER STATUS=$? if [ $ABRECHNUNG -eq 1 ] then trap 'echo "$DATE: Filter empfing Signal bei \"$NKZ\"! Fuer Stornierung zu spaet (Druck fertig)." >> $LOG' 1 2 3 15 if [ $STATUS = 0 ] then echo "$DATE,$NKZ($KONTO),$DRUCKER,$SYSTEM,$SEITENZAHL_MAL_KOPIEN,$COPIES,$DUPLEX" >> $STATISTIK else STORNIERUNG fi fi ######### if $ABRECHNUNG... ###### Ende Ausgabe fuer Druckerfamilie "qms" ###### ;; axis) ###### Beginn Ausgabe fuer Druckerfamilie "axis" ###### { echo "%!" echo "/#copies 1 def" if [ $VOR_DECKBLATT -eq 1 ] then echo "statusdict begin false setduplexmode false settumble end" if [ -n "$DECKBLATTSCHACHT" ] then echo "statusdict begin false settrayswitch $DECKBLATTSCHACHT end" fi echo "/F /Courier findfont [120 0 0 120 0 0] makefont def" echo "/hF /Courier-Bold findfont [100 0 0 100 0 0] makefont def" echo ".1 .1 scale 4.8 setlinewidth" echo "F setfont" echo "540 7200 moveto (####) show" echo "540 7080 moveto (#### Druckausgabe fuer Nutzer : $NKZ \(Konto $KONTO\)) show" echo "540 6960 moveto (####) show" echo "540 6840 moveto (#### Herkunft des Druckauftrages: $SYSTEM) show" echo "540 6720 moveto (#### Zeitpunkt des Ausdruckes : $DATE) show" echo "540 6600 moveto (####) show" echo "540 6480 moveto (#### $BUCHUNGSTEXT1) show" echo "540 6360 moveto (#### $BUCHUNGSTEXT2) show" echo "540 6240 moveto (#### $BUCHUNGSTEXT3) show" echo "540 6120 moveto (#### $BUCHUNGSTEXT4) show" echo "540 6000 moveto (#### $BUCHUNGSTEXT5) show" echo "540 5880 moveto (####) show" echo "540 360 moveto (#### $SYSTEM / $DATE) show" echo "540 240 moveto (#### Nutzer: $NKZ \(Konto $KONTO\)) show" #echo "90 neg rotate" #echo "8000 neg 170 moveto (#### Druckausgabe fuer Nutzer: $NKZ \(Konto $KONTO\) vom $SYSTEM / $DATE) show" echo "showpage save restore" fi #echo "statusdict begin false settrayswitch 1 setpapertray end" if [ $DUPLEX = "d" ] then echo "statusdict begin true setduplexmode false settumble end" else if [ $DUPLEX = "t" ] then echo "statusdict begin true setduplexmode true settumble end" fi fi #if [ $NUMCOPIES -le 1 ] ; then if [ $NUMDOCS -gt 1 ] ; then echo "/#copies $NUMDOCS def" fi cat $TMPFILE #else #echo "/#copies $NUMCOPIES def" #$COPIES_CHECK <$TMPFILE 2>/dev/null #fi if [ $NACH_DECKBLATT -eq 1 ] then echo "statusdict begin false setduplexmode false settumble end" if [ -n "$DECKBLATTSCHACHT" ] then echo "statusdict begin false settrayswitch $DECKBLATTSCHACHT end" fi echo "/F /Courier findfont [120 0 0 120 0 0] makefont def" echo "/hF /Courier-Bold findfont [100 0 0 100 0 0] makefont def" echo ".1 .1 scale 4.8 setlinewidth" echo "F setfont" echo "540 7200 moveto (####) show" echo "540 7080 moveto (#### Druckausgabe fuer Nutzer : $NKZ \(Konto $KONTO\)) show" echo "540 6960 moveto (####) show" echo "540 6840 moveto (#### Herkunft des Druckauftrages: $SYSTEM) show" echo "540 6720 moveto (#### Zeitpunkt des Ausdruckes : $DATE) show" echo "540 6600 moveto (####) show" echo "540 6480 moveto (#### $BUCHUNGSTEXT1) show" echo "540 6360 moveto (#### $BUCHUNGSTEXT2) show" echo "540 6240 moveto (#### $BUCHUNGSTEXT3) show" echo "540 6120 moveto (#### $BUCHUNGSTEXT4) show" echo "540 6000 moveto (#### $BUCHUNGSTEXT5) show" echo "540 5880 moveto (####) show" echo "540 360 moveto (#### $SYSTEM / $DATE) show" echo "540 240 moveto (#### Nutzer: $NKZ \(Konto $KONTO\)) show" #echo "90 neg rotate" #echo "8000 neg 170 moveto (#### Druckausgabe fuer Nutzer: $NKZ \(Konto $KONTO\) vom $SYSTEM / $DATE) show" echo "showpage save restore" fi echo  } | $AXISFILTER STATUS=$? if [ $ABRECHNUNG -eq 1 ] then trap 'echo "$DATE: Filter empfing Signal bei \"$NKZ\"! Fuer Stornierung zu spaet (Druck fertig)." >> $LOG' 1 2 3 15 if [ $STATUS = 0 ] then echo "$DATE,$NKZ($KONTO),$DRUCKER,$SYSTEM,$SEITENZAHL_MAL_KOPIEN,$COPIES,$DUPLEX" >> $STATISTIK else STORNIERUNG fi fi ####### if $ABRECHNUNG... ###### Ende Ausgabe fuer Druckerfamilie "axis" ###### ;; andere) ###### Beginn Ausgabe fuer Druckerfamilie "andere" ###### { if [ $VOR_DECKBLATT -eq 1 ] then echo "statusdict begin false setduplexmode false settumble end" if [ -n "$DECKBLATTSCHACHT" ] then echo "statusdict begin false settrayswitch $DECKBLATTSCHACHT end" fi echo "/F /Courier findfont [120 0 0 120 0 0] makefont def" echo "/hF /Courier-Bold findfont [100 0 0 100 0 0] makefont def" echo ".1 .1 scale 4.8 setlinewidth" echo "F setfont" echo "540 7200 moveto (####) show" echo "540 7080 moveto (#### Druckausgabe fuer Nutzer : $NKZ \(Konto $KONTO\)) show" echo "540 6960 moveto (####) show" echo "540 6840 moveto (#### Herkunft des Druckauftrages: $SYSTEM) show" echo "540 6720 moveto (#### Zeitpunkt des Ausdruckes : $DATE) show" echo "540 6600 moveto (####) show" echo "540 6480 moveto (#### $BUCHUNGSTEXT1) show" echo "540 6360 moveto (#### $BUCHUNGSTEXT2) show" echo "540 6240 moveto (#### $BUCHUNGSTEXT3) show" echo "540 6120 moveto (#### $BUCHUNGSTEXT4) show" echo "540 6000 moveto (#### $BUCHUNGSTEXT5) show" echo "540 5880 moveto (####) show" echo "540 360 moveto (#### $SYSTEM / $DATE) show" echo "540 240 moveto (#### Nutzer: $NKZ \(Konto $KONTO\)) show" #echo "90 neg rotate" #echo "8000 neg 170 moveto (#### Druckausgabe fuer Nutzer: $NKZ \(Konto $KONTO\) vom $SYSTEM / $DATE) show" echo "showpage save restore" fi #if [ $NUMCOPIES -le 1 ] ; then if [ $NUMDOCS -gt 1 ] ; then echo "/#copies $NUMDOCS def" fi cat $TMPFILE #else #echo "/#copies $NUMCOPIES def" #$COPIES_CHECK <$TMPFILE 2>/dev/null #fi if [ $NACH_DECKBLATT -eq 1 ] then echo "statusdict begin false setduplexmode false settumble end" if [ -n "$DECKBLATTSCHACHT" ] then echo "statusdict begin false settrayswitch $DECKBLATTSCHACHT end" fi echo "/F /Courier findfont [120 0 0 120 0 0] makefont def" echo "/hF /Courier-Bold findfont [100 0 0 100 0 0] makefont def" echo ".1 .1 scale 4.8 setlinewidth" echo "F setfont" echo "540 7200 moveto (####) show" echo "540 7080 moveto (#### Druckausgabe fuer Nutzer : $NKZ \(Konto $KONTO\)) show" echo "540 6960 moveto (####) show" echo "540 6840 moveto (#### Herkunft des Druckauftrages: $SYSTEM) show" echo "540 6720 moveto (#### Zeitpunkt des Ausdruckes : $DATE) show" echo "540 6600 moveto (####) show" echo "540 6480 moveto (#### $BUCHUNGSTEXT1) show" echo "540 6360 moveto (#### $BUCHUNGSTEXT2) show" echo "540 6240 moveto (#### $BUCHUNGSTEXT3) show" echo "540 6120 moveto (#### $BUCHUNGSTEXT4) show" echo "540 6000 moveto (#### $BUCHUNGSTEXT5) show" echo "540 5880 moveto (####) show" echo "540 360 moveto (#### $SYSTEM / $DATE) show" echo "540 240 moveto (#### Nutzer: $NKZ \(Konto $KONTO\)) show" #echo "90 neg rotate" #echo "8000 neg 170 moveto (#### Druckausgabe fuer Nutzer: $NKZ \(Konto $KONTO\) vom $SYSTEM / $DATE) show" echo "showpage save restore" fi echo  } | $FILTER | $ALLG_FILTER STATUS=$? #echo "HPFILTER-RC = $STATUS" >>rueckmeldung if [ $STATUS -ne 0 ] ; then $NACHRICHT -s "$DRUCKER: RC = $STATUS" meh >$ACCTFILE #$ALLG_FILTER -x $DRUCKER <$LEERPS #fi PAGECOUNTER SZNACH=$SZN #SZNACH=`echo $?` SZSUM=`expr $SZNACH - $SZVOR` echo "$DATE/$DRUCKER($NKZ): SEITEN = $SZSUM ($SZVOR-$SZNACH)" >>/var/tmp/seitenabfrage.log #echo "##$DATE:$DRUCKER: Seiten real $NKZ($KONTO)=$SZSUM ($SZVOR-$SZNACH)" >> $ACCTFILE fi if [ $SEITENABFRAGE -eq 2 ] ; then echo "##$DATE:$DRUCKER: Seiten vor Ausgabe $NKZ($KONTO)=$SZVOR" >> $ACCTFILE fi if [ $ABRECHNUNG -eq 1 ] then trap 'echo "$DATE: Filter empfing Signal bei \"$NKZ\"! Fuer Stornierung zu spaet (Druck fertig)." >> $LOG' 1 2 3 15 if [ $STATUS = 0 ] then echo "$DATE,$NKZ($KONTO),$DRUCKER,$SYSTEM,$SEITENZAHL_MAL_KOPIEN,$COPIES,$DUPLEX" >> $STATISTIK else STORNIERUNG fi fi ######### if $ABRECHNUNG... STATUS=0 ###### Ende Ausgabe fuer Druckerfamilie "andere" ###### ;; apple) ###### Beginn Ausgabe fuer Druckerfamilie "apple" ###### { echo "%!" echo "/#copies 1 def" if [ $VOR_DECKBLATT -eq 1 ] then if [ -n "$DECKBLATTSCHACHT" ] ### probieren, unklar, ob then ### der apple das mag... echo "statusdict begin false settrayswitch $DECKBLATTSCHACHT end" fi echo "/F /Courier findfont [120 0 0 120 0 0] makefont def" echo "/hF /Courier-Bold findfont [100 0 0 100 0 0] makefont def" echo ".1 .1 scale 4.8 setlinewidth" echo "F setfont" echo "540 7200 moveto (####) show" echo "540 7080 moveto (#### Druckausgabe fuer Nutzer : $NKZ \(Konto $KONTO\)) show" echo "540 6960 moveto (####) show" echo "540 6840 moveto (#### Herkunft des Druckauftrages: $SYSTEM) show" echo "540 6720 moveto (#### Zeitpunkt des Ausdruckes : $DATE) show" echo "540 6600 moveto (####) show" echo "540 6480 moveto (#### $BUCHUNGSTEXT1) show" echo "540 6360 moveto (#### $BUCHUNGSTEXT2) show" echo "540 6240 moveto (#### $BUCHUNGSTEXT3) show" echo "540 6120 moveto (#### $BUCHUNGSTEXT4) show" echo "540 6000 moveto (#### $BUCHUNGSTEXT5) show" echo "540 5880 moveto (####) show" echo "540 360 moveto (#### $SYSTEM / $DATE) show" echo "540 240 moveto (#### Nutzer: $NKZ \(Konto $KONTO\)) show" #echo "90 neg rotate" #echo "8000 neg 170 moveto (#### Druckausgabe fuer Nutzer: $NKZ \(Konto $KONTO\) vom $SYSTEM / $DATE) show" echo "showpage save restore" fi #if [ $NUMCOPIES -le 1 ] ; then if [ $NUMDOCS -gt 1 ] ; then echo "/#copies $NUMDOCS def" fi cat $TMPFILE #else #echo "/#copies $NUMCOPIES def" #$COPIES_CHECK <$TMPFILE 2>/dev/null #fi if [ $NACH_DECKBLATT -eq 1 ] then if [ -n "$DECKBLATTSCHACHT" ] then echo "statusdict begin false settrayswitch $DECKBLATTSCHACHT end" fi echo "/F /Courier findfont [120 0 0 120 0 0] makefont def" echo "/hF /Courier-Bold findfont [100 0 0 100 0 0] makefont def" echo ".1 .1 scale 4.8 setlinewidth" echo "F setfont" echo "540 7200 moveto (####) show" echo "540 7080 moveto (#### Druckausgabe fuer Nutzer : $NKZ \(Konto $KONTO\)) show" echo "540 6960 moveto (####) show" echo "540 6840 moveto (#### Herkunft des Druckauftrages: $SYSTEM) show" echo "540 6720 moveto (#### Zeitpunkt des Ausdruckes : $DATE) show" echo "540 6600 moveto (####) show" echo "540 6480 moveto (#### $BUCHUNGSTEXT1) show" echo "540 6360 moveto (#### $BUCHUNGSTEXT2) show" echo "540 6240 moveto (#### $BUCHUNGSTEXT3) show" echo "540 6120 moveto (#### $BUCHUNGSTEXT4) show" echo "540 6000 moveto (#### $BUCHUNGSTEXT5) show" echo "540 5880 moveto (####) show" echo "540 360 moveto (#### $SYSTEM / $DATE) show" echo "540 240 moveto (#### Nutzer: $NKZ \(Konto $KONTO\)) show" #echo "90 neg rotate" #echo "8000 neg 170 moveto (#### Druckausgabe fuer Nutzer: $NKZ \(Konto $KONTO\) vom $SYSTEM / $DATE) show" echo "showpage save restore" fi } | $APPLEFILTER 2>>$LOG STATUS=$? if [ $ABRECHNUNG -eq 1 ] then trap 'echo "$DATE: Filter empfing Signal bei \"$NKZ\"! Fuer Stornierung zu spaet (Druck fertig)." >> $LOG' 1 2 3 15 ### das ist wohl auch etwas mutig !!! if [ $STATUS = 0 ] then echo "$DATE,$NKZ($KONTO),$DRUCKER,$SYSTEM,$SEITENZAHL_MAL_KOPIEN,$COPIES,$DUPLEX" >> $STATISTIK else STORNIERUNG fi fi ######### if $ABRECHNUNG ###### Ende Ausgabe fuer Druckerfamilie "apple" ###### ;; esac rm -f $TMPFILE > /dev/null 2>&1 exit $STATUS