PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Pst Cantt Chart



Lex_83
12-05-2009, 08:42
Hallo,

ich möchte ein Gant chart einbauen.

Ich habe dazu den Code aus dem pstricks-doc.pdf in eine extra datei kopiert und sie mittels \include{gantchart} eingebunden.

Wenn ich sie vor \begin{document} einbinde erhalte ich


./gantchart.tex:8:Missing \begin{document}. \newif\ifPstGantt@
./gantchart.tex:10:Undefined control sequence. \define
./gantchart.tex:10:Missing \begin{document}. \define@
./gantchart.tex:12:You can't use `\spacefactor' in vertical mode. \@
./gantchart.tex:12:Missing $ inserted. \@
./gantchart.tex:12:Missing \begin{document}. \@
...

Wenn ich es nach \begin{document} einbinde erhalte ich:


./gantchart.tex:10:Undefined control sequence. \define
./gantchart.tex:12:You can't use `\spacefactor' in vertical mode. \@
./gantchart.tex:12:Missing $ inserted. \@
./gantchart.tex:12:You can't use `macro parameter character #' in math mode. \@nameuse{PstGantt@ChartShowIntervals#
./gantchart.tex:12:Extra }, or forgotten $. \@nameuse{PstGantt@ChartShowIntervals#1}}
./gantchart.tex:13:Missing $ inserted.
...

Kann mir jemand helfen, wie ich das zum laufen bekomme?

Gruß Axel

voss
12-05-2009, 09:00
ich möchte ein Gant chart einbauen.

Ich habe dazu den Code aus dem pstricks-doc.pdf in eine extra datei kopiert und sie mittels \include{gantchart} eingebunden.


While ( true ) {
B E I S P I E L
}

Herbert

Lex_83
12-05-2009, 09:29
Minimalbeispiel:


\documentclass[a4paper,10pt,tablecaptionabove]{scrartcl}

\usepackage[T1]{fontenc} % Einstellung fÃŒr Deutsche Texte
\usepackage[utf8]{inputenc}
\usepackage[english, ngerman]{babel}
\usepackage{rotating} % Seitenausrichtung
\usepackage{mathrsfs,amssymb} % Mathematischer Formelsatz
\usepackage[intlimits]{empheq} %Laed auch ansmath - intlimits setzt Grenzen Ueber und unter die Intergal-, Summen-, ... zeichen
\usepackage{upgreek} %Gerade grichsiche Buchstaben
\usepackage{hyperref} % Verweise in der Pdf-Datei
\usepackage{vmargin} % Definition der SeitenrÀnder
% \setmarginsrb{2.0cm}{1.5cm}{2.0cm}{2.0cm}%
% {0.4cm}{0.5cm}{0.9cm}{0.5cm}
\usepackage{graphicx} % Packet zur Darstellung von Bildern
\usepackage{subfig} % Erlaubt zwei Bilder nebeneinadner
\setlength{\parindent}{0pt} % Kein Einschub am Absatzanfang
\setlength{\parskip}{10pt plus 4pt minus 2pt} % Zwischenraum zwischen den Absaetze
\usepackage[automark]{scrpage2} % Definition der Kopf- und Fusszeilen
\pagestyle{scrheadings}
\cfoot[]{\pagemark}
\rohead[]{}
\chead{}
\lohead[]{}
\usepackage{listings} %Einbindung von Programsprachen
\usepackage{array} %Kombinierte Ausrichtungen in Tabellen
\usepackage{ragged2e} %Kombinierte Ausrichtungen in Tabellen
\usepackage{enumerate} % Ermoeglicht weitere Aufzaehlungszeichen
\usepackage[svgnames,table]{xcolor} % Einbinden von mehreren Farben
\usepackage{pict2e} % Einbinden von Zeichnungen aus Latex
\usepackage{tikz} % Einbinden von Zeichnungen aus Latex
\usetikzlibrary{shapes} % Andere Formen fuer tikz
\captionsetup{format=hang,singlelinecheck=false}% Formatierung der Bildunterschriften
\usepackage{url} % Darstellen von Emailadressen
\urlstyle{sf} % Stil der Emailadresse
\usepackage{longtable} % Tabellen ueber mehrere Seiten
\renewcommand{\floatpagefraction}{.6} % vorher: .5 - Soviel Prozent einer Seite muessen Bild sein damit sie eine float page wird
\renewcommand{\textfraction}{.15} % vorher: .2 - Soviel Text muss auf einer Seite mindestens noch erscheinen
\usepackage{bibgerm} % Deutsches Lit-verzeichnis
\usepackage{ulem} % Unterstrichene Zeilen koennen umgebrochen werden
\usepackage{booktabs} % Schoenere Tabellenabstaende

\usepackage{multirow}
\usepackage{pst-tree}
\usepackage{pst-node}
\usepackage{tabulary}
\usepackage[left]{eurosym}

\begin{document}

\include{gantchart}

\end{document}


gantchart.tex :

% Parameters definition
% =================
% Intervals to show?
\newif\ifPstGantt@ChartShowIntervals
\define@key{psset}{ChartShowIntervals}[true]{%
\@nameuse{PstGantt@ChartShowIntervals#1}}
% Style for the tasks
\define@key{psset}{TaskStyle}{\edef\PstGantt@TaskS tyle{#1}}
% Name for unit interval
\define@key{psset}{ChartUnitIntervalName}{%
\edef\PstGantt@ChartUnitIntervalName{#1}}
% Name for basic unit
\define@key{psset}{ChartUnitBasicIntervalName}{%
\edef\PstGantt@ChartUnitBasicIntervalName{#1}}
% Unit interval for the tasks
% (7 for a week, 30 for a month, etc.)
% Warning: define it before ?TaskUnitType?!
\define@key{psset}{TaskUnitIntervalValue}{%
\pst@getint{#1}{\PstGantt@TaskUnitIntervalValue}}
% Unit type for the tasks
% (?UnitIntervalName? or ?UnitBasicIntervalName?)
\define@key{psset}{TaskUnitType}{%
\edef\PstGantt@TaskUnitValue{#1}%
% Validation of the parameter
\ifx\PstGantt@TaskUnitValue\PstGantt@ChartUnitInte rvalName
\edef\PstGantt@TaskUnitValue{%
\PstGantt@TaskUnitIntervalValue}%
\else
\ifx\PstGantt@TaskUnitValue%
\PstGantt@ChartUnitBasicIntervalName
\def\PstGantt@TaskUnitValue{1}%
\else
{\@pstrickserr{GanttTaskUnitType must be
?\PstGantt@ChartUnitIntervalName?
or ?\PstGantt@ChartUnitBasicIntervalName?
(and not ?\PstGantt@TaskUnitValue?)}\@eha}%
\fi
\fi}
% Outside label for the tasks
\define@key{psset}{TaskOutsideLabel}{%
\def\PstGantt@TaskOutsideLabel{#1}}
% Inside label for the tasks
\define@key{psset}{TaskInsideLabel}{%
\def\PstGantt@TaskInsideLabel{#1}}
% Maximum outside size label for the tasks
% (in unit ?TaskUnitType? !)
\define@key{psset}{TaskOutsideLabelMaxSize}{%
\pst@getint{#1}{\PstGantt@TaskOutsideLabelMaxSize} }
% Default values
% ===========
% Don?t show intervals, default task style, unit for tasks
% is a week (so 7 days), no outside and inside labels
\setkeys{psset}{%
ChartShowIntervals=false,TaskStyle=TaskStyleDefaul t,
ChartUnitIntervalName=Week,ChartUnitBasicIntervalN ame=Day,
TaskUnitIntervalValue=7,TaskUnitType=Week,TaskOuts ideLabel=,
TaskInsideLabel=,TaskOutsideLabelMaxSize=0}
% Task default style is yellow background
\newpsstyle{TaskStyleDefault}{fillstyle=solid,fill color=yellow}
% The environment PstGanttChart
% =========================
% Syntax:\PstGanttChart[parameters]{Nb of tasks}{Nb of days}
% \endPstGanttChart
% or
% \begin{PstGanttChart}[parameters]{Nb of tasks}{Nb of days}
% \end{PstGanttChart}
\def\PstGanttChart{\def\pst@par{}\pst@object{PstGa nttChart}}
\def\PstGanttChart@i#1#2{%
\bgroup
\setkeys{psset}{unit=0.1}%
\use@par% Assignment of local parameters
%
% ?pspicture? environment
\pst@cnta=\PstGantt@TaskOutsideLabelMaxSize
\multiply\pst@cnta\PstGantt@TaskUnitValue
%
\pst@cntb=#1
\multiply\pst@cntb by 5
\advance\pst@cntb\@ne
%
\pst@cntc=#2
\multiply\pst@cntc\PstGantt@TaskUnitValue
\advance\pst@cntc\tw@
%
\ifPstGantt@ChartShowIntervals
\pspicture(-\pst@cnta,-\pst@cntb)(\pst@cntc,\@two)
\else
\pspicture(-\pst@cnta,-\pst@cntb)(\pst@cntc,\z@)
\fi
\psframe(\z@,-\pst@cntb)(\pst@cntc,\z@)
%
\ifPstGantt@ChartShowIntervals
% We will show the intervals
\pst@cnta=#2
\multiply\pst@cnta\PstGantt@TaskUnitValue
\divide\pst@cnta\PstGantt@TaskUnitIntervalValue
\advance\pst@cnta\@ne
%
\pst@cntb=#1
\multiply\pst@cntb by 5
\advance\pst@cntb\@ne
%
\pst@dima=\PstGantt@TaskUnitIntervalValue\p@
\divide\pst@dima\tw@
\advance\pst@dima\@ne\p@
%
\multido{\iInterval=\@ne+\@ne,
\iIntervalPos=\@ne+
\PstGantt@TaskUnitIntervalValue,
\rIntervalPos=\pst@number{\pst@dima}+%
\PstGantt@TaskUnitIntervalValue}{\pst@cnta}{%
\ifnum\iInterval=\pst@cnta
\psline(\iIntervalPos,\z@)(\iIntervalPos,1.5)
\psline[linestyle=dotted](\iIntervalPos,-\pst@cntb)
(\iIntervalPos,\z@)
\else
\rput(\rIntervalPos,\@ne){%
\PstGantt@ChartUnitIntervalName{} \iInterval}
Writing high-level macros: Examples 210
\psline(\iIntervalPos,\z@)(\iIntervalPos,1.5)
\psline[linestyle=dotted](\iIntervalPos,-\pst@cntb)
(\iIntervalPos,\z@)
\fi}
\fi}
\def\endPstGanttChart{%
\endpspicture % End of ?pspicture? environment
\egroup}
% The macro \PstGanttTask
% ====================
\newcount\PstGantt@TaskCnt
\PstGantt@TaskCnt=\z@
% Syntax: \PstGanttTask[parameters]{Start}{Length}
\def\PstGanttTask{\def\pst@par{}\pst@object{PstGan ttTask}}
\def\PstGanttTask@i#1#2{%
\advance\PstGantt@TaskCnt\m@ne % To increment globally
\bgroup
\use@par% Assignment of local parameters
% Frame
\pst@cnta=\PstGantt@TaskUnitValue
\multiply\pst@cnta by #1
\advance\pst@cnta\@ne
%
\pst@cntb=\PstGantt@TaskUnitValue
\multiply\pst@cntb by #2
\advance\pst@cntb\pst@cnta
%
\pst@cntc=\PstGantt@TaskCnt
\multiply\pst@cntc by 5
%
\pst@cntd=\pst@cntc
\advance\pst@cntd by 4
%
\psframe[style=\PstGantt@TaskStyle](\pst@cnta,\pst@cntc)
(\pst@cntb,\pst@cntd)
% Inside label
\ifx\PstGantt@TaskInsideLabel\@empty
\else
\pst@dima=\pst@cnta\p@
\advance\pst@dima\pst@cntb\p@
\divide\pst@dima\tw@
%
\pst@dimb=\pst@cntc\p@
\advance\pst@dimb\pst@cntd\p@
\divide\pst@dimb\tw@
%
\rput(\pst@number{\pst@dima},\pst@number{\pst@dimb }){%
\PstGantt@TaskInsideLabel}
\fi
% Outside label
\ifx\PstGantt@TaskOutsideLabel\@empty
\else
\pst@dima=\pst@cntc\p@
\advance\pst@dima\pst@cntd\p@
\divide\pst@dima\tw@
\rput[r](-1.5,\pst@number{\pst@dima}){%
\PstGantt@TaskOutsideLabel}
\fi
\egroup}




Fehler:

./gantchart.tex:5:Undefined control sequence. \define
./gantchart.tex:6:You can't use `macro parameter character #' in horizontal mode. \@nameuse{PstGantt@ChartShowIntervals#
./gantchart.tex:8:Undefined control sequence. \define
./gantchart.tex:8:Illegal parameter number in definition of \PstGantt. ...set}{TaskStyle}{\edef\PstGantt@TaskStyle{#1
./gantchart.tex:10:Undefined control sequence. \define
./gantchart.tex:11:Illegal parameter number in definition of \PstGantt. \edef\PstGantt@ChartUnitIntervalName{#1
./gantchart.tex:13:Undefined control sequence. \define
./gantchart.tex:14:Illegal parameter number in definition of \PstGantt. \edef\PstGantt@ChartUnitBasicIntervalName{#1

voss
12-05-2009, 09:46
Minimalbeispiel:

na ja ... eigentlich kannst du doch selber darauf kommen, dass fast alle
Pakete überflüssig für das Minimalbeispiel sind ...

dann bleibt nämlich nur das übrig:


\documentclass{scrartcl}
\usepackage{pst-node}
\makeatletter
\input{gantchart}
\makeatother
\begin{document}

foo

\end{document}


\include ist für Kapitel gedacht.

Herbert

Lex_83
12-05-2009, 10:08
na ja ... eigentlich kannst du doch selber darauf kommen, dass fast alle
Pakete überflüssig für das Minimalbeispiel sind ...
Herbert

richtig... Ich wollte sie nur einfügen, falls es irgendwelche komplikationen zwischen einzelnen Paketen gibt...

Du bringst mich aber auf eine andere Frage : Ich habe bisher alle eigenen .tex Datein (ausgelagerte Header, Kapitel, ...) mit \include eingebunden und hatte bisher nie Probleme...
Was ging da vor sich?

Auf jeden Fall schon mal vielen Dank...
Gruß Axel

voss
12-05-2009, 10:41
richtig... Ich wollte sie nur einfügen, falls es irgendwelche komplikationen zwischen einzelnen Paketen gibt...

Du bringst mich aber auf eine andere Frage : Ich habe bisher alle eigenen .tex Datein (ausgelagerte Header, Kapitel, ...) mit \include eingebunden und hatte bisher nie Probleme...
Was ging da vor sich?


\include fängt immer eine neue Seite an und eignet sich _nicht_ für reinen
Code, sondern für alles, was einem Kapitel entspricht. Muss also _nach_
\begin{document} kommen. \input kann überall stehen und setzt die Datei einfach
an die Stelle, wo input steht.

Herbert

Lex_83
12-05-2009, 10:48
Mit dem Beispiel aus der pstricks-doc

Aber er will immernoch nicht...


\documentclass[a4paper,10pt,tablecaptionabove]{scrartcl}

\usepackage[T1]{fontenc} % Einstellung fuer Deutsche Texte
\usepackage[utf8]{inputenc}
\usepackage[english, ngerman]{babel}
\usepackage{rotating} % Seitenausrichtung

\usepackage{mathrsfs,amssymb} % Mathematischer Formelsatz
\usepackage[intlimits]{empheq} %Laed auch ansmath - intlimits setzt Grenzen ueber und unter die Intergal-, Summen-, ... zeichen
\usepackage{upgreek} %Gerade grichsiche Buchstaben
\usepackage{hyperref} % Verweise in der Pdf-Datei
\usepackage{vmargin} % Definition der Seitenraender
% \setmarginsrb{2.0cm}{1.5cm}{2.0cm}{2.0cm}%
% {0.4cm}{0.5cm}{0.9cm}{0.5cm}
% \usepackage{setspace} %Ein-Einhalb zeilig
% \onehalfspacing
\usepackage{graphicx} % Packet zur Darstellung von Bildern
\usepackage{subfig} % Erlaubt zwei Bilder nebeneinadner
\setlength{\parindent}{0pt} % Kein Einschub am Absatzanfang
\setlength{\parskip}{10pt plus 4pt minus 2pt} % Zwischenraum zwischen den Absaetze
\usepackage[automark]{scrpage2} % Definition der Kopf- und Fusszeilen
\pagestyle{scrheadings}
\cfoot[]{\pagemark}
\rohead[]{}
\chead{}
\lohead[]{}
\usepackage{array} %Kombinierte Ausrichtungen in Tabellen
\usepackage{ragged2e}
\usepackage{enumerate} % Ermoeglicht weitere Aufzaehlungszeichen
\usepackage[svgnames,table]{xcolor} % Einbinden von mehreren Farben
\usepackage{pict2e} % Einbinden von Zeichnungen aus Latex
\usepackage{tikz} % Einbinden von Zeichnungen aus Latex
\usetikzlibrary{shapes} % Andere Formen fuer tikz
\captionsetup{format=hang,singlelinecheck=false}% Formatierung der Bildunterschriften
\usepackage{url} % Darstellen von Emailadressen
\urlstyle{sf} % Stil der Emailadresse
\usepackage{longtable} % Tabellen ueber mehrere Seiten
\renewcommand{\floatpagefraction}{.6} % vorher: .5 - Soviel Prozent einer Seite muessen Bild sein damit sie eine float page wird
\renewcommand{\textfraction}{.15} % vorher: .2 - Soviel Text muss auf einer Seite mindestens noch erscheinen
\usepackage{bibgerm} % Deutsches Lit-verzeichnis
\usepackage{ulem} % Unterstrichene Zeilen koennen umgebrochen werden
\usepackage{booktabs} % Schoenere TabellenabstÀnde
\usepackage{multirow}
\usepackage{pst-tree}
\usepackage{pst-node}
\usepackage{tabulary}
\usepackage[left]{eurosym}
\makeatletter
\input{gantchart}
\makeatother
%opening
% \title{}
% \author{}

\begin{document}
\newpsstyle{Important}{fillstyle=solid,fillcolor=r ed}
\begin{PstGanttChart}[unit=2,TaskOutsideLabelMaxSize=1,ChartShowInterval s=true]{5}{7}
\PstGanttTask[TaskOutsideLabel={Task 1}]{0}{3}
\PstGanttTask[TaskOutsideLabel={Task 2},TaskUnitType=Day]{15}{3} % 3 days starting at day 15
\PstGanttTask[TaskStyle=Important,TaskOutsideLabel={Task 3},
TaskInsideLabel={\Large\textcolor{white}{\textbf{I mportant}}}]{2}{5}
\PstGanttTask[TaskStyle=NotImportant,TaskOutsideLabel={Task 4}]{4}{2}
\PstGanttTask[TaskOutsideLabel={Task 5}]{5}{2}
\end{PstGanttChart}

foo
\end{document}

Folgender Fehler:


[LaTeX] test2.tex => test2.dvi (latex)
[LaTeX] finished with exit status 1
test2.tex:0: seems you are using a constant headheight.
test2.tex:57:Package xkeyval Error: `unit' undefined in families `psset'. ...elMaxSize=1,ChartShowIntervals=true]{5}{7}
test2.tex:57:Graphics parameter `TaskOutsideLabelMaxSize' not defined.. ...elMaxSize=1,ChartShowIntervals=true]{5}{7}
test2.tex:57:Graphics parameter `ChartShowIntervals' not defined.. ...elMaxSize=1,ChartShowIntervals=true]{5}{7}
test2.tex:58:Graphics parameter `TaskOutsideLabel' not defined.. ...GanttTask[TaskOutsideLabel={Task 1}]{0}{3}
test2.tex:59:Graphics parameter `TaskOutsideLabel' not defined.. ...ideLabel={Task 2},TaskUnitType=Day]{15}{3}
test2.tex:59:Graphics parameter `TaskUnitType' not defined.. ...ideLabel={Task 2},TaskUnitType=Day]{15}{3}
test2.tex:61:Graphics parameter `TaskStyle' not defined.. ...xtcolor{white}{\textbf{Important}}}]{2}{5}
test2.tex:61:Graphics parameter `TaskOutsideLabel' not defined.. ...xtcolor{white}{\textbf{Important}}}]{2}{5}
test2.tex:61:Graphics parameter `TaskInsideLabel' not defined.. ...xtcolor{white}{\textbf{Important}}}]{2}{5}
test2.tex:62:Graphics parameter `TaskStyle' not defined.. ...Important,TaskOutsideLabel={Task 4}]{4}{2}
test2.tex:62:Graphics parameter `TaskOutsideLabel' not defined.. ...Important,TaskOutsideLabel={Task 4}]{4}{2}
test2.tex:63:Graphics parameter `TaskOutsideLabel' not defined.. ...GanttTask[TaskOutsideLabel={Task 5}]{5}{2}
test2.tex:64:Overfull \hbox (2474.7483pt too wide) in paragraph
test2.tex:0:Overfull \vbox (807.8229pt too high) has occurred while \output is active []
[LaTeX] 12 errors, 1 warning, 2 badboxes
[Clean] Nothing to clean for gantchart.tex

Ich glaube die höheren Dinge in Tex sind doch noch zu hoch für mich :(

voss
12-05-2009, 11:08
Mit dem Beispiel aus der pstricks-doc

Aber er will immernoch nicht...



dein ganttchart verwendet noch die alte Syntax von keyval. Nimm
http://voss.homedns.org/packages/pst-gantt/pst-gantt.tex

statt \input{gantchart} machst du dann \input{pst-gantt} oder du holst dir
auch die pst-gantt.sty, dann kannst du einfach \usepackage{pst-gantt}
machen. Musst aber vorher deine Datenbank aktualisieren, wenn du
es als Paket einbindest. NotImportant als Stil fehlte in deinem Beispiel.
Ich bekomme hiermit den Anhng:


\documentclass[a4paper,10pt,tablecaptionabove]{scrartcl}
\usepackage{pst-gantt}
\usepackage{multido}

\begin{document}
\newpsstyle{Important}{fillstyle=solid,fillcolor=r ed}
\newpsstyle{NotImportant}{fillstyle=solid,fillcolo r=red}

\begin{PstGanttChart}[unit=2,TaskOutsideLabelMaxSize=1,ChartShowInterval s=true]{5}{7}
\PstGanttTask[TaskOutsideLabel={Task 1}]{0}{3}
\PstGanttTask[TaskOutsideLabel={Task 2},TaskUnitType=Day]{15}{3} % 3 days starting at day 15
\PstGanttTask[TaskStyle=Important,TaskOutsideLabel={Task 3},
TaskInsideLabel={\Large\textcolor{white}{\textbf{I mportant}}}]{2}{5}
\PstGanttTask[TaskStyle=NotImportant,TaskOutsideLabel={Task 4}]{4}{2}
\PstGanttTask[TaskOutsideLabel={Task 5}]{5}{2}
\end{PstGanttChart}

\end{document}


Herbert

Lex_83
12-05-2009, 13:59
Coole Sache! Jetzt klappt es. Vielen Dank.

Aber gleich noch eine Frage : Ich arbeite mit Jahren als Zeitleiste. Ist es dabei möglich einfach noch jeweils eine gepunktet Linie für die Quartale zu erzeugen? Oben soll halt nur Jahr 1 | jahr 2 ... stehen Bei den Task dann aber noch eine senkrechte Linie zur besseren Übersicht.

Gruß
Axel

voss
12-05-2009, 15:08
Aber gleich noch eine Frage : Ich arbeite mit Jahren als Zeitleiste. Ist es dabei möglich einfach noch jeweils eine gepunktet Linie für die Quartale zu erzeugen? Oben soll halt nur Jahr 1 | jahr 2 ... stehen Bei den Task dann aber noch eine senkrechte Linie zur besseren Übersicht.

muss mal sehen. Habe das PAket gerade verbessert, mit dem Ergebnis, dass
jetzt gar nichts mehr geht :D
Vielleicht morgen

Herbert

Lex_83
12-05-2009, 15:47
muss mal sehen. Habe das PAket gerade verbessert, mit dem Ergebnis, dass
jetzt gar nichts mehr geht :D
Vielleicht morgen

Herbert

Dann stehe ich ja wenigstens nicht alleine vor Problemen :) (Auch wenn sie bei Dir auf einem anderen Niveau sind)

voss
13-05-2009, 06:53
Dann stehe ich ja wenigstens nicht alleine vor Problemen :) (Auch wenn sie bei Dir auf einem anderen Niveau sind)

Fehler ist Fehler, da interessiert das Niveau nicht ;)

http://voss.homedns.org/packages/pst-gantt/

die Doku enthält einige Beispiele. Du solltest auch nochmal die
pst-gantt.tex und *,sty gleich erneuern. Da sind kleinere Änderungen drin.

Herbert