summaryrefslogtreecommitdiffstats
path: root/ue1/protokoll
diff options
context:
space:
mode:
Diffstat (limited to 'ue1/protokoll')
-rw-r--r--ue1/protokoll/ClassDiagram1.pngbin0 -> 45422 bytes
-rw-r--r--ue1/protokoll/Makefile19
-rw-r--r--ue1/protokoll/fancyheadings.sty166
-rw-r--r--ue1/protokoll/imgsynth.vppbin0 -> 53886 bytes
-rw-r--r--ue1/protokoll/oop_prot.sty222
-rw-r--r--ue1/protokoll/protokoll.tex226
6 files changed, 633 insertions, 0 deletions
diff --git a/ue1/protokoll/ClassDiagram1.png b/ue1/protokoll/ClassDiagram1.png
new file mode 100644
index 0000000..8347d6f
--- /dev/null
+++ b/ue1/protokoll/ClassDiagram1.png
Binary files differ
diff --git a/ue1/protokoll/Makefile b/ue1/protokoll/Makefile
new file mode 100644
index 0000000..a56bff6
--- /dev/null
+++ b/ue1/protokoll/Makefile
@@ -0,0 +1,19 @@
1# Makefile for protokoll
2# Author: Manuel Mausz (0728348)
3# Created: 14.04.2009
4
5TEXFILE= protokoll.tex
6PDFFILE= $(shell echo $(TEXFILE) | sed -e 's/\.tex$$/\.pdf/')
7PDFLATEX= pdflatex
8TMPDIR= tmp
9
10all: tex
11
12tex:
13 @echo $(PDFFILE)" lala"
14 @mkdir -p $(TMPDIR)
15 @$(PDFLATEX) -interaction=nonstopmode -output-directory=$(TMPDIR) $(TEXFILE)
16 @mv $(TMPDIR)/$(PDFFILE) ../
17 @rm -rf $(TMPDIR)
18
19# vim600: noet sw=8 ts=8
diff --git a/ue1/protokoll/fancyheadings.sty b/ue1/protokoll/fancyheadings.sty
new file mode 100644
index 0000000..c1e706e
--- /dev/null
+++ b/ue1/protokoll/fancyheadings.sty
@@ -0,0 +1,166 @@
1% fancyheadings.sty version 1.94
2% Fancy headers and footers.
3% Piet van Oostrum, Dept of Computer Science, University of Utrecht
4% Padualaan 14, P.O. Box 80.089, 3508 TB Utrecht, The Netherlands
5% Telephone: +31 30 2531806. Email: piet@cs.ruu.nl
6% Sep 16, 1994
7% version 1.4: Correction for use with \reversemargin
8% Sep 29, 1994:
9% version 1.5: Added the \iftopfloat, \ifbotfloat and \iffloatpage commands
10% Oct 4, 1994:
11% version 1.6: Reset single spacing in headers/footers for use with
12% setspace.sty or doublespace.sty
13% Oct 4, 1994:
14% version 1.7: changed \let\@mkboth\markboth to
15% \def\@mkboth{\protect\markboth} to make it more robust
16% Dec 5, 1994:
17% version 1.8: corrections for amsbook/amsart: define \@chapapp and (more
18% importantly) use the \chapter/sectionmark definitions from ps@headings if
19% they exist (which should be true for all standard classes).
20% May 31, 1995:
21% version 1.9: The proposed \renewcommand{\headrulewidth}{\iffloatpage...
22% construction in the doc did not work properly with the fancyplain style.
23% June 1, 1995:
24% version 1.91: The definition of \@mkboth wasn't restored on subsequent
25% \pagestyle{fancy}'s.
26% June 1, 1995:
27% version 1.92: The sequence \pagestyle{fancyplain} \pagestyle{plain}
28% \pagestyle{fancy} would erroneously select the plain version.
29% June 1, 1995:
30% version 1.93: \fancypagestyle command added.
31% Dec 11, 1995:
32% version 1.94: suggested by Conrad Hughes <chughes@maths.tcd.ie>
33% CJCH, Dec 11, 1995: added \footruleskip to allow control over footrule
34% position (old hardcoded value of .3\normalbaselineskip is far too high
35% when used with very small footer fonts).
36% Jan 31, 1996:
37% version 1.95: call \@normalsize in the reset code if that is defined,
38% otherwise \normalsize.
39% this is to solve a problem with ucthesis.cls, as this doesn't
40% define \@currsize. Unfortunately for latex209 calling \normalsize doesn't
41% work as this is optimized to do very little, so there \@normalsize should
42% be called. Hopefully this code works for all versions of LaTeX known to
43% mankind.
44
45\let\fancy@def\gdef
46\def\lhead{\@ifnextchar[{\@xlhead}{\@ylhead}}
47\def\@xlhead[#1]#2{\fancy@def\@elhead{#1}\fancy@def\@olhead{#2}}
48\def\@ylhead#1{\fancy@def\@elhead{#1}\fancy@def\@olhead{#1}}
49
50\def\chead{\@ifnextchar[{\@xchead}{\@ychead}}
51\def\@xchead[#1]#2{\fancy@def\@echead{#1}\fancy@def\@ochead{#2}}
52\def\@ychead#1{\fancy@def\@echead{#1}\fancy@def\@ochead{#1}}
53
54\def\rhead{\@ifnextchar[{\@xrhead}{\@yrhead}}
55\def\@xrhead[#1]#2{\fancy@def\@erhead{#1}\fancy@def\@orhead{#2}}
56\def\@yrhead#1{\fancy@def\@erhead{#1}\fancy@def\@orhead{#1}}
57
58\def\lfoot{\@ifnextchar[{\@xlfoot}{\@ylfoot}}
59\def\@xlfoot[#1]#2{\fancy@def\@elfoot{#1}\fancy@def\@olfoot{#2}}
60\def\@ylfoot#1{\fancy@def\@elfoot{#1}\fancy@def\@olfoot{#1}}
61
62\def\cfoot{\@ifnextchar[{\@xcfoot}{\@ycfoot}}
63\def\@xcfoot[#1]#2{\fancy@def\@ecfoot{#1}\fancy@def\@ocfoot{#2}}
64\def\@ycfoot#1{\fancy@def\@ecfoot{#1}\fancy@def\@ocfoot{#1}}
65
66\def\rfoot{\@ifnextchar[{\@xrfoot}{\@yrfoot}}
67\def\@xrfoot[#1]#2{\fancy@def\@erfoot{#1}\fancy@def\@orfoot{#2}}
68\def\@yrfoot#1{\fancy@def\@erfoot{#1}\fancy@def\@orfoot{#1}}
69
70\newdimen\headrulewidth
71\newdimen\footrulewidth
72\newdimen\plainheadrulewidth
73\newdimen\plainfootrulewidth
74\newdimen\headwidth
75\newdimen\footruleskip
76\newif\if@fancyplain \@fancyplainfalse
77\def\fancyplain#1#2{\if@fancyplain#1\else#2\fi}
78
79% Command to reset various things in the headers:
80% a.o. single spacing (taken from setspace.sty)
81% and the catcode of ^^M (so that epsf files in the header work if a
82% verbatim crosses a page boundary)
83\def\fancy@reset{\restorecr
84 \def\baselinestretch{1}%
85 \ifx\undefined\@newbaseline% NFSS not present; 2.09 or 2e
86 \ifx\@normalsize\undefined \normalsize % for ucthesis.cls
87 \else \@normalsize \fi
88 \else% NFSS (2.09) present
89 \@newbaseline%
90 \fi}
91
92% Initialization of the head and foot text.
93
94\headrulewidth 0.4pt
95\footrulewidth\z@
96\plainheadrulewidth\z@
97\plainfootrulewidth\z@
98\footruleskip .3\normalbaselineskip
99
100\lhead[\fancyplain{}{\sl\rightmark}]{\fancyplain{}{\sl\leftmark}}
101% i.e. empty on ``plain'' pages, \rightmark on even, \leftmark on odd pages
102\chead{}
103\rhead[\fancyplain{}{\sl\leftmark}]{\fancyplain{}{\sl\rightmark}}
104% i.e. empty on ``plain'' pages, \leftmark on even, \rightmark on odd pages
105\lfoot{}
106\cfoot{\rm\thepage} % page number
107\rfoot{}
108
109% Put together a header or footer given the left, center and
110% right text, fillers at left and right and a rule.
111% The \lap commands put the text into an hbox of zero size,
112% so overlapping text does not generate an errormessage.
113
114\def\@fancyhead#1#2#3#4#5{#1\hbox to\headwidth{\fancy@reset\vbox{\hbox
115{\rlap{\parbox[b]{\headwidth}{\raggedright#2\strut}}\hfill
116\parbox[b]{\headwidth}{\centering#3\strut}\hfill
117\llap{\parbox[b]{\headwidth}{\raggedleft#4\strut}}}\headrule}}#5}
118
119
120\def\@fancyfoot#1#2#3#4#5{#1\hbox to\headwidth{\fancy@reset\vbox{\footrule
121\hbox{\rlap{\parbox[t]{\headwidth}{\raggedright#2\strut}}\hfill
122\parbox[t]{\headwidth}{\centering#3\strut}\hfill
123\llap{\parbox[t]{\headwidth}{\raggedleft#4\strut}}}}}#5}
124
125\def\headrule{{\if@fancyplain\let\headrulewidth\plainheadrulewidth\fi
126\hrule\@height\headrulewidth\@width\headwidth \vskip-\headrulewidth}}
127
128\def\footrule{{\if@fancyplain\let\footrulewidth\plainfootrulewidth\fi
129\vskip-\footruleskip\vskip-\footrulewidth
130\hrule\@width\headwidth\@height\footrulewidth\vskip\footruleskip}}
131
132\def\ps@fancy{%
133\@ifundefined{@chapapp}{\let\@chapapp\chaptername}{}%for amsbook
134\@ifundefined{chapter}{\def\sectionmark##1{\markboth
135{\uppercase{\ifnum \c@secnumdepth>\z@
136 \thesection\hskip 1em\relax \fi ##1}}{}}%
137\def\subsectionmark##1{\markright {\ifnum \c@secnumdepth >\@ne
138 \thesubsection\hskip 1em\relax \fi ##1}}}%
139{\def\chaptermark##1{\markboth {\uppercase{\ifnum \c@secnumdepth>\m@ne
140 \@chapapp\ \thechapter. \ \fi ##1}}{}}
141\def\sectionmark##1{\markright{\uppercase{\ifnum \c@secnumdepth >\z@
142 \thesection. \ \fi ##1}}}}%
143\csname ps@headings\endcsname % use \ps@headings defaults if they exist
144\ps@@fancy
145\gdef\ps@fancy{\@fancyplainfalse\ps@@fancy}%
146\headwidth\textwidth}
147\def\ps@fancyplain{\ps@fancy \let\ps@plain\ps@plain@fancy}
148\def\ps@plain@fancy{\@fancyplaintrue\ps@@fancy}
149\def\ps@@fancy{%
150\def\@mkboth{\protect\markboth}%
151\def\@oddhead{\@fancyhead\@lodd\@olhead\@ochead\@orhead\@rodd}%
152\def\@oddfoot{\@fancyfoot\@lodd\@olfoot\@ocfoot\@orfoot\@rodd}%
153\def\@evenhead{\@fancyhead\@rodd\@elhead\@echead\@erhead\@lodd}%
154\def\@evenfoot{\@fancyfoot\@rodd\@elfoot\@ecfoot\@erfoot\@lodd}%
155}
156\def\@lodd{\if@reversemargin\hss\else\relax\fi}
157\def\@rodd{\if@reversemargin\relax\else\hss\fi}
158
159\let\latex@makecol\@makecol
160\def\@makecol{\let\topfloat\@toplist\let\botfloat\@botlist\latex@makecol}
161\def\iftopfloat#1#2{\ifx\topfloat\empty #2\else #1\fi}
162\def\ifbotfloat#1#2{\ifx\botfloat\empty #2\else #1\fi}
163\def\iffloatpage#1#2{\if@fcolmade #1\else #2\fi}
164
165\newcommand{\fancypagestyle}[2]{%
166 \@namedef{ps@#1}{\let\fancy@def\def#2\relax\ps@fancy}}
diff --git a/ue1/protokoll/imgsynth.vpp b/ue1/protokoll/imgsynth.vpp
new file mode 100644
index 0000000..b94b9e4
--- /dev/null
+++ b/ue1/protokoll/imgsynth.vpp
Binary files differ
diff --git a/ue1/protokoll/oop_prot.sty b/ue1/protokoll/oop_prot.sty
new file mode 100644
index 0000000..26a66e6
--- /dev/null
+++ b/ue1/protokoll/oop_prot.sty
@@ -0,0 +1,222 @@
1%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2%
3% OOP_prot.sty
4%
5%
6% 13.03.07
7%
8% Institut f"ur Technische Informatik (182/1)
9% Real Time Systems Group
10% Technische Universit"at Wien
11% 1040 Treitlstr. 3, 3. Stk.
12% (www.vmars.tuwien.ac.at)
13%
14%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
15
16%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
17%
18% packages
19%
20%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
21
22\usepackage{fancyheadings}
23\usepackage{german}
24\usepackage{graphicx}
25\usepackage{listings}
26\usepackage[T1]{fontenc}
27%\usepackage[latin1]{inputenc}
28\usepackage{times}
29\usepackage{epsfig}
30
31%in order to get the source code in a really good shape
32\lstset{%backgroundcolor=\color[gray]{.9},
33 extendedchars=true,
34 basicstyle=\scriptsize,
35% frame={tb},
36% morekeywords={outp,inp,bit_is_clear,bit_is_set,sei,cli,sbi,cbi,INTERRUPT,SIGNAL,uint8,uint16_t,uint32_t,uint64_t,int8_t,int16_t,int32_t,int64_t,memptr},
37 language=C++,
38 breaklines=true,
39% lineskip=2pt,
40% numbers=left,
41% stepnumber=5,
42 }
43
44
45%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
46%
47% user-defined commands
48%
49%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
50
51% typeset pin numbers
52\newcommand{\pin}[1]{\emph{\textbf{#1}}\ }
53%\renewcommand{\chaptername}{Aufgabe}
54
55\newcommand{\matrnr}{Matr. Nr.}
56
57%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
58%
59% some size definitions and counter settings
60%
61%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
62
63\oddsidemargin 1cm
64\evensidemargin 1cm
65\topmargin 0pt
66\headsep 50pt
67\textheight 21.5cm
68\textwidth 14.1cm
69
70\renewcommand{\floatpagefraction}{0.9}
71\renewcommand{\textfraction}{0.05}
72\renewcommand{\topfraction}{1.0}
73\renewcommand{\bottomfraction}{1.0}
74
75\setcounter{totalnumber}{3}
76\setcounter{bottomnumber}{3}
77\setcounter{topnumber}{3}
78
79\setlength{\unitlength}{1mm}
80\setlength{\parindent}{6mm}
81\setlength{\parskip}{12pt plus2pt minus2pt}
82
83\sloppy
84
85%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
86%
87% define variables used on titlepage
88%
89%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
90
91% heading
92\def\headline#1{\gdef\@headline{#1}}
93% authors
94\def\vornamea#1{\gdef\@vornamea{#1}}
95\def\nachnamea#1{\gdef\@nachnamea{#1}}
96\def\matrikela#1{\gdef\@matrikela{#1}}
97\def\emaila#1{\gdef\@emaila{#1}}
98
99\def\vornameb#1{\gdef\@vornameb{#1}}
100\def\nachnameb#1{\gdef\@nachnameb{#1}}
101\def\matrikelb#1{\gdef\@matrikelb{#1}}
102\def\emailb#1{\gdef\@emailb{#1}}
103
104\def\vornamec#1{\gdef\@vornamec{#1}}
105\def\nachnamec#1{\gdef\@nachnamec{#1}}
106\def\matrikelc#1{\gdef\@matrikelc{#1}}
107\def\emailc#1{\gdef\@emailc{#1}}
108
109\def\vornamed#1{\gdef\@vornamed{#1}}
110\def\nachnamed#1{\gdef\@nachnamed{#1}}
111\def\matrikeld#1{\gdef\@matrikeld{#1}}
112\def\emaild#1{\gdef\@emaild{#1}}
113
114% address of department
115\def\address#1{\gdef\@address{#1}}
116% LVA-Nr.
117\def\lvanr#1{\gdef\@aufgabe{#1}}
118
119\setcounter{footnote}{0}
120
121% initialize variables
122\gdef\@headline{Object-Oriented Programming VL}
123%\gdef\@title{Laborprotokoll}
124
125\gdef\@vornamea{VStud1}
126\gdef\@nachnamea{NStud1}
127\gdef\@matrikela{000000}
128\gdef\@emaila{e000000@student.tuwien.ac.at}
129
130\gdef\@vornameb{VStud2}
131\gdef\@nachnameb{NStud2}
132\gdef\@matrikelb{000000}
133\gdef\@emailb{e000000@student.tuwien.ac.at}
134
135\gdef\@vornamec{VStud3}
136\gdef\@nachnamec{NStud3}
137\gdef\@matrikelc{0000000}
138\gdef\@emailc{e000000@student.tuwien.ac.at}
139
140\gdef\@aufgabe{zu Aufgabe 1}
141
142%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
143%
144% titlepage
145%
146%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
147
148\def\maketitle{
149\begin{titlepage}
150
151% enlarge page
152\setlength{\topmargin}{0pt}
153\setlength{\headheight}{0pt}
154\setlength{\headsep}{0pt}
155\setlength{\footskip}{0pt}
156
157\let\footnotesize\small \let\footnoterule\relax \setcounter{page}{1}
158\null
159\vfill
160\large
161\vskip -4 cm
162
163\begin{center}
164% heading
165{\LARGE\bf \@headline \par} \vskip 2cm
166
167\vskip 1cm
168
169% title
170{\LARGE\bf Laborprotokoll \par}
171\vskip 0.5cm
172{\Huge\bf \@title \par}
173\vskip 1cm
174%{\Large \bf \@aufgabe \par}
175\vskip 4cm
176
177\begin{flushright}
178\@author
179\vskip 1cm
180Wien, am~\today{}
181\end{flushright}
182\end{center} \par
183\vskip 1.5cm
184
185\end{titlepage}
186
187\setcounter{footnote}{0}
188\let\thanks\relax
189} % \def\maketitle
190
191
192%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
193
194\newenvironment{Ventry}[1]%
195{\begin{list}{}{\renewcommand{\makelabel}[1]{\textbf{##1:}\hfill}%
196\settowidth{\labelwidth}{\textbf{#1:}}%
197\setlength{\leftmargin}{\labelwidth}%
198\addtolength{\leftmargin}{\labelsep}}}%
199{\end{list}}
200
201\newcommand{\tablesize}{\fontsize{8}{10}\selectfont}
202
203%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
204%
205% layout of non-title pages
206%
207%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
208
209\pagenumbering{roman}
210\setlength{\parskip}{5pt plus2pt minus2pt}
211
212\setlength{\parskip}{1mm}
213\clearpage
214\setlength{\parskip}{5pt plus2pt minus2pt}
215
216\pagestyle{fancy}
217%\renewcommand{\chaptermark}[1]{\markboth{\thechapter\ #1}{}}
218\renewcommand{\sectionmark}[1]{\markboth{\thesection\ #1}{}}
219\addtolength{\headheight}{2pt}
220
221\pagenumbering{arabic}
222\setcounter{page} {1}
diff --git a/ue1/protokoll/protokoll.tex b/ue1/protokoll/protokoll.tex
new file mode 100644
index 0000000..a8c7928
--- /dev/null
+++ b/ue1/protokoll/protokoll.tex
@@ -0,0 +1,226 @@
1\documentclass[12pt,a4paper,titlepage,oneside]{article}
2\usepackage[utf8]{inputenc}
3\usepackage{oop_prot}
4\usepackage{url}
5\usepackage{pdfpages}
6\usepackage{booktabs}
7
8\title{Beispiel 1}
9
10\author{Manuel Mausz, \matrnr 0728348\\
11 {\small manuel-tu@mausz.at}
12}
13
14\begin{document}
15
16% create titlepage
17\maketitle
18
19\tableofcontents
20\newpage
21
22%------------------------------------------------------------------
23%------------------------------------------------------------------
24
25\section{Aufgabenstellung - Beispiel 1}
26\includegraphics[width=\textwidth,page=1]{../angabe.pdf}
27\includegraphics[width=\textwidth,page=2]{../angabe.pdf}
28
29%------------------------------------------------------------------
30%------------------------------------------------------------------
31
32\section{Beispiel 1}
33
34\subsection{Design}\label{Design}
35
36Abbildung~\ref{fig:classdiagram1} zeigt das Klassendiagramm der Aufgabe.
37
38
39Die Klasse CScriptParser übernimmt das Parsen der per Commandlineparameter
40übergebenen Scriptdatei als String, wobei dieser bereits im Konstruktor
41übergeben werden muss. Zum Anstoßen des Parsen dient die Funktion parse().
42Der (simple) Parser arbeitet Zeilenbasiert und erwartet pro Zeile einen
43Funktionsaufruf im Syntax: funktionsname(param1, ... paramX). Schachteln von
44Funktionen ist nicht erlaubt. Der erste Befehl eines Blocks muss der Befehl
45``read'' sein, der Befehl ``write'' beendet einen Block. Alle Funktionsparameter
46werden zusammen in einer Liste gespeichert und den entsprechenden Funktionen
47übergeben. Whitespaces und Anführungszeichen werden bereits vorab gelöscht.
48
49
50Tritt ein Fehler während des Parsens auf, werden Instanzen der Klasse
51\mbox{CSriptError::ParserError} als Exception geworfen. Über die Methode
52\mbox{getLine()} der Exception kann die aktuelle Zeile der Scriptdatei, die den
53Fehler erzeugt hat, ausgelesen werden.\\
54
55
56Da der Scriptbefehl ``read'' und ``write'' einen Dateitypparameter enthält,
57ist es potentiell möglich verschiedene Dateitypen zu öffnen und zu bearbeiten.
58Um dies aus der Sicht des Parsers generisch durchzuführen, müssen alle Klassen,
59die Dateioperationen durchführen können, von der Abstrakten Klasse \mbox{CFile}
60abgeleitet sein und somit mindestens dessen virtuelle Methoden implementieren.
61Alle Implementation müssen weiters im Konstruktor die unterstützten Dateitypen
62in die Membervariable m\_types hinzufügen, damit der Parser die jeweils
63zuständige Implementation verwenden kann.
64
65
66Die Methode \mbox{callFunc(...)} dient zum Aufruf von dateitypspezifische
67Scriptfunktionen. Hierzu übergibt der Parser automatisch alle unbekannten
68Funktionen und dessen Parameter innerhalb eines Block (abgesehen von ``read''
69und ``write'') der jeweils zuständigen Instanz.
70
71
72Zur Fehlerbehandlung sollen Implementationen von CFile Instanzen der
73Klasse \mbox{CFile::FileError} als Exception werfen. Diese werden vom Parser
74gefangen und in Instanzen der eigenen Exception des Parsers
75\mbox{CSriptError::ParserError} übersetzt.\\
76
77
78Die Klasse \mbox{CBitmap} implementiert die Abstrakte Klasse \mbox{CFile} und
79kann Dateien des Types ``BMP'' (Windows Bitmap) bearbeiten. Beim Lesen der
80Datei werden rudimentäre Checks des Dateiheaders durchgeführt. Der Speicher der
81Pixel, wird wie gewünscht dynamisch alloziert. Um aber die verschiedenen
82möglichen Farbtiefen von Windows Bitmap zu unterstützen, werden die
83Schreiboperationen auf die Pixeldaten an eine Instanz der je nach Farbtiefe
84zuständigen Implementation der Abstrakten Klasse \mbox{CPixelFormat} delegiert.
85Diese Instanz wird während der Analyse des Dateiheaders ebenfalls dynamisch
86allokiert.\\
87
88
89Damit Implementationen der abstrakten Klasse \mbox{CPixelFormat} direkt auf die
90Daten des Windows Bitmap zugreifen können, wird im Konstruktor ein Pointer auf
91die Instanz von \mbox{CBitmap} übergeben. Über die Public Getter-Methoden von
92\mbox{CBitmap} erfolgt der direkt Zugriff. Fehlerbehandlung erfolgt
93Exceptions der Klasse \mbox{CPixelFormat::PixelFormatError}.
94
95%==================================================================
96\begin{figure}[htb]
97\begin{center}
98\epsfxsize=0.9\textwidth\epsfbox{ClassDiagram1.png}
99\end{center}
100\caption{Klassendiagramm 1}
101\label{fig:classdiagram1}
102\end{figure}
103%==================================================================
104
105
106\subsection{Verwaltung der Ressourcen}
107
108Alle Klassen, die im Laufe ihrer Existenz Ressourcen dynamische
109allozieren, initialisieren die jeweiligen Membervariablen im Konstruktor auf
110NULL und geben diese, sofern tatsächlich alloziert, im spätestens Destruktor
111wieder frei.\\
112Alle Dateien, die geöffnet werden, werden nach dem Abfangen der Exception auch
113wieder geschlossen, sofern alle möglichen, auftretenden Exceptions
114(\mbox{std::bad\_alloc} ausgenommen) auch vorab übersetzt wurden.
115
116\subsection{Fehlerbehandlung}
117
118Alle Implementationen der abstrakten Klasse \mbox{CPixelFormat} werfen
119Exceptions der Klasse \mbox{CPixelFormat::PixelFormatError}. Diese werden von
120\mbox{CBitmap} gefangen und in Exceptions der Klasse \mbox{CFile::FileError}
121übersetzt, welche wiederum von der Klasse \mbox{CScriptParser} gefangen und in
122Exceptions der Klasse \mbox{CScriptParser::ParserError} übersetzt werden.\\
123Diese Exceptions sowie Exceptions des Typs \mbox{std::exception} werden
124schlussendlich vom Hauptprogramm gefangen und geben eine entsprechende
125Fehlermeldung an den Benutzer auf stderr aus.
126
127\subsection{Implementierung}
128Siehe Punkt~\ref{Design} und Abbildung~\ref{fig:classdiagram1} sowie
129Punkt~\ref{Listings}.
130
131
132Alle Exceptions wurden von \mbox{std::invalid\_argument} abgeleitet und der
133Konstruktor gemäß den üblichen Konventionen implementiert:
134
135%==================================================================
136\begin{lstlisting}{}
137ParserError(const std::string& what)
138 : std::invalid_argument(what)
139{}
140\end{lstlisting}
141%==================================================================
142
143
144%------------------------------------------------------------------
145%------------------------------------------------------------------
146
147\section{Projektverlauf}
148
149
150\subsection{Probleme und Fallstricke}
151
152In der Hoffnung das in der nächsten Aufgabe weitere Funktionen, Dateitypen
153und/oder Farbtiefen des Windows Bitmaps-Formats verlangt werden, wurden
154diese sehr generisch implementiert.\\
155Ursprünglich wollte ich die jeweilig unterstützen Scriptfunktionen mittels
156\mbox{std::map<std::string, (void *)()>} an den Scriptparser zurückgeben,
157sodass dieser direkt die jeweilige Methode (per Pointer) aufrufen kann. Dies
158funktioniert jedoch logischerweise nur bei statischen Methoden. Daher die
159einfacher Methode über die callFunc-Methoden, die die Parameter an die
160jeweiligen internen Methoden weiterdelegieren.
161
162
163Da sich \mbox{CBitmap} und \mbox{CPixelFormat} gegenseitig referenzieren,
164müssen die jeweiligen Klassen im Headerfile der anderen Klasse vorab deklariert
165werden. Andernfalls kann der Compiler die Klasse aufgrund der rekursiven
166Inklusion nicht finden.
167
168\subsection{Arbeitsaufwand}
169
170\begin{tabular}{ll}
171 \toprule
172 Entwicklungsschritt / Meilenstein & Arbeitsaufwand in Stunden\\
173 \midrule
174 Erstes Design & 15 Minuten\\
175 \hline
176 Implementierung (und leichte Anpassung des Designs) & 1 Tag\\
177 \hline
178 Dokumentation (Doxygen) und Überprüfung alle\\
179 Anforderungen gemäß der Programmierrichtlinien & 2 Tage\\
180 \hline
181 Erstellung des Protokolls & 1 Tag\\
182 \bottomrule
183\end{tabular}
184
185%------------------------------------------------------------------
186%------------------------------------------------------------------
187
188\section{Listings}\label{Listings}
189
190\subsection{imgsynth.cpp}
191\lstinputlisting{../imgsynth/imgsynth.cpp}
192
193\newpage
194\subsection{cscriptparser.h}
195\lstinputlisting{../imgsynth/cscriptparser.h}
196
197\newpage
198\subsection{cscriptparser.cpp}
199\lstinputlisting{../imgsynth/cscriptparser.cpp}
200
201\newpage
202\subsection{cfile.h}
203\lstinputlisting{../imgsynth/cfile.h}
204
205\newpage
206\subsection{cbitmap.h}
207\lstinputlisting{../imgsynth/cbitmap.h}
208
209\newpage
210\subsection{cbitmap.cpp}
211\lstinputlisting{../imgsynth/cbitmap.cpp}
212
213\newpage
214\subsection{cpixelformat.h}
215\lstinputlisting{../imgsynth/cpixelformat.h}
216
217\newpage
218\subsection{cpixelformat\_24.h}
219\lstinputlisting{../imgsynth/cpixelformat_24.h}
220
221\newpage
222\subsection{cpixelformat\_24.cpp}
223\lstinputlisting{../imgsynth/cpixelformat_24.cpp}
224
225\end{document}
226