\documentclass{article}
\usepackage{a4wide,url,graphicx,float,hyperref,german}
\parindent=0pt
\pagestyle{empty}

\begin{document}
{\bf Diplomarbeit DA-22 || 2004-06-05}\\
{\bf Dr. H. H"ogl}, $<$Hubert.Hoegl@fh-augsburg.de$>$

\smallskip

\begin{center}
{\bf Eine XML-basierte Beschreibungssprache f"ur User-Interfaces auf
    kleinen alphanumerischen Displays mit 20 x 4 Zeichen.}\\
\end{center}

\smallskip

\hrule

\smallskip

Diese Arbeit st"utzt sich auf Software, die ich vor einigen Jahren zur
bequemen Spezifikation von User-Interfaces geschrieben habe. Zum
einen handelt es sich um die Beschreibungssprache "`MEL"', mit der man
Men"ustrukturen auf kleinen LCD-Displays beschreiben kann. Programme
in dieser Sprache werden mit einem Compiler auf einen Bytecode
abgebildet, der dann von einem Mikroprozessor ausgef"uhrt wird. An den
Prozessor ist das LCD Display geschaltet, das dann die Men"us anzeigt.
Ausserdem sind einige Tasten vorhanden, mit denen man die Navigation
und die Eingabe von Werten erledigen kann. Der Interpreter "`MEX"',
der den Bytecode auf dem Mikroprozessor ausf"uhrt, ist in C
geschrieben.  Der folgende Quelltext zeigt einen kleinen Ausschnitt
aus einem MEL Programm.

\begin{verbatim}
(menu-line 
   (menu-id luftk1 )
   (format
         (string 
            (blink    off)
            (value    'sw_rueck_max')
            (access   ro)
            (update   0)
         ) 
         (hfill 0)     
         (float
            (blink    off)
            (type     sii.f)
            (access   rw)
            (update   3)
            (min      '18.0')
            (max      '23.0')
            (step     '0.1')
            (default  '20.0')
            (var      'm_sw_rueck_max')
         )
   )
)
\end{verbatim}

Der Ausschnitt beschreibt genau eine Zeile der Anzeige, die wie folgt aussieht:

\begin{verbatim}
sw_rueck_max.....20.0
\end{verbatim}

Die momentane Syntax der Sprache MEL verwendet eine LISP-"ahnliche
Klammerung. In Zukunft - das wird Ihre Aufgabe sein - wird die Syntax
als eine XML-Anwendung beschrieben werden. Diese Sprache wird dann
MEL2 genannt werden.

Ihre Aufgaben sind:

\begin{itemize}
\item Definition des XML Formates f"ur MEL2

\item Programmierung eines Compilers f"ur MEL2. Dieser Compiler wird
  in der Sprache {\em Python} programmiert werden. N"ahere
  Informationen zu Python finden Sie unter \url{http://www.python.org}.

\item Programmierung eines LCD-Simulators, damit man die erstellten
  Men"ustrukturen sofort auf dem Entwicklungsrechner "uberpr"ufen kann.

\item Programmierung eines MEL-Debuggers.

\end{itemize}

Genauere Informationen zu MEL und MEX entnehmen Sie bitte der 
Dokumentation \url{mel.html} und \url{mex.html}.

\medskip

Im folgenden sind einige Fotos einer beispielhaften Men"usteuerung aus
\url{menu.m} zu sehen. Positionsangaben schreibe ich als Paar (Zeile,
Zeichen), die Zeilen gehen von 1 bis 4, die Zeichen von 1 bis 20:

\begin{enumerate}
\item Das Top-Level Men"u. Am linken Rand sieht man an (2,1) den
  Pfeil, der die momentan aktive Zeile markiert. An der Stelle (1,17)
  ist ein Stern ({\tt *}) zu sehen, der angibt, dass die aktive Zeile nur 
  lesbare Komponenten enth"alt. Untermen"us werden am rechten Rand
  durch ein {\tt >} Symbol markiert. Dr"uckt man auf so einer Zeile
  auf den "`nach rechts"' Navigationsknopf, dann "offnet sich das 
  Untermen"u.  Die Zahl an der Stelle (1,19) ist die momentan aktive
  Zeile. Das Plus-Zeichen an (1,20) sagt aus, dass es nach der
  aktuellen Zeile eine weitere Zeile zum Ansehen gibt. Wenn man auf
  der letzten Men"uzeile steht, dann wird ein Ausrufezeichen angezeigt
  -- oder gar kein Zeichen, falls das Men"u weniger als drei Zeilen hat.

\includegraphics[width=6cm]{l2.jpg}

Auf der ersten Zeile steht links immer der Name des Men"us. 

\item Hier hat sich das "`Status"' Untermen"u ge"offnet. Man sieht,
  dass man es wieder mit mehreren Untermen"us zu tun hat.

\includegraphics[width=6cm]{l3.jpg}

\item Das CAN Statusmen"u enth"alt zwei ganze Zahlen als Ausgabewerte.
Man beachte, dass der Men"uname aus zwei Teilnamen zusammengesetzt
ist, die durch einen Punkt getrennt sind ({\tt Status.CAN}).

\includegraphics[width=6cm]{l4.jpg}

\item Hier sieht man ein Optionsfeld. Das Feld ist nur lesbar. Das
  Programm bestimmt, ob ein {\tt Ein} oder {\tt Aus} angezeigt wird.

\includegraphics[width=6cm]{l5.jpg}

\item Die Zeilenmarkierung (Pfeil) steht auf der letzten Zeile
  (Ausrufezeichen!).

\includegraphics[width=6cm]{l6.jpg}

\item  Diese zwei Werte im Parameter-Men"u "`Luftk"uhler"' sind
  Eingabewerte (angezeigt durch den Doppelpunkt). Die Werte k"onnen
  ein Vorzeichen, zwei Ziffern vor dem Dezimalpunkt und eine Ziffer 
  nach dem Dezimalpunkt haben. Das ist das sogenannte "`{\tt sii.f}"'
  Format. 

\includegraphics[width=6cm]{l7.jpg}

\item Ein anderes Parametermen"u. Der Zeilencursor (Pfeil) steht auf
  der letzten Zeile (5!).

\includegraphics[width=6cm]{l12.jpg}

\item  Das Sensormen"u zeigt nur-lesbare Werte an (in diesem Fall
  Temperaturen).

\includegraphics[width=6cm]{l8.jpg}

\item Dieses Men"u zeigt mehrere Eingabefelder vom Typ "`Switchbox"'. 
Jeder Unterstrich {\tt \_} entspricht einem Bit, das auf {\tt 0} (das
ist der Unterstrich) oder {\tt 1} gesetzt werden kann. Jeder
Leistungsausgang wird durch ein Bit dargestellt.

\includegraphics[width=6cm]{l9.jpg}

\item Bei diesem Men"ueintrag wird die Uhr gesetzt.

\includegraphics[width=6cm]{l10.jpg}


\item Auch beliebige Texte lassen sich darstellen.

\includegraphics[width=6cm]{l11.jpg}


\end{enumerate}

\end{document}
