summaryrefslogtreecommitdiffstats
path: root/ue2
diff options
context:
space:
mode:
Diffstat (limited to 'ue2')
-rw-r--r--ue2/Makefile29
-rw-r--r--ue2/angabe.pdfbin0 -> 116734 bytes
-rw-r--r--ue2/doxygen.conf1299
-rw-r--r--ue2/imgsynth2/Makefile41
-rw-r--r--ue2/imgsynth2/cbitmap.cpp382
-rw-r--r--ue2/imgsynth2/cbitmap.h236
-rw-r--r--ue2/imgsynth2/cfile.h121
-rw-r--r--ue2/imgsynth2/cpixelformat.h124
-rw-r--r--ue2/imgsynth2/cpixelformat_bgr24.cpp90
-rw-r--r--ue2/imgsynth2/cpixelformat_bgr24.h89
-rw-r--r--ue2/imgsynth2/cpixelformat_bgr555.cpp46
-rw-r--r--ue2/imgsynth2/cpixelformat_bgr555.h96
-rw-r--r--ue2/imgsynth2/cscriptparser.cpp209
-rw-r--r--ue2/imgsynth2/cscriptparser.h181
-rw-r--r--ue2/imgsynth2/imgsynth2.cpp84
-rw-r--r--ue2/imgsynth2/test/input_yellow_man1_rgb2410
-rw-r--r--ue2/imgsynth2/test/input_yellow_man1_rgb55510
-rw-r--r--ue2/imgsynth2/test/input_yellow_man2_rgb2413
-rw-r--r--ue2/imgsynth2/test/input_yellow_man2_rgb55513
-rwxr-xr-xue2/imgsynth2/test/test.sh48
-rw-r--r--ue2/imgsynth2/test/yellow_man1_rgb24_in.bmpbin0 -> 530 bytes
-rw-r--r--ue2/imgsynth2/test/yellow_man1_rgb24_out.bmpbin0 -> 530 bytes
-rw-r--r--ue2/imgsynth2/test/yellow_man1_rgb24_ref.bmpbin0 -> 530 bytes
-rw-r--r--ue2/imgsynth2/test/yellow_man1_rgb555_in.bmpbin0 -> 394 bytes
-rw-r--r--ue2/imgsynth2/test/yellow_man1_rgb555_out.bmpbin0 -> 394 bytes
-rw-r--r--ue2/imgsynth2/test/yellow_man1_rgb555_ref.bmpbin0 -> 394 bytes
-rw-r--r--ue2/imgsynth2/test/yellow_man2_rgb24_in.bmpbin0 -> 530 bytes
-rw-r--r--ue2/imgsynth2/test/yellow_man2_rgb24_out.bmpbin0 -> 530 bytes
-rw-r--r--ue2/imgsynth2/test/yellow_man2_rgb24_ref.bmpbin0 -> 530 bytes
-rw-r--r--ue2/imgsynth2/test/yellow_man2_rgb555_in.bmpbin0 -> 394 bytes
-rw-r--r--ue2/imgsynth2/test/yellow_man2_rgb555_out.bmpbin0 -> 394 bytes
-rw-r--r--ue2/imgsynth2/test/yellow_man2_rgb555_ref.bmpbin0 -> 394 bytes
-rw-r--r--ue2/imgsynth2/x126
-rw-r--r--ue2/imgsynth2/x226
-rw-r--r--ue2/protokoll/Makefile19
-rw-r--r--ue2/protokoll/fancyheadings.sty166
-rw-r--r--ue2/protokoll/imgsynth.vppbin0 -> 53886 bytes
-rw-r--r--ue2/protokoll/oop_prot.sty222
-rw-r--r--ue2/protokoll/protokoll.tex98
39 files changed, 3678 insertions, 0 deletions
diff --git a/ue2/Makefile b/ue2/Makefile
new file mode 100644
index 0000000..1ee99ae
--- /dev/null
+++ b/ue2/Makefile
@@ -0,0 +1,29 @@
1# Makefile for ue2
2# Author: Guenther Neuwirth (0626638), Manuel Mausz (0728348)
3# Created: 26.04.2009
4
5SUBDIRS= imgsynth2
6RECURSIVE_TARGETS= all-recursive debug test clean
7
8all: all-recursive
9
10$(RECURSIVE_TARGETS):
11 @failcom='exit 1'; \
12 target=`echo $@ | sed s/-recursive//`; \
13 list='$(SUBDIRS)'; for subdir in $$list; do \
14 echo "Making $$target in $$subdir"; \
15 (cd $$subdir && $(MAKE) $$target) \
16 || eval $$failcom; \
17 done; \
18 test -z "$$fail"
19
20doxygen:
21 @doxygen doxygen.conf
22
23protokoll:
24 @echo "Making protokoll"; \
25 (cd protokoll && $(MAKE))
26
27.PHONY: protokoll doxygen clean
28
29# vim600: noet sw=8 ts=8
diff --git a/ue2/angabe.pdf b/ue2/angabe.pdf
new file mode 100644
index 0000000..dc6df65
--- /dev/null
+++ b/ue2/angabe.pdf
Binary files differ
diff --git a/ue2/doxygen.conf b/ue2/doxygen.conf
new file mode 100644
index 0000000..4ea8eec
--- /dev/null
+++ b/ue2/doxygen.conf
@@ -0,0 +1,1299 @@
1# Doxyfile 1.5.3
2
3# This file describes the settings to be used by the documentation system
4# doxygen (www.doxygen.org) for a project
5#
6# All text after a hash (#) is considered a comment and will be ignored
7# The format is:
8# TAG = value [value, ...]
9# For lists items can also be appended using:
10# TAG += value [value, ...]
11# Values that contain spaces should be placed between quotes (" ")
12
13#---------------------------------------------------------------------------
14# Project related configuration options
15#---------------------------------------------------------------------------
16
17# This tag specifies the encoding used for all characters in the config file that
18# follow. The default is UTF-8 which is also the encoding used for all text before
19# the first occurrence of this tag. Doxygen uses libiconv (or the iconv built into
20# libc) for the transcoding. See http://www.gnu.org/software/libiconv for the list of
21# possible encodings.
22
23DOXYFILE_ENCODING = UTF-8
24
25# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
26# by quotes) that should identify the project.
27
28PROJECT_NAME = imgsynth
29
30# The PROJECT_NUMBER tag can be used to enter a project or revision number.
31# This could be handy for archiving the generated documentation or
32# if some version control system is used.
33
34PROJECT_NUMBER =
35
36# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
37# base path where the generated documentation will be put.
38# If a relative path is entered, it will be relative to the location
39# where doxygen was started. If left blank the current directory will be used.
40
41OUTPUT_DIRECTORY = doxygen/
42
43# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
44# 4096 sub-directories (in 2 levels) under the output directory of each output
45# format and will distribute the generated files over these directories.
46# Enabling this option can be useful when feeding doxygen a huge amount of
47# source files, where putting all generated files in the same directory would
48# otherwise cause performance problems for the file system.
49
50CREATE_SUBDIRS = NO
51
52# The OUTPUT_LANGUAGE tag is used to specify the language in which all
53# documentation generated by doxygen is written. Doxygen will use this
54# information to generate all constant output in the proper language.
55# The default language is English, other supported languages are:
56# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
57# Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian,
58# Italian, Japanese, Japanese-en (Japanese with English messages), Korean,
59# Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian,
60# Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.
61
62OUTPUT_LANGUAGE = English
63
64# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
65# include brief member descriptions after the members that are listed in
66# the file and class documentation (similar to JavaDoc).
67# Set to NO to disable this.
68
69BRIEF_MEMBER_DESC = YES
70
71# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
72# the brief description of a member or function before the detailed description.
73# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
74# brief descriptions will be completely suppressed.
75
76REPEAT_BRIEF = YES
77
78# This tag implements a quasi-intelligent brief description abbreviator
79# that is used to form the text in various listings. Each string
80# in this list, if found as the leading text of the brief description, will be
81# stripped from the text and the result after processing the whole list, is
82# used as the annotated text. Otherwise, the brief description is used as-is.
83# If left blank, the following values are used ("$name" is automatically
84# replaced with the name of the entity): "The $name class" "The $name widget"
85# "The $name file" "is" "provides" "specifies" "contains"
86# "represents" "a" "an" "the"
87
88ABBREVIATE_BRIEF =
89
90# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
91# Doxygen will generate a detailed section even if there is only a brief
92# description.
93
94ALWAYS_DETAILED_SEC = NO
95
96# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
97# inherited members of a class in the documentation of that class as if those
98# members were ordinary class members. Constructors, destructors and assignment
99# operators of the base classes will not be shown.
100
101INLINE_INHERITED_MEMB = NO
102
103# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
104# path before files name in the file list and in the header files. If set
105# to NO the shortest path that makes the file name unique will be used.
106
107FULL_PATH_NAMES = YES
108
109# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
110# can be used to strip a user-defined part of the path. Stripping is
111# only done if one of the specified strings matches the left-hand part of
112# the path. The tag can be used to show relative paths in the file list.
113# If left blank the directory from which doxygen is run is used as the
114# path to strip.
115
116STRIP_FROM_PATH =
117
118# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
119# the path mentioned in the documentation of a class, which tells
120# the reader which header file to include in order to use a class.
121# If left blank only the name of the header file containing the class
122# definition is used. Otherwise one should specify the include paths that
123# are normally passed to the compiler using the -I flag.
124
125STRIP_FROM_INC_PATH =
126
127# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
128# (but less readable) file names. This can be useful is your file systems
129# doesn't support long names like on DOS, Mac, or CD-ROM.
130
131SHORT_NAMES = NO
132
133# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
134# will interpret the first line (until the first dot) of a JavaDoc-style
135# comment as the brief description. If set to NO, the JavaDoc
136# comments will behave just like regular Qt-style comments
137# (thus requiring an explicit @brief command for a brief description.)
138
139JAVADOC_AUTOBRIEF = NO
140
141# If the QT_AUTOBRIEF tag is set to YES then Doxygen will
142# interpret the first line (until the first dot) of a Qt-style
143# comment as the brief description. If set to NO, the comments
144# will behave just like regular Qt-style comments (thus requiring
145# an explicit \brief command for a brief description.)
146
147QT_AUTOBRIEF = NO
148
149# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
150# treat a multi-line C++ special comment block (i.e. a block of //! or ///
151# comments) as a brief description. This used to be the default behaviour.
152# The new default is to treat a multi-line C++ comment block as a detailed
153# description. Set this tag to YES if you prefer the old behaviour instead.
154
155MULTILINE_CPP_IS_BRIEF = NO
156
157# If the DETAILS_AT_TOP tag is set to YES then Doxygen
158# will output the detailed description near the top, like JavaDoc.
159# If set to NO, the detailed description appears after the member
160# documentation.
161
162DETAILS_AT_TOP = NO
163
164# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
165# member inherits the documentation from any documented member that it
166# re-implements.
167
168INHERIT_DOCS = YES
169
170# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
171# a new page for each member. If set to NO, the documentation of a member will
172# be part of the file/class/namespace that contains it.
173
174SEPARATE_MEMBER_PAGES = NO
175
176# The TAB_SIZE tag can be used to set the number of spaces in a tab.
177# Doxygen uses this value to replace tabs by spaces in code fragments.
178
179TAB_SIZE = 8
180
181# This tag can be used to specify a number of aliases that acts
182# as commands in the documentation. An alias has the form "name=value".
183# For example adding "sideeffect=\par Side Effects:\n" will allow you to
184# put the command \sideeffect (or @sideeffect) in the documentation, which
185# will result in a user-defined paragraph with heading "Side Effects:".
186# You can put \n's in the value part of an alias to insert newlines.
187
188ALIASES = "module=\par Modulname:\n"
189ALIASES += "func=\par Functionname:\n"
190ALIASES += "method=\par Methodname:\n"
191ALIASES += "globalvars=\par Global variables used:\n"
192#ALIASES += "exceptions=\par Exceptions thrown:\n"
193ALIASES += "conditions=\par Conditions:\n"
194
195# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
196# sources only. Doxygen will then generate output that is more tailored for C.
197# For instance, some of the names that are used will be different. The list
198# of all members will be omitted, etc.
199
200OPTIMIZE_OUTPUT_FOR_C = NO
201
202# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
203# sources only. Doxygen will then generate output that is more tailored for Java.
204# For instance, namespaces will be presented as packages, qualified scopes
205# will look different, etc.
206
207OPTIMIZE_OUTPUT_JAVA = NO
208
209# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to
210# include (a tag file for) the STL sources as input, then you should
211# set this tag to YES in order to let doxygen match functions declarations and
212# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
213# func(std::string) {}). This also make the inheritance and collaboration
214# diagrams that involve STL classes more complete and accurate.
215
216BUILTIN_STL_SUPPORT = NO
217
218# If you use Microsoft's C++/CLI language, you should set this option to YES to
219# enable parsing support.
220
221CPP_CLI_SUPPORT = NO
222
223# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
224# tag is set to YES, then doxygen will reuse the documentation of the first
225# member in the group (if any) for the other members of the group. By default
226# all members of a group must be documented explicitly.
227
228DISTRIBUTE_GROUP_DOC = NO
229
230# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
231# the same type (for instance a group of public functions) to be put as a
232# subgroup of that type (e.g. under the Public Functions section). Set it to
233# NO to prevent subgrouping. Alternatively, this can be done per class using
234# the \nosubgrouping command.
235
236SUBGROUPING = YES
237
238#---------------------------------------------------------------------------
239# Build related configuration options
240#---------------------------------------------------------------------------
241
242# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
243# documentation are documented, even if no documentation was available.
244# Private class members and static file members will be hidden unless
245# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
246
247EXTRACT_ALL = NO
248
249# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
250# will be included in the documentation.
251
252EXTRACT_PRIVATE = NO
253
254# If the EXTRACT_STATIC tag is set to YES all static members of a file
255# will be included in the documentation.
256
257EXTRACT_STATIC = NO
258
259# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
260# defined locally in source files will be included in the documentation.
261# If set to NO only classes defined in header files are included.
262
263EXTRACT_LOCAL_CLASSES = YES
264
265# This flag is only useful for Objective-C code. When set to YES local
266# methods, which are defined in the implementation section but not in
267# the interface are included in the documentation.
268# If set to NO (the default) only methods in the interface are included.
269
270EXTRACT_LOCAL_METHODS = NO
271
272# If this flag is set to YES, the members of anonymous namespaces will be extracted
273# and appear in the documentation as a namespace called 'anonymous_namespace{file}',
274# where file will be replaced with the base name of the file that contains the anonymous
275# namespace. By default anonymous namespace are hidden.
276
277EXTRACT_ANON_NSPACES = NO
278
279# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
280# undocumented members of documented classes, files or namespaces.
281# If set to NO (the default) these members will be included in the
282# various overviews, but no documentation section is generated.
283# This option has no effect if EXTRACT_ALL is enabled.
284
285HIDE_UNDOC_MEMBERS = NO
286
287# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
288# undocumented classes that are normally visible in the class hierarchy.
289# If set to NO (the default) these classes will be included in the various
290# overviews. This option has no effect if EXTRACT_ALL is enabled.
291
292HIDE_UNDOC_CLASSES = NO
293
294# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
295# friend (class|struct|union) declarations.
296# If set to NO (the default) these declarations will be included in the
297# documentation.
298
299HIDE_FRIEND_COMPOUNDS = NO
300
301# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
302# documentation blocks found inside the body of a function.
303# If set to NO (the default) these blocks will be appended to the
304# function's detailed documentation block.
305
306HIDE_IN_BODY_DOCS = NO
307
308# The INTERNAL_DOCS tag determines if documentation
309# that is typed after a \internal command is included. If the tag is set
310# to NO (the default) then the documentation will be excluded.
311# Set it to YES to include the internal documentation.
312
313INTERNAL_DOCS = NO
314
315# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
316# file names in lower-case letters. If set to YES upper-case letters are also
317# allowed. This is useful if you have classes or files whose names only differ
318# in case and if your file system supports case sensitive file names. Windows
319# and Mac users are advised to set this option to NO.
320
321CASE_SENSE_NAMES = YES
322
323# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
324# will show members with their full class and namespace scopes in the
325# documentation. If set to YES the scope will be hidden.
326
327HIDE_SCOPE_NAMES = NO
328
329# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
330# will put a list of the files that are included by a file in the documentation
331# of that file.
332
333SHOW_INCLUDE_FILES = YES
334
335# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
336# is inserted in the documentation for inline members.
337
338INLINE_INFO = YES
339
340# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
341# will sort the (detailed) documentation of file and class members
342# alphabetically by member name. If set to NO the members will appear in
343# declaration order.
344
345SORT_MEMBER_DOCS = YES
346
347# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
348# brief documentation of file, namespace and class members alphabetically
349# by member name. If set to NO (the default) the members will appear in
350# declaration order.
351
352SORT_BRIEF_DOCS = NO
353
354# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
355# sorted by fully-qualified names, including namespaces. If set to
356# NO (the default), the class list will be sorted only by class name,
357# not including the namespace part.
358# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
359# Note: This option applies only to the class list, not to the
360# alphabetical list.
361
362SORT_BY_SCOPE_NAME = NO
363
364# The GENERATE_TODOLIST tag can be used to enable (YES) or
365# disable (NO) the todo list. This list is created by putting \todo
366# commands in the documentation.
367
368GENERATE_TODOLIST = YES
369
370# The GENERATE_TESTLIST tag can be used to enable (YES) or
371# disable (NO) the test list. This list is created by putting \test
372# commands in the documentation.
373
374GENERATE_TESTLIST = YES
375
376# The GENERATE_BUGLIST tag can be used to enable (YES) or
377# disable (NO) the bug list. This list is created by putting \bug
378# commands in the documentation.
379
380GENERATE_BUGLIST = YES
381
382# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
383# disable (NO) the deprecated list. This list is created by putting
384# \deprecated commands in the documentation.
385
386GENERATE_DEPRECATEDLIST= YES
387
388# The ENABLED_SECTIONS tag can be used to enable conditional
389# documentation sections, marked by \if sectionname ... \endif.
390
391ENABLED_SECTIONS =
392
393# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
394# the initial value of a variable or define consists of for it to appear in
395# the documentation. If the initializer consists of more lines than specified
396# here it will be hidden. Use a value of 0 to hide initializers completely.
397# The appearance of the initializer of individual variables and defines in the
398# documentation can be controlled using \showinitializer or \hideinitializer
399# command in the documentation regardless of this setting.
400
401MAX_INITIALIZER_LINES = 30
402
403# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
404# at the bottom of the documentation of classes and structs. If set to YES the
405# list will mention the files that were used to generate the documentation.
406
407SHOW_USED_FILES = YES
408
409# If the sources in your project are distributed over multiple directories
410# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
411# in the documentation. The default is NO.
412
413SHOW_DIRECTORIES = NO
414
415# The FILE_VERSION_FILTER tag can be used to specify a program or script that
416# doxygen should invoke to get the current version for each file (typically from the
417# version control system). Doxygen will invoke the program by executing (via
418# popen()) the command <command> <input-file>, where <command> is the value of
419# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
420# provided by doxygen. Whatever the program writes to standard output
421# is used as the file version. See the manual for examples.
422
423FILE_VERSION_FILTER =
424
425#---------------------------------------------------------------------------
426# configuration options related to warning and progress messages
427#---------------------------------------------------------------------------
428
429# The QUIET tag can be used to turn on/off the messages that are generated
430# by doxygen. Possible values are YES and NO. If left blank NO is used.
431
432QUIET = NO
433
434# The WARNINGS tag can be used to turn on/off the warning messages that are
435# generated by doxygen. Possible values are YES and NO. If left blank
436# NO is used.
437
438WARNINGS = YES
439
440# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
441# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
442# automatically be disabled.
443
444WARN_IF_UNDOCUMENTED = YES
445
446# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
447# potential errors in the documentation, such as not documenting some
448# parameters in a documented function, or documenting parameters that
449# don't exist or using markup commands wrongly.
450
451WARN_IF_DOC_ERROR = YES
452
453# This WARN_NO_PARAMDOC option can be abled to get warnings for
454# functions that are documented, but have no documentation for their parameters
455# or return value. If set to NO (the default) doxygen will only warn about
456# wrong or incomplete parameter documentation, but not about the absence of
457# documentation.
458
459WARN_NO_PARAMDOC = NO
460
461# The WARN_FORMAT tag determines the format of the warning messages that
462# doxygen can produce. The string should contain the $file, $line, and $text
463# tags, which will be replaced by the file and line number from which the
464# warning originated and the warning text. Optionally the format may contain
465# $version, which will be replaced by the version of the file (if it could
466# be obtained via FILE_VERSION_FILTER)
467
468WARN_FORMAT = "$file:$line: $text"
469
470# The WARN_LOGFILE tag can be used to specify a file to which warning
471# and error messages should be written. If left blank the output is written
472# to stderr.
473
474WARN_LOGFILE =
475
476#---------------------------------------------------------------------------
477# configuration options related to the input files
478#---------------------------------------------------------------------------
479
480# The INPUT tag can be used to specify the files and/or directories that contain
481# documented source files. You may enter file names like "myfile.cpp" or
482# directories like "/usr/src/myproject". Separate the files or directories
483# with spaces.
484
485INPUT = imgsynth
486
487# This tag can be used to specify the character encoding of the source files that
488# doxygen parses. Internally doxygen uses the UTF-8 encoding, which is also the default
489# input encoding. Doxygen uses libiconv (or the iconv built into libc) for the transcoding.
490# See http://www.gnu.org/software/libiconv for the list of possible encodings.
491
492INPUT_ENCODING = UTF-8
493
494# If the value of the INPUT tag contains directories, you can use the
495# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
496# and *.h) to filter out the source-files in the directories. If left
497# blank the following patterns are tested:
498# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
499# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py
500
501FILE_PATTERNS =
502
503# The RECURSIVE tag can be used to turn specify whether or not subdirectories
504# should be searched for input files as well. Possible values are YES and NO.
505# If left blank NO is used.
506
507RECURSIVE = NO
508
509# The EXCLUDE tag can be used to specify files and/or directories that should
510# excluded from the INPUT source files. This way you can easily exclude a
511# subdirectory from a directory tree whose root is specified with the INPUT tag.
512
513EXCLUDE =
514
515# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
516# directories that are symbolic links (a Unix filesystem feature) are excluded
517# from the input.
518
519EXCLUDE_SYMLINKS = NO
520
521# If the value of the INPUT tag contains directories, you can use the
522# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
523# certain files from those directories. Note that the wildcards are matched
524# against the file with absolute path, so to exclude all test directories
525# for example use the pattern */test/*
526
527EXCLUDE_PATTERNS =
528
529# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
530# (namespaces, classes, functions, etc.) that should be excluded from the output.
531# The symbol name can be a fully qualified name, a word, or if the wildcard * is used,
532# a substring. Examples: ANamespace, AClass, AClass::ANamespace, ANamespace::*Test
533
534EXCLUDE_SYMBOLS =
535
536# The EXAMPLE_PATH tag can be used to specify one or more files or
537# directories that contain example code fragments that are included (see
538# the \include command).
539
540EXAMPLE_PATH =
541
542# If the value of the EXAMPLE_PATH tag contains directories, you can use the
543# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
544# and *.h) to filter out the source-files in the directories. If left
545# blank all files are included.
546
547EXAMPLE_PATTERNS =
548
549# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
550# searched for input files to be used with the \include or \dontinclude
551# commands irrespective of the value of the RECURSIVE tag.
552# Possible values are YES and NO. If left blank NO is used.
553
554EXAMPLE_RECURSIVE = NO
555
556# The IMAGE_PATH tag can be used to specify one or more files or
557# directories that contain image that are included in the documentation (see
558# the \image command).
559
560IMAGE_PATH =
561
562# The INPUT_FILTER tag can be used to specify a program that doxygen should
563# invoke to filter for each input file. Doxygen will invoke the filter program
564# by executing (via popen()) the command <filter> <input-file>, where <filter>
565# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
566# input file. Doxygen will then use the output that the filter program writes
567# to standard output. If FILTER_PATTERNS is specified, this tag will be
568# ignored.
569
570INPUT_FILTER =
571
572# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
573# basis. Doxygen will compare the file name with each pattern and apply the
574# filter if there is a match. The filters are a list of the form:
575# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
576# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER
577# is applied to all files.
578
579FILTER_PATTERNS =
580
581# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
582# INPUT_FILTER) will be used to filter the input files when producing source
583# files to browse (i.e. when SOURCE_BROWSER is set to YES).
584
585FILTER_SOURCE_FILES = NO
586
587#---------------------------------------------------------------------------
588# configuration options related to source browsing
589#---------------------------------------------------------------------------
590
591# If the SOURCE_BROWSER tag is set to YES then a list of source files will
592# be generated. Documented entities will be cross-referenced with these sources.
593# Note: To get rid of all source code in the generated output, make sure also
594# VERBATIM_HEADERS is set to NO. If you have enabled CALL_GRAPH or CALLER_GRAPH
595# then you must also enable this option. If you don't then doxygen will produce
596# a warning and turn it on anyway
597
598SOURCE_BROWSER = NO
599
600# Setting the INLINE_SOURCES tag to YES will include the body
601# of functions and classes directly in the documentation.
602
603INLINE_SOURCES = NO
604
605# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
606# doxygen to hide any special comment blocks from generated source code
607# fragments. Normal C and C++ comments will always remain visible.
608
609STRIP_CODE_COMMENTS = YES
610
611# If the REFERENCED_BY_RELATION tag is set to YES (the default)
612# then for each documented function all documented
613# functions referencing it will be listed.
614
615REFERENCED_BY_RELATION = YES
616
617# If the REFERENCES_RELATION tag is set to YES (the default)
618# then for each documented function all documented entities
619# called/used by that function will be listed.
620
621REFERENCES_RELATION = YES
622
623# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
624# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
625# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
626# link to the source code. Otherwise they will link to the documentstion.
627
628REFERENCES_LINK_SOURCE = YES
629
630# If the USE_HTAGS tag is set to YES then the references to source code
631# will point to the HTML generated by the htags(1) tool instead of doxygen
632# built-in source browser. The htags tool is part of GNU's global source
633# tagging system (see http://www.gnu.org/software/global/global.html). You
634# will need version 4.8.6 or higher.
635
636USE_HTAGS = NO
637
638# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
639# will generate a verbatim copy of the header file for each class for
640# which an include is specified. Set to NO to disable this.
641
642VERBATIM_HEADERS = YES
643
644#---------------------------------------------------------------------------
645# configuration options related to the alphabetical class index
646#---------------------------------------------------------------------------
647
648# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
649# of all compounds will be generated. Enable this if the project
650# contains a lot of classes, structs, unions or interfaces.
651
652ALPHABETICAL_INDEX = NO
653
654# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
655# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
656# in which this list will be split (can be a number in the range [1..20])
657
658COLS_IN_ALPHA_INDEX = 5
659
660# In case all classes in a project start with a common prefix, all
661# classes will be put under the same header in the alphabetical index.
662# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
663# should be ignored while generating the index headers.
664
665IGNORE_PREFIX =
666
667#---------------------------------------------------------------------------
668# configuration options related to the HTML output
669#---------------------------------------------------------------------------
670
671# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
672# generate HTML output.
673
674GENERATE_HTML = YES
675
676# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
677# If a relative path is entered the value of OUTPUT_DIRECTORY will be
678# put in front of it. If left blank `html' will be used as the default path.
679
680HTML_OUTPUT = .
681
682# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
683# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
684# doxygen will generate files with .html extension.
685
686HTML_FILE_EXTENSION = .html
687
688# The HTML_HEADER tag can be used to specify a personal HTML header for
689# each generated HTML page. If it is left blank doxygen will generate a
690# standard header.
691
692HTML_HEADER =
693
694# The HTML_FOOTER tag can be used to specify a personal HTML footer for
695# each generated HTML page. If it is left blank doxygen will generate a
696# standard footer.
697
698HTML_FOOTER =
699
700# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
701# style sheet that is used by each HTML page. It can be used to
702# fine-tune the look of the HTML output. If the tag is left blank doxygen
703# will generate a default style sheet. Note that doxygen will try to copy
704# the style sheet file to the HTML output directory, so don't put your own
705# stylesheet in the HTML output directory as well, or it will be erased!
706
707HTML_STYLESHEET =
708
709# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
710# files or namespaces will be aligned in HTML using tables. If set to
711# NO a bullet list will be used.
712
713HTML_ALIGN_MEMBERS = YES
714
715# If the GENERATE_HTMLHELP tag is set to YES, additional index files
716# will be generated that can be used as input for tools like the
717# Microsoft HTML help workshop to generate a compressed HTML help file (.chm)
718# of the generated HTML documentation.
719
720GENERATE_HTMLHELP = NO
721
722# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
723# documentation will contain sections that can be hidden and shown after the
724# page has loaded. For this to work a browser that supports
725# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox
726# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
727
728HTML_DYNAMIC_SECTIONS = NO
729
730# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
731# be used to specify the file name of the resulting .chm file. You
732# can add a path in front of the file if the result should not be
733# written to the html output directory.
734
735CHM_FILE =
736
737# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
738# be used to specify the location (absolute path including file name) of
739# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
740# the HTML help compiler on the generated index.hhp.
741
742HHC_LOCATION =
743
744# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
745# controls if a separate .chi index file is generated (YES) or that
746# it should be included in the master .chm file (NO).
747
748GENERATE_CHI = NO
749
750# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
751# controls whether a binary table of contents is generated (YES) or a
752# normal table of contents (NO) in the .chm file.
753
754BINARY_TOC = NO
755
756# The TOC_EXPAND flag can be set to YES to add extra items for group members
757# to the contents of the HTML help documentation and to the tree view.
758
759TOC_EXPAND = NO
760
761# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
762# top of each HTML page. The value NO (the default) enables the index and
763# the value YES disables it.
764
765DISABLE_INDEX = NO
766
767# This tag can be used to set the number of enum values (range [1..20])
768# that doxygen will group on one line in the generated HTML documentation.
769
770ENUM_VALUES_PER_LINE = 4
771
772# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
773# generated containing a tree-like index structure (just like the one that
774# is generated for HTML Help). For this to work a browser that supports
775# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+,
776# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are
777# probably better off using the HTML help feature.
778
779GENERATE_TREEVIEW = NO
780
781# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
782# used to set the initial width (in pixels) of the frame in which the tree
783# is shown.
784
785TREEVIEW_WIDTH = 250
786
787#---------------------------------------------------------------------------
788# configuration options related to the LaTeX output
789#---------------------------------------------------------------------------
790
791# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
792# generate Latex output.
793
794GENERATE_LATEX = NO
795
796# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
797# If a relative path is entered the value of OUTPUT_DIRECTORY will be
798# put in front of it. If left blank `latex' will be used as the default path.
799
800LATEX_OUTPUT = latex
801
802# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
803# invoked. If left blank `latex' will be used as the default command name.
804
805LATEX_CMD_NAME = latex
806
807# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
808# generate index for LaTeX. If left blank `makeindex' will be used as the
809# default command name.
810
811MAKEINDEX_CMD_NAME = makeindex
812
813# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
814# LaTeX documents. This may be useful for small projects and may help to
815# save some trees in general.
816
817COMPACT_LATEX = NO
818
819# The PAPER_TYPE tag can be used to set the paper type that is used
820# by the printer. Possible values are: a4, a4wide, letter, legal and
821# executive. If left blank a4wide will be used.
822
823PAPER_TYPE = a4wide
824
825# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
826# packages that should be included in the LaTeX output.
827
828EXTRA_PACKAGES =
829
830# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
831# the generated latex document. The header should contain everything until
832# the first chapter. If it is left blank doxygen will generate a
833# standard header. Notice: only use this tag if you know what you are doing!
834
835LATEX_HEADER =
836
837# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
838# is prepared for conversion to pdf (using ps2pdf). The pdf file will
839# contain links (just like the HTML output) instead of page references
840# This makes the output suitable for online browsing using a pdf viewer.
841
842PDF_HYPERLINKS = NO
843
844# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
845# plain latex in the generated Makefile. Set this option to YES to get a
846# higher quality PDF documentation.
847
848USE_PDFLATEX = NO
849
850# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
851# command to the generated LaTeX files. This will instruct LaTeX to keep
852# running if errors occur, instead of asking the user for help.
853# This option is also used when generating formulas in HTML.
854
855LATEX_BATCHMODE = NO
856
857# If LATEX_HIDE_INDICES is set to YES then doxygen will not
858# include the index chapters (such as File Index, Compound Index, etc.)
859# in the output.
860
861LATEX_HIDE_INDICES = NO
862
863#---------------------------------------------------------------------------
864# configuration options related to the RTF output
865#---------------------------------------------------------------------------
866
867# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
868# The RTF output is optimized for Word 97 and may not look very pretty with
869# other RTF readers or editors.
870
871GENERATE_RTF = NO
872
873# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
874# If a relative path is entered the value of OUTPUT_DIRECTORY will be
875# put in front of it. If left blank `rtf' will be used as the default path.
876
877RTF_OUTPUT = rtf
878
879# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
880# RTF documents. This may be useful for small projects and may help to
881# save some trees in general.
882
883COMPACT_RTF = NO
884
885# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
886# will contain hyperlink fields. The RTF file will
887# contain links (just like the HTML output) instead of page references.
888# This makes the output suitable for online browsing using WORD or other
889# programs which support those fields.
890# Note: wordpad (write) and others do not support links.
891
892RTF_HYPERLINKS = NO
893
894# Load stylesheet definitions from file. Syntax is similar to doxygen's
895# config file, i.e. a series of assignments. You only have to provide
896# replacements, missing definitions are set to their default value.
897
898RTF_STYLESHEET_FILE =
899
900# Set optional variables used in the generation of an rtf document.
901# Syntax is similar to doxygen's config file.
902
903RTF_EXTENSIONS_FILE =
904
905#---------------------------------------------------------------------------
906# configuration options related to the man page output
907#---------------------------------------------------------------------------
908
909# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
910# generate man pages
911
912GENERATE_MAN = NO
913
914# The MAN_OUTPUT tag is used to specify where the man pages will be put.
915# If a relative path is entered the value of OUTPUT_DIRECTORY will be
916# put in front of it. If left blank `man' will be used as the default path.
917
918MAN_OUTPUT = man
919
920# The MAN_EXTENSION tag determines the extension that is added to
921# the generated man pages (default is the subroutine's section .3)
922
923MAN_EXTENSION = .3
924
925# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
926# then it will generate one additional man file for each entity
927# documented in the real man page(s). These additional files
928# only source the real man page, but without them the man command
929# would be unable to find the correct page. The default is NO.
930
931MAN_LINKS = NO
932
933#---------------------------------------------------------------------------
934# configuration options related to the XML output
935#---------------------------------------------------------------------------
936
937# If the GENERATE_XML tag is set to YES Doxygen will
938# generate an XML file that captures the structure of
939# the code including all documentation.
940
941GENERATE_XML = NO
942
943# The XML_OUTPUT tag is used to specify where the XML pages will be put.
944# If a relative path is entered the value of OUTPUT_DIRECTORY will be
945# put in front of it. If left blank `xml' will be used as the default path.
946
947XML_OUTPUT = xml
948
949# The XML_SCHEMA tag can be used to specify an XML schema,
950# which can be used by a validating XML parser to check the
951# syntax of the XML files.
952
953XML_SCHEMA =
954
955# The XML_DTD tag can be used to specify an XML DTD,
956# which can be used by a validating XML parser to check the
957# syntax of the XML files.
958
959XML_DTD =
960
961# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
962# dump the program listings (including syntax highlighting
963# and cross-referencing information) to the XML output. Note that
964# enabling this will significantly increase the size of the XML output.
965
966XML_PROGRAMLISTING = YES
967
968#---------------------------------------------------------------------------
969# configuration options for the AutoGen Definitions output
970#---------------------------------------------------------------------------
971
972# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
973# generate an AutoGen Definitions (see autogen.sf.net) file
974# that captures the structure of the code including all
975# documentation. Note that this feature is still experimental
976# and incomplete at the moment.
977
978GENERATE_AUTOGEN_DEF = NO
979
980#---------------------------------------------------------------------------
981# configuration options related to the Perl module output
982#---------------------------------------------------------------------------
983
984# If the GENERATE_PERLMOD tag is set to YES Doxygen will
985# generate a Perl module file that captures the structure of
986# the code including all documentation. Note that this
987# feature is still experimental and incomplete at the
988# moment.
989
990GENERATE_PERLMOD = NO
991
992# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
993# the necessary Makefile rules, Perl scripts and LaTeX code to be able
994# to generate PDF and DVI output from the Perl module output.
995
996PERLMOD_LATEX = NO
997
998# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
999# nicely formatted so it can be parsed by a human reader. This is useful
1000# if you want to understand what is going on. On the other hand, if this
1001# tag is set to NO the size of the Perl module output will be much smaller
1002# and Perl will parse it just the same.
1003
1004PERLMOD_PRETTY = YES
1005
1006# The names of the make variables in the generated doxyrules.make file
1007# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
1008# This is useful so different doxyrules.make files included by the same
1009# Makefile don't overwrite each other's variables.
1010
1011PERLMOD_MAKEVAR_PREFIX =
1012
1013#---------------------------------------------------------------------------
1014# Configuration options related to the preprocessor
1015#---------------------------------------------------------------------------
1016
1017# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
1018# evaluate all C-preprocessor directives found in the sources and include
1019# files.
1020
1021ENABLE_PREPROCESSING = YES
1022
1023# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
1024# names in the source code. If set to NO (the default) only conditional
1025# compilation will be performed. Macro expansion can be done in a controlled
1026# way by setting EXPAND_ONLY_PREDEF to YES.
1027
1028MACRO_EXPANSION = NO
1029
1030# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
1031# then the macro expansion is limited to the macros specified with the
1032# PREDEFINED and EXPAND_AS_DEFINED tags.
1033
1034EXPAND_ONLY_PREDEF = NO
1035
1036# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
1037# in the INCLUDE_PATH (see below) will be search if a #include is found.
1038
1039SEARCH_INCLUDES = YES
1040
1041# The INCLUDE_PATH tag can be used to specify one or more directories that
1042# contain include files that are not input files but should be processed by
1043# the preprocessor.
1044
1045INCLUDE_PATH =
1046
1047# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
1048# patterns (like *.h and *.hpp) to filter out the header-files in the
1049# directories. If left blank, the patterns specified with FILE_PATTERNS will
1050# be used.
1051
1052INCLUDE_FILE_PATTERNS =
1053
1054# The PREDEFINED tag can be used to specify one or more macro names that
1055# are defined before the preprocessor is started (similar to the -D option of
1056# gcc). The argument of the tag is a list of macros of the form: name
1057# or name=definition (no spaces). If the definition and the = are
1058# omitted =1 is assumed. To prevent a macro definition from being
1059# undefined via #undef or recursively expanded use the := operator
1060# instead of the = operator.
1061
1062PREDEFINED =
1063
1064# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
1065# this tag can be used to specify a list of macro names that should be expanded.
1066# The macro definition that is found in the sources will be used.
1067# Use the PREDEFINED tag if you want to use a different macro definition.
1068
1069EXPAND_AS_DEFINED =
1070
1071# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
1072# doxygen's preprocessor will remove all function-like macros that are alone
1073# on a line, have an all uppercase name, and do not end with a semicolon. Such
1074# function macros are typically used for boiler-plate code, and will confuse
1075# the parser if not removed.
1076
1077SKIP_FUNCTION_MACROS = YES
1078
1079#---------------------------------------------------------------------------
1080# Configuration::additions related to external references
1081#---------------------------------------------------------------------------
1082
1083# The TAGFILES option can be used to specify one or more tagfiles.
1084# Optionally an initial location of the external documentation
1085# can be added for each tagfile. The format of a tag file without
1086# this location is as follows:
1087# TAGFILES = file1 file2 ...
1088# Adding location for the tag files is done as follows:
1089# TAGFILES = file1=loc1 "file2 = loc2" ...
1090# where "loc1" and "loc2" can be relative or absolute paths or
1091# URLs. If a location is present for each tag, the installdox tool
1092# does not have to be run to correct the links.
1093# Note that each tag file must have a unique name
1094# (where the name does NOT include the path)
1095# If a tag file is not located in the directory in which doxygen
1096# is run, you must also specify the path to the tagfile here.
1097
1098TAGFILES =
1099
1100# When a file name is specified after GENERATE_TAGFILE, doxygen will create
1101# a tag file that is based on the input files it reads.
1102
1103GENERATE_TAGFILE =
1104
1105# If the ALLEXTERNALS tag is set to YES all external classes will be listed
1106# in the class index. If set to NO only the inherited external classes
1107# will be listed.
1108
1109ALLEXTERNALS = NO
1110
1111# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
1112# in the modules index. If set to NO, only the current project's groups will
1113# be listed.
1114
1115EXTERNAL_GROUPS = YES
1116
1117# The PERL_PATH should be the absolute path and name of the perl script
1118# interpreter (i.e. the result of `which perl').
1119
1120PERL_PATH = /usr/bin/perl
1121
1122#---------------------------------------------------------------------------
1123# Configuration options related to the dot tool
1124#---------------------------------------------------------------------------
1125
1126# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
1127# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
1128# or super classes. Setting the tag to NO turns the diagrams off. Note that
1129# this option is superseded by the HAVE_DOT option below. This is only a
1130# fallback. It is recommended to install and use dot, since it yields more
1131# powerful graphs.
1132
1133CLASS_DIAGRAMS = YES
1134
1135# You can define message sequence charts within doxygen comments using the \msc
1136# command. Doxygen will then run the mscgen tool (see http://www.mcternan.me.uk/mscgen/) to
1137# produce the chart and insert it in the documentation. The MSCGEN_PATH tag allows you to
1138# specify the directory where the mscgen tool resides. If left empty the tool is assumed to
1139# be found in the default search path.
1140
1141MSCGEN_PATH =
1142
1143# If set to YES, the inheritance and collaboration graphs will hide
1144# inheritance and usage relations if the target is undocumented
1145# or is not a class.
1146
1147HIDE_UNDOC_RELATIONS = YES
1148
1149# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
1150# available from the path. This tool is part of Graphviz, a graph visualization
1151# toolkit from AT&T and Lucent Bell Labs. The other options in this section
1152# have no effect if this option is set to NO (the default)
1153
1154HAVE_DOT = NO
1155
1156# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
1157# will generate a graph for each documented class showing the direct and
1158# indirect inheritance relations. Setting this tag to YES will force the
1159# the CLASS_DIAGRAMS tag to NO.
1160
1161CLASS_GRAPH = YES
1162
1163# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
1164# will generate a graph for each documented class showing the direct and
1165# indirect implementation dependencies (inheritance, containment, and
1166# class references variables) of the class with other documented classes.
1167
1168COLLABORATION_GRAPH = YES
1169
1170# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
1171# will generate a graph for groups, showing the direct groups dependencies
1172
1173GROUP_GRAPHS = YES
1174
1175# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
1176# collaboration diagrams in a style similar to the OMG's Unified Modeling
1177# Language.
1178
1179UML_LOOK = NO
1180
1181# If set to YES, the inheritance and collaboration graphs will show the
1182# relations between templates and their instances.
1183
1184TEMPLATE_RELATIONS = NO
1185
1186# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
1187# tags are set to YES then doxygen will generate a graph for each documented
1188# file showing the direct and indirect include dependencies of the file with
1189# other documented files.
1190
1191INCLUDE_GRAPH = YES
1192
1193# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
1194# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
1195# documented header file showing the documented files that directly or
1196# indirectly include this file.
1197
1198INCLUDED_BY_GRAPH = YES
1199
1200# If the CALL_GRAPH, SOURCE_BROWSER and HAVE_DOT tags are set to YES then doxygen will
1201# generate a call dependency graph for every global function or class method.
1202# Note that enabling this option will significantly increase the time of a run.
1203# So in most cases it will be better to enable call graphs for selected
1204# functions only using the \callgraph command.
1205
1206CALL_GRAPH = NO
1207
1208# If the CALLER_GRAPH, SOURCE_BROWSER and HAVE_DOT tags are set to YES then doxygen will
1209# generate a caller dependency graph for every global function or class method.
1210# Note that enabling this option will significantly increase the time of a run.
1211# So in most cases it will be better to enable caller graphs for selected
1212# functions only using the \callergraph command.
1213
1214CALLER_GRAPH = NO
1215
1216# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
1217# will graphical hierarchy of all classes instead of a textual one.
1218
1219GRAPHICAL_HIERARCHY = YES
1220
1221# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES
1222# then doxygen will show the dependencies a directory has on other directories
1223# in a graphical way. The dependency relations are determined by the #include
1224# relations between the files in the directories.
1225
1226DIRECTORY_GRAPH = YES
1227
1228# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
1229# generated by dot. Possible values are png, jpg, or gif
1230# If left blank png will be used.
1231
1232DOT_IMAGE_FORMAT = png
1233
1234# The tag DOT_PATH can be used to specify the path where the dot tool can be
1235# found. If left blank, it is assumed the dot tool can be found in the path.
1236
1237DOT_PATH =
1238
1239# The DOTFILE_DIRS tag can be used to specify one or more directories that
1240# contain dot files that are included in the documentation (see the
1241# \dotfile command).
1242
1243DOTFILE_DIRS =
1244
1245# The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
1246# nodes that will be shown in the graph. If the number of nodes in a graph
1247# becomes larger than this value, doxygen will truncate the graph, which is
1248# visualized by representing a node as a red box. Note that doxygen if the number
1249# of direct children of the root node in a graph is already larger than
1250# MAX_DOT_GRAPH_NOTES then the graph will not be shown at all. Also note
1251# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
1252
1253DOT_GRAPH_MAX_NODES = 50
1254
1255# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
1256# graphs generated by dot. A depth value of 3 means that only nodes reachable
1257# from the root by following a path via at most 3 edges will be shown. Nodes
1258# that lay further from the root node will be omitted. Note that setting this
1259# option to 1 or 2 may greatly reduce the computation time needed for large
1260# code bases. Also note that the size of a graph can be further restricted by
1261# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
1262
1263MAX_DOT_GRAPH_DEPTH = 0
1264
1265# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
1266# background. This is disabled by default, which results in a white background.
1267# Warning: Depending on the platform used, enabling this option may lead to
1268# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
1269# read).
1270
1271DOT_TRANSPARENT = NO
1272
1273# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
1274# files in one run (i.e. multiple -o and -T options on the command line). This
1275# makes dot run faster, but since only newer versions of dot (>1.8.10)
1276# support this, this feature is disabled by default.
1277
1278DOT_MULTI_TARGETS = NO
1279
1280# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
1281# generate a legend page explaining the meaning of the various boxes and
1282# arrows in the dot generated graphs.
1283
1284GENERATE_LEGEND = YES
1285
1286# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
1287# remove the intermediate dot files that are used to generate
1288# the various graphs.
1289
1290DOT_CLEANUP = YES
1291
1292#---------------------------------------------------------------------------
1293# Configuration::additions related to the search engine
1294#---------------------------------------------------------------------------
1295
1296# The SEARCHENGINE tag specifies whether or not a search engine should be
1297# used. If set to NO the values of all tags below this one will be ignored.
1298
1299SEARCHENGINE = NO
diff --git a/ue2/imgsynth2/Makefile b/ue2/imgsynth2/Makefile
new file mode 100644
index 0000000..cbf3d33
--- /dev/null
+++ b/ue2/imgsynth2/Makefile
@@ -0,0 +1,41 @@
1# Makefile for imgsynth2
2# Author: Guenther Neuwirth (0626638), Manuel Mausz (0728348)
3# Created: 26.04.2009
4
5CC= g++
6LD= $(CC)
7DEBUGFLAGS= -DNDEBUG
8CFLAGS= -O -ansi -pedantic-errors -Wall $(DEBUGFLAGS)
9LDFLAGS=
10LIBS= -lboost_program_options
11
12BIN= imgsynth2
13OBJS= cpixelformat_bgr24.o cpixelformat_bgr555.o \
14 cbitmap.o cscriptparser.o imgsynth2.o
15HEADERS= cpixelformat.h cpixelformat_bgr24.h cpixelformat_bgr555.h \
16 cfile.h cbitmap.h cscriptparser.h
17
18.SUFFIXES: .cpp .o
19
20all: $(BIN)
21
22.cpp.o:
23 $(CC) $(CFLAGS) -c $< -o $@
24
25$(OBJS): $(HEADERS)
26
27$(BIN): $(OBJS)
28 $(LD) $(LDFLAGS) -o $@ $(OBJS) $(LIBS)
29
30debug:
31 @$(MAKE) all "DEBUGFLAGS=-DDEBUG -g"
32
33clean:
34 rm -f $(OBJS) $(BIN)
35
36run test: all
37 @./test/test.sh
38
39.PHONY: clean
40
41# vim600: noet sw=8 ts=8
diff --git a/ue2/imgsynth2/cbitmap.cpp b/ue2/imgsynth2/cbitmap.cpp
new file mode 100644
index 0000000..fc1a7c0
--- /dev/null
+++ b/ue2/imgsynth2/cbitmap.cpp
@@ -0,0 +1,382 @@
1/**
2 * @module cbitmap
3 * @author Guenther Neuwirth (0626638), Manuel Mausz (0728348)
4 * @brief Implementation of CFile handling Windows Bitmaps.
5 * @date 17.04.2009
6 */
7
8#include <boost/lexical_cast.hpp>
9#include <boost/numeric/conversion/cast.hpp>
10#ifdef DEBUG
11# include <iostream>
12#endif
13#include "cbitmap.h"
14#include "cpixelformat_bgr24.h"
15#include "cpixelformat_bgr555.h"
16
17using namespace std;
18
19CBitmap::CBitmap()
20 : m_pixeldata(NULL), m_pixelformat(NULL)
21{
22 m_types.insert("BMP");
23
24 /* add our handlers */
25 m_handlers.insert(new CPixelFormat_BGR24(this));
26 m_handlers.insert(new CPixelFormat_BGR555(this));
27}
28
29/*----------------------------------------------------------------------------*/
30
31CBitmap::~CBitmap()
32{
33 /* delete pixeldata */
34 if (m_pixeldata != NULL)
35 delete[] m_pixeldata;
36 m_pixeldata = NULL;
37
38 /* delete pixelformat handlers */
39 set<CPixelFormat *>::iterator it;
40 for (it = m_handlers.begin(); it != m_handlers.end(); it++)
41 delete *it;
42 m_pixelformat = NULL;
43}
44
45/*----------------------------------------------------------------------------*/
46
47void CBitmap::read(std::ifstream& in)
48{
49 /* read and check file header */
50 in.read(reinterpret_cast<char *>(&m_fileheader), sizeof(m_fileheader));
51
52 if (m_fileheader.bfType[0] != 'B' || m_fileheader.bfType[1] != 'M')
53 throw FileError("Imagefile has invalid Bitmap header.");
54 /* bfSize is unreliable (http://de.wikipedia.org/wiki/Windows_Bitmap) */
55 if (m_fileheader.bfSize < 0)
56 throw FileError("Bitmap filesize is less than zero?");
57
58 /* read and check info header */
59 in.read(reinterpret_cast<char *>(&m_infoheader), sizeof(m_infoheader));
60
61 if (m_infoheader.biSize != 40)
62 throw FileError("Bitmap info header size is invalid.");
63 if (m_infoheader.biPlanes != 1)
64 throw FileError("Bitmap color planes is not set to 1.");
65 if (m_infoheader.biCompression != 0)
66 throw FileError("Bitmap compression is set but not supported.");
67 if (m_infoheader.biSizeImage < 0)
68 throw FileError("Bitmap image size is less than zero?");
69 if (m_infoheader.biClrUsed != 0 || m_infoheader.biClrImportant != 0)
70 throw FileError("Bitmap colortable is used but not supported.");
71
72 /* read pixel data using separate class */
73 if (m_infoheader.biSizeImage > 0)
74 {
75 if (m_pixeldata != NULL)
76 delete[] m_pixeldata;
77 m_pixeldata = new uint8_t[m_infoheader.biSizeImage];
78 in.read(reinterpret_cast<char *>(m_pixeldata), m_infoheader.biSizeImage);
79 }
80
81 /* get pixelformat instance */
82 m_pixelformat = NULL;
83 set<CPixelFormat *>::iterator it;
84 for (it = m_handlers.begin(); it != m_handlers.end(); it++)
85 {
86 if (m_infoheader.biBitCount == (*it)->getBitCount())
87 {
88 m_pixelformat = *it;
89 break;
90 }
91 }
92 if (m_pixelformat == NULL)
93 throw FileError("Bitmap bitcount is not supported.");
94}
95
96/*----------------------------------------------------------------------------*/
97
98void CBitmap::write(std::ofstream& out)
99{
100 /* set header values */
101 m_fileheader.bfSize = m_infoheader.biSizeImage + sizeof(m_infoheader) + sizeof(m_fileheader);
102
103 /* write file header */
104 out.write(reinterpret_cast<char *>(&m_fileheader), sizeof(m_fileheader));
105
106 /* write info header */
107 out.write(reinterpret_cast<char *>(&m_infoheader), sizeof(m_infoheader));
108
109 /* write pixel data */
110 if (m_pixeldata != NULL)
111 out.write(reinterpret_cast<char *>(m_pixeldata), m_infoheader.biSizeImage);
112}
113
114/*----------------------------------------------------------------------------*/
115
116void CBitmap::callFunc(const std::string& func, const std::list<std::string>& params)
117{
118 if (func.empty())
119 throw FileError("Function name is empty.");
120
121 if (func == "fillrect")
122 fillrect(params);
123 else if (func == "mirror_x")
124 mirror_x(params);
125 else if (func == "mirror_y")
126 mirror_y(params);
127 else if (func == "invert")
128 invert(params);
129 else
130 throw FileError("Unknown function '" + func + "'.");
131}
132
133/*----------------------------------------------------------------------------*/
134
135void CBitmap::fillrect(std::list<std::string> params)
136{
137 /* check prerequirements */
138 if (params.size() != 7)
139 throw FileError("Invalid number of function parameters (must be 7).");
140
141 /* do nothing if no pixel exists */
142 if (m_pixeldata == NULL || m_pixelformat == NULL)
143 return;
144
145 /* convert parameters */
146 uint32_t pparams[7];
147 int i = 0;
148 try
149 {
150 for(i = 0; i < 7; i++)
151 {
152 pparams[i] = boost::lexical_cast<uint32_t>(params.front());
153 params.pop_front();
154 }
155 }
156 catch(boost::bad_lexical_cast& ex)
157 {
158 throw FileError("Invalid parameter (" + params.front() + ").");
159 }
160
161 /* width and height can be negativ */
162 uint32_t width = static_cast<uint32_t>(abs(m_infoheader.biWidth));
163 uint32_t height = static_cast<uint32_t>(abs(m_infoheader.biHeight));
164
165 /* check parameter values are in range */
166 if (pparams[0] < 0 || pparams[0] > width
167 || pparams[1] < 0 || pparams[1] > height)
168 throw FileError("At least one x/y-parameter is out of range.");
169
170 /* check parameter values are in range */
171 unsigned int max[3];
172 m_pixelformat->getMaxColor(&max[0], &max[1], &max[2]);
173 if (pparams[4] < 0 || pparams[4] > max[0]
174 || pparams[5] < 0 || pparams[5] > max[1]
175 || pparams[6] < 0 || pparams[6] > max[2])
176 throw FileError("At least one pixel color parameter is out of range.");
177
178 if (pparams[2] < 0 || pparams[2] + pparams[0] > width
179 || pparams[3] < 0 || pparams[3] + pparams[1] > height)
180 throw FileError("At least one w/h-parameter is out of range.");
181
182 /* call setPixel for every pixel in the rectangel */
183 for(uint32_t i = pparams[0]; i < pparams[2] + pparams[0]; i++)
184 {
185 for(uint32_t j = pparams[1]; j < pparams[3] + pparams[1]; j++)
186 {
187 try
188 {
189 m_pixelformat->setPixel(&pparams[4], i, j);
190 }
191 catch(CPixelFormat::PixelFormatError& ex)
192 {
193 stringstream errstr;
194 errstr << "Can't set pixel (pos=[" << i << "," << j << "] col=["
195 << pparams[4] << "," << pparams[5] << "," << pparams[6] << "]): "
196 << ex.what();
197 throw FileError(errstr.str());
198 }
199 }
200 }
201}
202
203/*----------------------------------------------------------------------------*/
204
205#include <iostream>
206void CBitmap::invert(std::list<std::string> params)
207{
208 /* check prerequirements */
209 if (params.size() != 0)
210 throw FileError("Invalid number of function parameters (must be 0).");
211
212 /* do nothing if no pixel exists */
213 if (m_pixeldata == NULL || m_pixelformat == NULL)
214 return;
215
216 /* width and height can be negativ */
217 uint32_t width = static_cast<uint32_t>(abs(m_infoheader.biWidth));
218 uint32_t height = static_cast<uint32_t>(abs(m_infoheader.biHeight));
219 unsigned int pixelwidth = m_pixelformat->getBitCount()/8;
220
221 /* calc rowsize - boundary is 32 */
222 uint32_t rowsize = 4 * static_cast<uint32_t>(
223 ((m_pixelformat->getBitCount() * abs(m_infoheader.biWidth)) + 31) / 32
224 );
225
226 for(uint32_t i = 0; i < height; i++)
227 {
228 for(uint32_t j = 0; j <= width; j++)
229 {
230 cout << j << endl;
231 }
232 }
233
234#if 0
235/* uint32_t offset = i * rowsize;
236
237 for(uint32_t j = 0; j <= width/2; j++)
238 {
239 uint32_t poffset = offset + j * pixelwidth;
240 uint32_t pbackset = offset + width * pixelwidth - j * pixelwidth;
241
242 /* boundary check */
243 if (pbackset > m_infoheader.biSizeImage)
244 throw FileError("Mirrored pixel position is out of range.");
245
246 /* mirroring, backup right data first */
247 copy(m_pixeldata + pbackset - pixelwidth, m_pixeldata + pbackset, buf);
248 copy(m_pixeldata + poffset, m_pixeldata + poffset + pixelwidth, m_pixeldata + pbackset - pixelwidth);
249 copy(buf, buf + pixelwidth, m_pixeldata + poffset);
250 }
251 }
252#endif
253}
254
255/*----------------------------------------------------------------------------*/
256
257void CBitmap::brightness(std::list<std::string> params)
258{
259}
260
261/*----------------------------------------------------------------------------*/
262
263void CBitmap::mirror_y(std::list<std::string> params)
264{
265 /* check prerequirements */
266 if (params.size() != 0)
267 throw FileError("Invalid number of function parameters (must be 0).");
268
269 /* do nothing if no pixel exists */
270 if (m_pixeldata == NULL || m_pixelformat == NULL)
271 return;
272
273 /* height can be negativ */
274 uint32_t height = static_cast<uint32_t>(abs(m_infoheader.biHeight));
275
276 /* calc rowsize - boundary is 32 */
277 uint32_t rowsize = 4 * static_cast<uint32_t>(
278 ((m_pixelformat->getBitCount() * abs(m_infoheader.biWidth)) + 31) / 32
279 );
280
281 uint8_t *buf = new uint8_t[rowsize];
282 for(uint32_t i = 0; i < height/2; i++)
283 {
284 uint32_t j = height - i - 1;
285 uint32_t offset = i * rowsize;
286 uint32_t backset = j * rowsize;
287
288 /* boundary check */
289 if (offset + rowsize > m_infoheader.biSizeImage
290 || backset + rowsize > m_infoheader.biSizeImage)
291 throw FileError("Mirrored pixel position is out of range.");
292
293 /* mirroring, backup lower data first */
294 copy(m_pixeldata + backset, m_pixeldata + backset + rowsize, buf);
295 copy(m_pixeldata + offset, m_pixeldata + offset + rowsize, m_pixeldata + backset);
296 copy(buf, buf + rowsize, m_pixeldata + offset);
297 }
298 delete[] buf;
299}
300
301/*----------------------------------------------------------------------------*/
302
303void CBitmap::mirror_x(std::list<std::string> params)
304{
305 /* check prerequirements */
306 if (params.size() != 0)
307 throw FileError("Invalid number of function parameters (must be 0).");
308
309 /* do nothing if no pixel exists */
310 if (m_pixeldata == NULL || m_pixelformat == NULL)
311 return;
312
313 /* width and height can be negativ */
314 uint32_t width = static_cast<uint32_t>(abs(m_infoheader.biWidth));
315 uint32_t height = static_cast<uint32_t>(abs(m_infoheader.biHeight));
316
317 /* calc rowsize - boundary is 32 */
318 uint32_t rowsize = 4 * static_cast<uint32_t>(
319 ((m_pixelformat->getBitCount() * abs(m_infoheader.biWidth)) + 31) / 32
320 );
321
322 /* calc pixelwidth */
323 unsigned int pixelwidth = m_pixelformat->getBitCount()/8;
324
325 uint8_t *buf = new uint8_t[pixelwidth];
326 for(uint32_t i = 0; i < height; i++)
327 {
328 uint32_t offset = i * rowsize;
329
330 for(uint32_t j = 0; j <= width/2; j++)
331 {
332 uint32_t poffset = offset + j * pixelwidth;
333 uint32_t pbackset = offset + width * pixelwidth - j * pixelwidth;
334
335 /* boundary check */
336 if (pbackset > m_infoheader.biSizeImage)
337 throw FileError("Mirrored pixel position is out of range.");
338
339 /* mirroring, backup right data first */
340 copy(m_pixeldata + pbackset - pixelwidth, m_pixeldata + pbackset, buf);
341 copy(m_pixeldata + poffset, m_pixeldata + poffset + pixelwidth, m_pixeldata + pbackset - pixelwidth);
342 copy(buf, buf + pixelwidth, m_pixeldata + poffset);
343 }
344 }
345 delete[] buf;
346}
347
348/*----------------------------------------------------------------------------*/
349
350#ifdef DEBUG
351void CBitmap::dump(std::ostream& out)
352{
353 out
354 << "Bitmap File Header:" << endl
355 << " bfType=" << m_fileheader.bfType[0] << m_fileheader.bfType[1]
356 << ", bfSize=" << m_fileheader.bfSize
357 << ", bfReserved=" << m_fileheader.bfReserved
358 << ", bfOffBits=" << m_fileheader.bfOffBits
359 << endl;
360
361 out
362 << "Bitmap Info Header:" << endl
363 << " biSize=" << m_infoheader.biSize
364 << ", biWidth=" << m_infoheader.biWidth
365 << ", biHeight=" << m_infoheader.biHeight
366 << ", biPlanes=" << m_infoheader.biPlanes
367 << endl
368
369 << " biBitCount=" << m_infoheader.biBitCount
370 << ", biCompression=" << m_infoheader.biCompression
371 << ", biSizeImage=" << m_infoheader.biSizeImage
372 << endl
373
374 << " biXPelsPerMeter=" << m_infoheader.biXPelsPerMeter
375 << ", biYPelsPerMeter=" << m_infoheader.biYPelsPerMeter
376 << ", biClrUsed=" << m_infoheader.biClrUsed
377 << ", biClrImportant=" << m_infoheader.biClrImportant
378 << endl;
379}
380#endif
381
382/* vim: set et sw=2 ts=2: */
diff --git a/ue2/imgsynth2/cbitmap.h b/ue2/imgsynth2/cbitmap.h
new file mode 100644
index 0000000..ca3d6ef
--- /dev/null
+++ b/ue2/imgsynth2/cbitmap.h
@@ -0,0 +1,236 @@
1/**
2 * @module cbitmap
3 * @author Guenther Neuwirth (0626638), Manuel Mausz (0728348)
4 * @brief Implementation of CFile handling Windows Bitmaps.
5 * @date 17.04.2009
6 */
7
8#ifndef CBITMAP_H
9#define CBITMAP_H
10
11#include <stdint.h>
12#include "cfile.h"
13
14class CPixelFormat;
15#include "cpixelformat.h"
16
17/**
18 * @class CBitmap
19 * @brief Implementation of CFile handling Windows Bitmaps.
20 *
21 * In order to support operations on bitmaps with different color bitcounts
22 * different implementations of CPixelFormat are used. These classes are
23 * allowed to modify the bitmap headers and pixelbuffer directly.
24 *
25 * On error CFile::FileError is thrown.
26 */
27class CBitmap : public CFile
28{
29 public:
30 /**
31 * @method CBitmap
32 * @brief Default ctor
33 * @param -
34 * @return -
35 * @globalvars none
36 * @exception none
37 * @conditions none
38 */
39 CBitmap();
40
41 /**
42 * @method ~CBitmap
43 * @brief Default dtor
44 * @param -
45 * @return -
46 * @globalvars none
47 * @exception none
48 * @conditions none
49 */
50 ~CBitmap();
51
52 /**
53 * @method read
54 * @brief Reads Windows Bitmap from filestream.
55 * On error an exception is thrown.
56 * @param in filestream to read data from
57 * @return -
58 * @globalvars none
59 * @exception CFile::FileError
60 * @exception bad_alloc
61 * @conditions none
62 */
63 void read(std::ifstream& in);
64
65 /**
66 * @method write
67 * @brief Writes Windows Bitmap to filestream.
68 * @param out filestream to read data from
69 * @return -
70 * @globalvars none
71 * @exception FileError
72 * @exception bad_alloc
73 * @conditions none
74 */
75 void write(std::ofstream& out);
76
77 /**
78 * @method callFunc
79 * @brief Delegates the function and its parameters to the correct
80 * internal method
81 * @param func function name
82 * @param params function parameters as list
83 * @return -
84 * @globalvars none
85 * @exception ParserError
86 * @conditions none
87 */
88 void callFunc(const std::string& func, const std::list<std::string>& params);
89
90#ifdef DEBUG
91 /**
92 * @method dump
93 * @brief Dumps the Windows Bitmap file headers to ostream
94 * @param out output stream
95 * @return -
96 * @globalvars
97 * @exception
98 * @conditions
99 */
100 void dump(std::ostream& out);
101#endif
102
103 /**
104 * @brief Windows Bitmap File Header structure
105 */
106#pragma pack(push,1)
107 typedef struct
108 {
109 /** the magic number used to identify the BMP file */
110 uint8_t bfType[2];
111 /** the size of the BMP file in bytes */
112 uint32_t bfSize;
113 /** reserved */
114 uint32_t bfReserved;
115 /** the offset of the byte where the bitmap data can be found */
116 uint32_t bfOffBits;
117 } BITMAP_FILEHEADER;
118#pragma pack(pop)
119
120 /**
121 * @brief Windows Bitmap Info Header structure
122 */
123#pragma pack(push,1)
124 typedef struct
125 {
126 /** the size of this header (40 bytes) */
127 uint32_t biSize;
128 /** the bitmap width in pixels (signed integer) */
129 int32_t biWidth;
130 /** the bitmap height in pixels (signed integer) */
131 int32_t biHeight;
132 /** the number of color planes being used. Must be set to 1 */
133 uint16_t biPlanes;
134 /** the number of bits per pixel, which is the color depth of the image */
135 uint16_t biBitCount;
136 /** the compression method being used */
137 uint32_t biCompression;
138 /** the image size */
139 uint32_t biSizeImage;
140 /** the horizontal resolution of the image (pixel per meter) */
141 int32_t biXPelsPerMeter;
142 /** the vertical resolution of the image (pixel per meter) */
143 int32_t biYPelsPerMeter;
144 /** the number of colors in the color palette, or 0 to default to 2^n */
145 uint32_t biClrUsed;
146 /** the number of important colors used, or 0 when every color is
147 * important; generally ignored. */
148 uint32_t biClrImportant;
149 } BITMAP_INFOHEADER;
150#pragma pack(pop)
151
152 /**
153 * @method getFileHeader
154 * @brief Returns reference to fileheader structure of bitmap
155 * @param -
156 * @return reference to fileheader structure
157 * @globalvars none
158 * @exception none
159 * @conditions none
160 */
161 BITMAP_FILEHEADER &getFileHeader()
162 {
163 return m_fileheader;
164 }
165
166 /**
167 * @method getInfoHeader
168 * @brief Returns reference to infoheader structure of bitmap
169 * @param -
170 * @return reference to infoheader structure
171 * @globalvars none
172 * @exception none
173 * @conditions none
174 */
175 BITMAP_INFOHEADER &getInfoHeader()
176 {
177 return m_infoheader;
178 }
179
180 /**
181 * @method getPixelData
182 * @brief Returns pointer to pixelbuffer
183 * @param -
184 * @return pointer to pixelbuffer
185 * @globalvars none
186 * @exception none
187 * @conditions none
188 */
189 uint8_t *getPixelData()
190 {
191 return m_pixeldata;
192 }
193
194 protected:
195 /**
196 * @method fillrect
197 * @brief Fills rectangle in image starting on position x, y
198 * width size width, height and color red, green, blue.
199 * @param params function parameters as list
200 * @return -
201 * @globalvars none
202 * @exception FileError
203 * @conditions none
204 *
205 * Scriptfile syntax: fillrect(x, y, width, height, red, green, blue)
206 */
207 void fillrect(std::list<std::string> params);
208
209 /* TODO */
210 void invert(std::list<std::string> params);
211
212 /* TODO */
213 void brightness(std::list<std::string> params);
214
215 /* TODO */
216 void mirror_y(std::list<std::string> params);
217
218 /* TODO */
219 void mirror_x(std::list<std::string> params);
220
221 /* members */
222 /** fileheader */
223 BITMAP_FILEHEADER m_fileheader;
224 /** infoheader */
225 BITMAP_INFOHEADER m_infoheader;
226 /** pointer to pixelbuffer */
227 uint8_t *m_pixeldata;
228 /** set of supported PixelFormat handlers */
229 std::set<CPixelFormat *> m_handlers;
230 /** pointer to CPixelFormat implementation */
231 CPixelFormat *m_pixelformat;
232};
233
234#endif
235
236/* vim: set et sw=2 ts=2: */
diff --git a/ue2/imgsynth2/cfile.h b/ue2/imgsynth2/cfile.h
new file mode 100644
index 0000000..a5c4d2a
--- /dev/null
+++ b/ue2/imgsynth2/cfile.h
@@ -0,0 +1,121 @@
1/**
2 * @module cfile
3 * @author Guenther Neuwirth (0626638), Manuel Mausz (0728348)
4 * @brief Abstract class for handling files.
5 * Needed for generic use in CScriptparser.
6 * @date 17.04.2009
7 */
8
9#ifndef CFILE_H
10#define CFILE_H
11
12#include <string>
13#include <set>
14#include <list>
15#include <fstream>
16#include <stdexcept>
17
18/**
19 * @class CFile
20 * @brief Abstract class for handling files. Needed for generic use in
21 * CScriptparser.
22 *
23 * In order for CScriptparser to determine which instance of CFile supports
24 * which filetype, every implemententation need to insert their filetypes to
25 * the member m_types in their constructor.
26 *
27 * On error throw FileError.
28 */
29class CFile
30{
31 public:
32 /**
33 * @class FileError
34 * @brief Exception thrown by implemententations of CFile
35 */
36 class FileError : public std::invalid_argument {
37 public:
38 /**
39 * @method FileError
40 * @brief Default exception ctor
41 * @param what message to pass along
42 * @return -
43 * @globalvars none
44 * @exception none
45 * @conditions none
46 */
47 FileError(const std::string& what)
48 : std::invalid_argument(what)
49 {}
50 };
51
52 /**
53 * @method ~CFile
54 * @brief Default dtor (virtual)
55 * @param -
56 * @return -
57 * @globalvars none
58 * @exception none
59 * @conditions none
60 */
61 virtual ~CFile()
62 {};
63
64 /**
65 * @method read
66 * @brief Pure virtual method (interface). Should read data from filestream.
67 * @param in filestream to read data from
68 * @return -
69 * @globalvars none
70 * @exception FileError
71 * @conditions none
72 */
73 virtual void read(std::ifstream& in) = 0;
74
75 /**
76 * @method write
77 * @brief Pure virtual method (interface). Should write data to filestream.
78 * @param out filestream to write data to
79 * @return -
80 * @globalvars none
81 * @exception FileError
82 * @conditions none
83 */
84 virtual void write(std::ofstream& out) = 0;
85
86 /**
87 * @method callFunc
88 * @brief Pure virtual method (interface). Should delegate the function
89 * and its parameters to the correct internal method.
90 * @param func function name
91 * @param params function parameters as list
92 * @return -
93 * @globalvars none
94 * @exception FileError
95 * @conditions none
96 */
97 virtual void callFunc(const std::string& func, const std::list<std::string>& params) = 0;
98
99 /**
100 * @method supportsType
101 * @brief Check if filetype is supported by this implementation.
102 * @param type filetype
103 * @return true if filetype is supported. false otherwise
104 * @globalvars none
105 * @exception none
106 * @conditions none
107 */
108 bool supportsType(const std::string& type)
109 {
110 return (m_types.find(type) == m_types.end()) ? false : true;
111 }
112
113 protected:
114 /* members */
115 /** set of filetypes suppported by this implementation */
116 std::set<std::string> m_types;
117};
118
119#endif
120
121/* vim: set et sw=2 ts=2: */
diff --git a/ue2/imgsynth2/cpixelformat.h b/ue2/imgsynth2/cpixelformat.h
new file mode 100644
index 0000000..49145df
--- /dev/null
+++ b/ue2/imgsynth2/cpixelformat.h
@@ -0,0 +1,124 @@
1/**
2 * @module cpixelformat
3 * @author Guenther Neuwirth (0626638), Manuel Mausz (0728348)
4 * @brief Abstract class for handling different color bitcount of Bitmaps.
5 * Needed for generic use in CBitmap.
6 * @date 18.04.2009
7 */
8
9#ifndef CPIXELFORMAT_H
10#define CPIXELFORMAT_H
11
12#include <fstream>
13#include <stdexcept>
14
15class CBitmap;
16#include "cbitmap.h"
17
18/**
19 * @class CPixelFormat
20 * @brief Abstract class for handling different color bitcount of Bitmaps.
21 *
22 * Needed for generic use in CBitmap.
23 *
24 * On error throw PixelFormatError.
25 */
26class CPixelFormat
27{
28 public:
29 /**
30 * @class PixelFormatError
31 * @brief Exception thrown by implemententations of CPixelFormat
32 */
33 class PixelFormatError : public std::invalid_argument {
34 public:
35 /**
36 * @method PixelFormatError
37 * @brief Default exception ctor
38 * @param what message to pass along
39 * @return -
40 * @globalvars none
41 * @exception none
42 * @conditions none
43 */
44 PixelFormatError(const std::string& what)
45 : std::invalid_argument(what)
46 {}
47 };
48
49 /**
50 * @method CBitmap
51 * @brief Default ctor
52 * @param bitmap pointer to CBitmap instance
53 * @return -
54 * @globalvars none
55 * @exception none
56 * @conditions none
57 */
58 CPixelFormat(CBitmap *bitmap)
59 : m_bitmap(bitmap)
60 {}
61
62 /**
63 * @method ~CPixelFormat
64 * @brief Default dtor (virtual)
65 * @param -
66 * @return -
67 * @globalvars none
68 * @exception none
69 * @conditions none
70 */
71 virtual ~CPixelFormat()
72 {};
73
74 /**
75 * @method setPixel
76 * @brief Modifies pixel at coordinates x, y
77 * @param pixel pointer to new pixel data
78 * @param x x-coordinate
79 * @param y y-coordinate
80 * @return -
81 * @globalvars none
82 * @exception PixelFormatError
83 * @conditions none
84 */
85 virtual void setPixel(const uint32_t *pixel, const uint32_t x, const uint32_t y) = 0;
86
87 /**
88 * @method getPixel
89 * @brief Get pixel at coordinates x, y
90 * @param pixel pointer to pixel data
91 * @param x x-coordinate
92 * @param y y-coordinate
93 * @return -
94 * @globalvars none
95 * @exception PixelFormatError
96 * @conditions none
97 */
98 //TODO virtual void getPixel(const uint32_t *pixel, const uint32_t x, const uint32_t y) = 0;
99
100 /**
101 * @method getBitCount
102 * @brief returns color bitcount supported by this class
103 * @param -
104 * @return color bitcount supported by this class
105 * @globalvars none
106 * @exception none
107 * @conditions none
108 */
109 virtual uint32_t getBitCount() = 0;
110
111 /*
112 * TODO
113 */
114 virtual void getMaxColor(unsigned int *red, unsigned int *green, unsigned int *blue) = 0;
115
116 protected:
117 /* members */
118 /** pointer to CBitmap instance */
119 CBitmap *m_bitmap;
120};
121
122#endif
123
124/* vim: set et sw=2 ts=2: */
diff --git a/ue2/imgsynth2/cpixelformat_bgr24.cpp b/ue2/imgsynth2/cpixelformat_bgr24.cpp
new file mode 100644
index 0000000..cc02dcc
--- /dev/null
+++ b/ue2/imgsynth2/cpixelformat_bgr24.cpp
@@ -0,0 +1,90 @@
1/**
2 * @module cpixelformat_BGR24
3 * @author Guenther Neuwirth (0626638), Manuel Mausz (0728348)
4 * @brief Implementation of CPixelFormat handling 24bit color Windows Bitmaps.
5 * @date 18.04.2009
6 */
7
8#include <boost/numeric/conversion/cast.hpp>
9#include "cpixelformat_bgr24.h"
10
11using namespace std;
12
13void CPixelFormat_BGR24::getPixel(uint32_t *pixel, uint32_t x, uint32_t y)
14{
15 /*
16 * pixel[0] ... red
17 * pixel[1] ... green
18 * pixel[2] ... blue
19 */
20 if (m_bitmap->getPixelData() == NULL)
21 throw PixelFormatError("No pixelbuffer allocated.");
22
23 /* calc rowsize - boundary is 32 */
24 uint32_t rowsize = 4 * static_cast<uint32_t>(
25 ((getBitCount() * abs(m_bitmap->getInfoHeader().biWidth)) + 31) / 32
26 );
27
28 /* if height is positive the y-coordinates are mirrored */
29 if (m_bitmap->getInfoHeader().biHeight > 0)
30 y = m_bitmap->getInfoHeader().biHeight - y - 1;
31 uint32_t offset = y * rowsize + x * (4 * getBitCount() / 32);
32
33 /* boundary check */
34 if (offset + getBitCount()/8 > m_bitmap->getInfoHeader().biSizeImage)
35 throw PixelFormatError("Pixel position is out of range.");
36
37 /* get pixel */
38 try
39 {
40 pixel[0] = boost::numeric_cast<uint32_t>(*(m_bitmap->getPixelData() + offset + 2));
41 pixel[1] = boost::numeric_cast<uint32_t>(*(m_bitmap->getPixelData() + offset + 1));
42 pixel[2] = boost::numeric_cast<uint32_t>(*(m_bitmap->getPixelData() + offset));
43 }
44 catch(boost::numeric::bad_numeric_cast& ex)
45 {
46 throw PixelFormatError("Unable to convert pixelcolor to correct size: " + string(ex.what()));
47 }
48}
49
50void CPixelFormat_BGR24::setPixel(const uint32_t *pixel, uint32_t x, uint32_t y)
51{
52 /*
53 * pixel[0] ... red
54 * pixel[1] ... green
55 * pixel[2] ... blue
56 */
57 if (m_bitmap->getPixelData() == NULL)
58 throw PixelFormatError("No pixelbuffer allocated.");
59
60 /* calc rowsize - boundary is 32 */
61 uint32_t rowsize = 4 * static_cast<uint32_t>(
62 ((getBitCount() * abs(m_bitmap->getInfoHeader().biWidth)) + 31) / 32
63 );
64
65 /* if height is positive the y-coordinates are mirrored */
66 if (m_bitmap->getInfoHeader().biHeight > 0)
67 y = m_bitmap->getInfoHeader().biHeight - y - 1;
68 uint32_t offset = y * rowsize + x * (4 * getBitCount() / 32);
69
70 /* boundary check */
71 if (offset + getBitCount()/8 > m_bitmap->getInfoHeader().biSizeImage)
72 throw PixelFormatError("Pixel position is out of range.");
73
74 /* convert color values to correct types */
75 uint8_t data[3];
76 try
77 {
78 data[0] = boost::numeric_cast<uint8_t>(pixel[2]);
79 data[1] = boost::numeric_cast<uint8_t>(pixel[1]);
80 data[2] = boost::numeric_cast<uint8_t>(pixel[0]);
81 }
82 catch(boost::numeric::bad_numeric_cast& ex)
83 {
84 throw PixelFormatError("Unable to convert pixelcolor to correct size: " + string(ex.what()));
85 }
86
87 copy(data, data + 3, m_bitmap->getPixelData() + offset);
88}
89
90/* vim: set et sw=2 ts=2: */
diff --git a/ue2/imgsynth2/cpixelformat_bgr24.h b/ue2/imgsynth2/cpixelformat_bgr24.h
new file mode 100644
index 0000000..c3e1b72
--- /dev/null
+++ b/ue2/imgsynth2/cpixelformat_bgr24.h
@@ -0,0 +1,89 @@
1/**
2 * @module cpixelformat_bgr24
3 * @author Guenther Neuwirth (0626638), Manuel Mausz (0728348)
4 * @brief Implementation of CPixelFormat handling 24bit color Windows Bitmaps.
5 * @date 18.04.2009
6 */
7
8#ifndef CPIXELFORMAT_BGR24_H
9#define CPIXELFORMAT_BGR24_H
10
11#include <fstream>
12#include "cpixelformat.h"
13
14/**
15 * @class CPixelFormat_BGR24
16 * @brief Implementation of CPixelFormat handling 24bit color Windows Bitmaps.
17 *
18 * On error CPixelFormat::PixelFormatError is thrown.
19 */
20class CPixelFormat_BGR24 : public CPixelFormat
21{
22 public:
23 /**
24 * @method CPixelFormat_BGR24
25 * @brief Default ctor
26 * @param bitmap pointer to CBitmap instance
27 * @return -
28 * @globalvars none
29 * @exception none
30 * @conditions none
31 */
32 CPixelFormat_BGR24(CBitmap *bitmap)
33 : CPixelFormat(bitmap)
34 {}
35
36 /**
37 * @method ~CPixelFormat_BGR24
38 * @brief Default dtor
39 * @param -
40 * @return -
41 * @globalvars none
42 * @exception none
43 * @conditions none
44 */
45 ~CPixelFormat_BGR24()
46 {}
47
48 /**
49 * @method setPixel
50 * @brief Modifies pixel at coordinates x, y
51 * @param pixel pointer to new pixel data
52 * @param x x-coordinate
53 * @param y y-coordinate
54 * @return -
55 * @globalvars none
56 * @exception PixelFormatError
57 * @conditions none
58 */
59 void setPixel(const uint32_t *pixel, uint32_t x, uint32_t y);
60
61 /* TODO */
62 void getPixel(uint32_t *pixel, uint32_t x, uint32_t y);
63
64 /**
65 * @method getBitCount
66 * @brief returns color bitcount supported by this class
67 * @param -
68 * @return color bitcount supported by this class
69 * @globalvars none
70 * @exception none
71 * @conditions none
72 */
73 uint32_t getBitCount()
74 {
75 return 24;
76 }
77
78 /*
79 * TODO
80 */
81 void getMaxColor(unsigned int *red, unsigned int *green, unsigned int *blue)
82 {
83 *red = *green = *blue = 255; /* 2^8 - 1 */
84 }
85};
86
87#endif
88
89/* vim: set et sw=2 ts=2: */
diff --git a/ue2/imgsynth2/cpixelformat_bgr555.cpp b/ue2/imgsynth2/cpixelformat_bgr555.cpp
new file mode 100644
index 0000000..4a3c833
--- /dev/null
+++ b/ue2/imgsynth2/cpixelformat_bgr555.cpp
@@ -0,0 +1,46 @@
1/**
2 * @module cpixelformat_BGR555
3 * @author Guenther Neuwirth (0626638), Manuel Mausz (0728348)
4 * @brief Implementation of CPixelFormat handling BGR555 color (real color)
5 * Windows Bitmaps.
6 * @date 18.04.2009
7 */
8
9#include <boost/numeric/conversion/cast.hpp>
10#include "cpixelformat_bgr555.h"
11
12using namespace std;
13
14void CPixelFormat_BGR555::setPixel(const uint32_t *pixel, uint32_t x, uint32_t y)
15{
16 /*
17 * pixel[0] ... red
18 * pixel[1] ... green
19 * pixel[2] ... blue
20 */
21
22 if (m_bitmap->getPixelData() == NULL)
23 throw PixelFormatError("No pixelbuffer allocated.");
24
25 /* calc rowsize - boundary is 32 */
26 uint32_t rowsize = 4 * static_cast<uint32_t>(
27 ((CPixelFormat_BGR555::getBitCount() * abs(m_bitmap->getInfoHeader().biWidth)) + 31) / 32
28 );
29
30 /* if height is positive the y-coordinates are mirrored */
31 if (m_bitmap->getInfoHeader().biHeight > 0)
32 y = m_bitmap->getInfoHeader().biHeight - y - 1;
33 uint32_t offset = y * rowsize + x * (4 * getBitCount() / 32);
34
35 /* boundary check */
36 if (offset + getBitCount()/8 > m_bitmap->getInfoHeader().biSizeImage)
37 throw PixelFormatError("Pixel position is out of range.");
38
39 /* convert color values to correct types */
40 uint8_t *o = m_bitmap->getPixelData() + offset;
41 *(uint16_t *)o = (uint16_t)(((pixel[2] << BGR555_BLUE_SHIFT) & BGR555_BLUE_MASK) |
42 ((pixel[1] << BGR555_GREEN_SHIFT) & BGR555_GREEN_MASK) |
43 ((pixel[0] << BGR555_RED_SHIFT) & BGR555_RED_MASK));
44}
45
46/* vim: set et sw=2 ts=2: */
diff --git a/ue2/imgsynth2/cpixelformat_bgr555.h b/ue2/imgsynth2/cpixelformat_bgr555.h
new file mode 100644
index 0000000..7a49c7c
--- /dev/null
+++ b/ue2/imgsynth2/cpixelformat_bgr555.h
@@ -0,0 +1,96 @@
1/**
2 * @module cpixelformat_bgr555
3 * @author Guenther Neuwirth (0626638), Manuel Mausz (0728348)
4 * @brief Implementation of CPixelFormat handling BGR555 color (real color)
5 * Windows Bitmaps.
6 * @date 26.04.2009
7 */
8
9#ifndef CPIXELFORMAT_BGR555_H
10#define CPIXELFORMAT_BGR555_H
11
12#include <fstream>
13#include "cpixelformat.h"
14
15/* TODO */
16#define BGR555_RED_SHIFT 10
17#define BGR555_GREEN_SHIFT 5
18#define BGR555_BLUE_SHIFT 0
19#define BGR555_RED_MASK 0x7C00
20#define BGR555_GREEN_MASK 0x03E0
21#define BGR555_BLUE_MASK 0x001F
22
23/**
24 * @class CPixelFormat_BGR555
25 * @brief Implementation of CPixelFormat handling BGR555 color (real color)
26 * Windows Bitmaps.
27 *
28 * On error CPixelFormat::PixelFormatError is thrown.
29 */
30class CPixelFormat_BGR555 : public CPixelFormat
31{
32 public:
33 /**
34 * @method CPixelFormat_BGR55
35 * @brief Default ctor
36 * @param bitmap pointer to CBitmap instance
37 * @return -
38 * @globalvars none
39 * @exception none
40 * @conditions none
41 */
42 CPixelFormat_BGR555(CBitmap *bitmap)
43 : CPixelFormat(bitmap)
44 {}
45
46 /**
47 * @method ~CPixelFormat_BGR555
48 * @brief Default dtor
49 * @param -
50 * @return -
51 * @globalvars none
52 * @exception none
53 * @conditions none
54 */
55 ~CPixelFormat_BGR555()
56 {}
57
58 /**
59 * @method setPixel
60 * @brief Modifies pixel at coordinates x, y
61 * @param pixel pointer to new pixel data
62 * @param x x-coordinate
63 * @param y y-coordinate
64 * @return -
65 * @globalvars none
66 * @exception PixelFormatError
67 * @conditions none
68 */
69 void setPixel(const uint32_t *pixel, uint32_t x, uint32_t y);
70
71 /**
72 * @method getBitCount
73 * @brief returns color bitcount supported by this class
74 * @param -
75 * @return color bitcount supported by this class
76 * @globalvars none
77 * @exception none
78 * @conditions none
79 */
80 uint32_t getBitCount()
81 {
82 return 16;
83 }
84
85 /*
86 * TODO
87 */
88 void getMaxColor(unsigned int *red, unsigned int *green, unsigned int *blue)
89 {
90 *red = *green = *blue = 31; /* 2^5 -1 */
91 }
92};
93
94#endif
95
96/* vim: set et sw=2 ts=2: */
diff --git a/ue2/imgsynth2/cscriptparser.cpp b/ue2/imgsynth2/cscriptparser.cpp
new file mode 100644
index 0000000..df3df1e
--- /dev/null
+++ b/ue2/imgsynth2/cscriptparser.cpp
@@ -0,0 +1,209 @@
1/**
2 * @module cscriptparser
3 * @author Guenther Neuwirth (0626638), Manuel Mausz (0728348)
4 * @brief class for parsing simple scriptfiles
5 * @date 17.04.2009
6 */
7
8#include <fstream>
9#include <boost/tokenizer.hpp>
10#include <boost/algorithm/string.hpp>
11#include "cscriptparser.h"
12#include "cbitmap.h"
13
14using namespace std;
15using namespace boost;
16
17CScriptparser::CScriptparser(const std::string& scriptfile)
18 : m_scriptfile(scriptfile), m_handler(NULL)
19{
20 /* add our handlers */
21 m_handlers.insert(new CBitmap);
22}
23
24/*----------------------------------------------------------------------------*/
25
26CScriptparser::~CScriptparser()
27{
28 /* delete image handlers */
29 set<CFile *>::iterator it;
30 for (it = m_handlers.begin(); it != m_handlers.end(); it++)
31 delete *it;
32 m_handler = NULL;
33}
34
35/*----------------------------------------------------------------------------*/
36
37void CScriptparser::parse()
38{
39 /* open and read file */
40 ifstream file(m_scriptfile.c_str(), ios::in);
41 if (!file)
42 throw ParserError("Unable to open scriptfile '" + m_scriptfile + "'.");
43
44 while (!file.eof() && file.good())
45 {
46 /* read file pre line */
47 getline(file, m_curline);
48 if (m_curline.empty())
49 continue;
50
51 trim(m_curline);
52
53 /* ignore comments */
54 if (m_curline.find_first_of('#') == 0)
55 continue;
56
57 /* line has no function call */
58 size_t pos1 = m_curline.find_first_of('(');
59 size_t pos2 = m_curline.find_last_of(')');
60 if (pos1 == string::npos || pos2 == string::npos)
61 throw ParserError("Invalid syntax. Not a function", m_curline);
62
63 /* first parse function name and tokenize all parameters */
64 string func = m_curline.substr(0, pos1);
65 string params = m_curline.substr(pos1 + 1, pos2 - pos1 - 1);
66 list<string> funcparams;
67 tokenizer< char_separator<char> > tokens(params, char_separator<char>(","));
68 /* BOOST_FOREACH isn't available on OOP-servers... */
69 for (tokenizer< char_separator<char> >::iterator it = tokens.begin();
70 it != tokens.end();
71 it++)
72 {
73 string tok(*it);
74 trim(tok);
75 if (tok.find_first_of(' ') != string::npos)
76 {
77 if (tok.find_first_of('"') == string::npos)
78 throw ParserError("Invalid syntax", m_curline);
79 }
80 trim_if(tok, is_any_of("\""));
81 funcparams.push_back(tok);
82 }
83
84 /* then call the corresponding function */
85 callFunc(func, funcparams);
86 }
87
88 file.close();
89}
90
91/*----------------------------------------------------------------------------*/
92
93void CScriptparser::callFunc(const std::string& func, const std::list<std::string>& funcparams)
94{
95 if (func.empty())
96 throw ParserError("Function name is empty.", m_curline);
97
98 if (func == "read")
99 read(funcparams);
100 else if (func == "write")
101 write(funcparams);
102 else
103 {
104 if (m_handler == NULL)
105 throw ParserError("No image is being processed.", m_curline);
106
107 /* call function from handler */
108 try
109 {
110 m_handler->callFunc(func, funcparams);
111 }
112 catch(CFile::FileError& ex)
113 {
114 throw ParserError(ex.what(), m_curline);
115 }
116 }
117}
118
119/*----------------------------------------------------------------------------*/
120
121void CScriptparser::read(std::list<std::string> funcparams)
122{
123 /* check prerequirements */
124 if (funcparams.size() != 2)
125 throw ParserError("Invalid number of function parameters (must be 2).", m_curline);
126 if (m_handler != NULL)
127 throw ParserError("An image is already being processed. Unable to open another.", m_curline);
128
129 string type = funcparams.front();
130 to_upper(type);
131 funcparams.pop_front();
132 string filename = funcparams.front();
133
134 /* fetch image handler supporting requested filetype */
135 m_handler = NULL;
136 set<CFile *>::iterator it;
137 for (it = m_handlers.begin(); it != m_handlers.end(); it++)
138 {
139 if ((*it)->supportsType(type))
140 {
141 m_handler = *it;
142 break;
143 }
144 }
145 if (m_handler == NULL)
146 throw ParserError("Unknown filetype.", m_curline);
147
148 /* open file in binary mode */
149 ifstream file(filename.c_str(), ios::in | ios::binary);
150 if (!file)
151 throw ParserError("Unable to read file.", m_curline);
152
153 /* let handlers read() parse the file */
154 try
155 {
156 m_handler->read(file);
157 if (!file.good())
158 throw ParserError("Error while reading image file.", m_curline);
159 file.close();
160 }
161 catch(CFile::FileError& ex)
162 {
163 file.close();
164 throw ParserError(ex.what(), m_curline);
165 }
166}
167
168/*----------------------------------------------------------------------------*/
169
170void CScriptparser::write(std::list<std::string> funcparams)
171{
172 /* check prerequirements */
173 if (funcparams.size() != 2)
174 throw ParserError("Invalid number of function parameters (must be 2).", m_curline);
175 if (m_handler == NULL)
176 throw ParserError("No image is being processed.", m_curline);
177
178 string type = funcparams.front();
179 to_upper(type);
180 funcparams.pop_front();
181 string filename = funcparams.front();
182
183 /* do we have an image handler supporting the filetype? */
184 if (!m_handler->supportsType(type))
185 throw ParserError("Unknown filetype.", m_curline);
186
187 /* open file in binary mode */
188 ofstream file(filename.c_str(), ios::out | ios::binary);
189 if (!file)
190 throw ParserError("Unable to open file.", m_curline);
191
192 /* let handlers write() parse the file */
193 try
194 {
195 m_handler->write(file);
196 if (!file.good())
197 throw ParserError("Error while writing image file.", m_curline);
198 file.close();
199 m_handler = NULL;
200 }
201 catch(CFile::FileError& ex)
202 {
203 file.close();
204 m_handler = NULL;
205 throw ParserError(ex.what(), m_curline);
206 }
207}
208
209/* vim: set et sw=2 ts=2: */
diff --git a/ue2/imgsynth2/cscriptparser.h b/ue2/imgsynth2/cscriptparser.h
new file mode 100644
index 0000000..d4ebd0e
--- /dev/null
+++ b/ue2/imgsynth2/cscriptparser.h
@@ -0,0 +1,181 @@
1/**
2 * @module cscriptparser
3 * @author Guenther Neuwirth (0626638), Manuel Mausz (0728348)
4 * @brief class for parsing simple scriptfiles
5 * @date 17.04.2009
6 */
7
8#ifndef CSCRIPTPARSER_H
9#define CSCRIPTPARSER_H
10
11#include <stdexcept>
12#include <string>
13#include <list>
14#include <set>
15#include "cfile.h"
16
17/**
18 * @class CScriptparser
19 *
20 * Parses a simple line based scriptfile with some limitations:
21 * first function (starting a block) must be a read-command,
22 * last must be a write-command (ending this block).
23 *
24 * read- and write-commands have hard coded parameters, number#1 being a filetype.
25 * Classes handling certain filetypes must be of type CFile.
26 * Custom functions will be passed to CFile::callFunc().
27 *
28 * On error ParserError will be thrown.
29 */
30class CScriptparser
31{
32 public:
33 /**
34 * @class ParserError
35 * @brief Exception thrown by CScriptparser
36 */
37 class ParserError : public std::invalid_argument {
38 public:
39 /**
40 * @method ParserError
41 * @brief Default exception ctor
42 * @param what message to pass along
43 * @return -
44 * @globalvars none
45 * @exception none
46 * @conditions none
47 */
48 ParserError(const std::string& what)
49 : std::invalid_argument(what), m_line("")
50 {}
51
52 /**
53 * @method ParserError
54 * @brief Custom exception ctor
55 * @param what message to pass along
56 * @param line scriptline which is currently being parsed
57 * @return -
58 * @globalvars none
59 * @exception none
60 * @conditions none
61 */
62 ParserError(const std::string& what, const std::string& line)
63 : std::invalid_argument(what), m_line(line)
64 {}
65
66 /**
67 * @method ~ParserError
68 * @brief Default dtor
69 * @param -
70 * @return -
71 * @globalvars none
72 * @exception not allowed
73 * @conditions none
74 */
75 ~ParserError() throw()
76 {}
77
78 /**
79 * @method getLine
80 * @brief returns reference to currently parsed scriptline (if set)
81 * @return reference to currently parsed scriptline (maybe empty string)
82 * @globalvars none
83 * @exception none
84 * @conditions none
85 */
86 const std::string &getLine()
87 {
88 return m_line;
89 }
90
91 private:
92 /* members*/
93 std::string m_line;
94 };
95
96 /**
97 * @method CScriptparser
98 * @brief Default ctor
99 * @param scriptfile filename of script to parse
100 * @return -
101 * @globalvars none
102 * @exception bad_alloc
103 * @conditions none
104 */
105 CScriptparser(const std::string& scriptfile);
106
107 /**
108 * @method ~CScriptparser
109 * @brief Default dtor
110 * @param -
111 * @return -
112 * @globalvars none
113 * @exception none
114 * @conditions none
115 */
116 ~CScriptparser();
117
118 /**
119 * @method parse
120 * @brief Start parsing the scriptfile
121 * @param -
122 * @return -
123 * @globalvars none
124 * @exception ParserError
125 * @conditions none
126 */
127 void parse();
128
129 protected:
130 /**
131 * @method callFunc
132 * @brief Delegates the function and its parameters to the correct
133 * method (internal or handler)
134 * @param func function name
135 * @param funcparams function parameters as list
136 * @return -
137 * @globalvars none
138 * @exception ParserError
139 * @conditions none
140 */
141 void callFunc(const std::string& func, const std::list<std::string>& funcparams);
142
143 /**
144 * @method read
145 * @brief Handles/wrappes read-command. according to the filetype the
146 * read-method of the corresponding handler will be called inside.
147 * @param funcparams function parameters as list
148 * @return -
149 * @globalvars none
150 * @exception ParserError
151 * @conditions none
152 *
153 * Scriptfile syntax: read(<FILETYPE>, <FILENAME>)
154 */
155 void read(std::list<std::string> funcparams);
156
157 /**
158 * @method write
159 * @brief Handles/wrappes write-command. according to the filetype the
160 * write-method of the corresponding handler will be called inside.
161 * @param funcparams function parameters as list
162 * @return -
163 * @globalvars none
164 * @exception ParserError
165 * @conditions none
166 *
167 * Scriptfile syntax: write(<FILETYPE>, <FILENAME>)
168 */
169 void write(std::list<std::string> funcparams);
170
171 private:
172 /* members */
173 std::set<CFile *> m_handlers;
174 std::string m_scriptfile;
175 std::string m_curline;
176 CFile *m_handler;
177};
178
179#endif
180
181/* vim: set et sw=2 ts=2: */
diff --git a/ue2/imgsynth2/imgsynth2.cpp b/ue2/imgsynth2/imgsynth2.cpp
new file mode 100644
index 0000000..135d31f
--- /dev/null
+++ b/ue2/imgsynth2/imgsynth2.cpp
@@ -0,0 +1,84 @@
1/**
2 * @module imgsynth2
3 * @author Guenther Neuwirth (0626638), Manuel Mausz (0728348)
4 * @brief imgsynth2 reads a scriptfile given as commandline option
5 * and executes all known function inside.
6 * On error (e.g. unknown function) the program will terminate
7 * @date 17.04.2009
8 * @par Exercise
9 * 2
10 */
11
12#include <iostream>
13#include <boost/program_options.hpp>
14#include "cscriptparser.h"
15
16using namespace std;
17namespace po = boost::program_options;
18
19/**
20 * @func main
21 * @brief program entry point
22 * @param argc standard parameter of main
23 * @param argv standard parameter of main
24 * @return 0 on success, not 0 otherwise
25 * @globalvars none
26 * @exception none
27 * @conditions none
28 *
29 * setup commandline options, parse them and pass scriptfile to scriptparser
30 * instance. On error print error message to stderr.
31 * Unknown commandline options will print a usage message.
32 */
33int main(int argc, char* argv[])
34{
35 string me(argv[0]);
36
37 /* define commandline options */
38 po::options_description desc("Allowed options");
39 desc.add_options()
40 ("help,h", "this help message")
41 ("input,i", po::value<string>(), "input scriptfile");
42
43 /* parse commandline options */
44 po::variables_map vm;
45 try
46 {
47 po::store(po::parse_command_line(argc, argv, desc), vm);
48 po::notify(vm);
49 }
50 catch(po::error& ex)
51 {
52 cerr << "Error: " << ex.what() << endl;
53 }
54
55 /* print usage upon request or missing params */
56 if (vm.count("help") || !vm.count("input"))
57 {
58 cout << "Usage: " << me << " -i <scriptfile>" << endl;
59 cout << desc << endl;
60 return 0;
61 }
62
63 CScriptparser parser(vm["input"].as<string>());
64 try
65 {
66 parser.parse();
67 }
68 catch(CScriptparser::ParserError& ex)
69 {
70 cerr << me << ": Error while processing scriptfile: " << ex.what() << endl;
71 if (!ex.getLine().empty())
72 cerr << "Scriptline: '" << ex.getLine() << "'" << endl;
73 return 1;
74 }
75 catch(exception& ex)
76 {
77 cerr << me << ": Unexpected exception: " << ex.what() << endl;
78 return 1;
79 }
80
81 return 0;
82}
83
84/* vim: set et sw=2 ts=2: */
diff --git a/ue2/imgsynth2/test/input_yellow_man1_rgb24 b/ue2/imgsynth2/test/input_yellow_man1_rgb24
new file mode 100644
index 0000000..ce2743b
--- /dev/null
+++ b/ue2/imgsynth2/test/input_yellow_man1_rgb24
@@ -0,0 +1,10 @@
1#in: test/yellow_man1_rgb24_in.bmp
2#out: test/yellow_man1_rgb24_out.bmp
3#ref: test/yellow_man1_rgb24_ref.bmp
4
5read(BMP, test/yellow_man1_rgb24_in.bmp)
6
7fillrect(0,3,6,5,0,255,0)
8fillrect(2,13,7,4,0,0,255)
9
10write(BMP, "test/yellow_man1_rgb24_out.bmp")
diff --git a/ue2/imgsynth2/test/input_yellow_man1_rgb555 b/ue2/imgsynth2/test/input_yellow_man1_rgb555
new file mode 100644
index 0000000..1723489
--- /dev/null
+++ b/ue2/imgsynth2/test/input_yellow_man1_rgb555
@@ -0,0 +1,10 @@
1#in: test/yellow_man1_rgb555_in.bmp
2#out: test/yellow_man1_rgb555_out.bmp
3#ref: test/yellow_man1_rgb555_ref.bmp
4
5read(BMP, test/yellow_man1_rgb555_in.bmp)
6
7fillrect(0,3,6,5,0,31,0)
8fillrect(2,13,7,4,0,0,31)
9
10write(BMP, "test/yellow_man1_rgb555_out.bmp")
diff --git a/ue2/imgsynth2/test/input_yellow_man2_rgb24 b/ue2/imgsynth2/test/input_yellow_man2_rgb24
new file mode 100644
index 0000000..37108b8
--- /dev/null
+++ b/ue2/imgsynth2/test/input_yellow_man2_rgb24
@@ -0,0 +1,13 @@
1#in: test/yellow_man2_rgb24_in.bmp
2#out: test/yellow_man2_rgb24_out.bmp
3#ref: test/yellow_man2_rgb24_ref.bmp
4
5read(BMP, test/yellow_man2_rgb24_in.bmp)
6
7fillrect(0,3,6,5,0,255,0)
8fillrect(2,13,6,4,0,0,255)
9mirror_x()
10mirror_y()
11#invert()
12
13write(BMP, "test/yellow_man2_rgb24_out.bmp")
diff --git a/ue2/imgsynth2/test/input_yellow_man2_rgb555 b/ue2/imgsynth2/test/input_yellow_man2_rgb555
new file mode 100644
index 0000000..3c00301
--- /dev/null
+++ b/ue2/imgsynth2/test/input_yellow_man2_rgb555
@@ -0,0 +1,13 @@
1#in: test/yellow_man2_rgb555_in.bmp
2#out: test/yellow_man2_rgb555_out.bmp
3#ref: test/yellow_man2_rgb555_ref.bmp
4
5read(BMP, test/yellow_man2_rgb555_in.bmp)
6
7fillrect(0,3,6,5,0,24,0)
8fillrect(2,13,7,4,0,0,24)
9mirror_x()
10mirror_y()
11#invert()
12
13write(BMP, "test/yellow_man2_rgb555_out.bmp")
diff --git a/ue2/imgsynth2/test/test.sh b/ue2/imgsynth2/test/test.sh
new file mode 100755
index 0000000..5d760b9
--- /dev/null
+++ b/ue2/imgsynth2/test/test.sh
@@ -0,0 +1,48 @@
1#!/bin/bash
2
3inputs=( $(ls test/input_* | sort -n) )
4
5for input in ${inputs[@]}
6do
7 echo "Testing $input ..."
8
9 files=()
10 for tag in "#in: " "#out: " "#ref: "
11 do
12 tmp=$(grep "$tag" "$input")
13 if [ -z "$tmp" ]
14 then
15 echo " ERROR: Tag '$tag' missing"
16 exit 1
17 fi
18
19 tmp=${tmp:${#tag}}
20 #if [ ! -e "$tmp" ]
21 #then
22 # echo " ERROR: File '$tmp' doesn't exist"
23 # exit 1
24 #fi
25
26 files+=("$tmp")
27 done
28
29 rm -f "${files[1]}"
30 ./imgsynth2 -i "$input"
31 ret=$?
32 if [ $ret -ne 0 ]
33 then
34 echo " ERROR: Script didn't exit properly"
35 exit 1
36 fi
37
38 md5_1=$(md5sum < "${files[1]}")
39 md5_2=$(md5sum < "${files[2]}")
40 if [ "$md5_1" != "$md5_2" ]
41 then
42 echo " ERROR: ${files[1]} and ${files[2]} differ"
43 exit 1
44 else
45 echo " Test successful"
46 fi
47done
48
diff --git a/ue2/imgsynth2/test/yellow_man1_rgb24_in.bmp b/ue2/imgsynth2/test/yellow_man1_rgb24_in.bmp
new file mode 100644
index 0000000..49372b2
--- /dev/null
+++ b/ue2/imgsynth2/test/yellow_man1_rgb24_in.bmp
Binary files differ
diff --git a/ue2/imgsynth2/test/yellow_man1_rgb24_out.bmp b/ue2/imgsynth2/test/yellow_man1_rgb24_out.bmp
new file mode 100644
index 0000000..340eab9
--- /dev/null
+++ b/ue2/imgsynth2/test/yellow_man1_rgb24_out.bmp
Binary files differ
diff --git a/ue2/imgsynth2/test/yellow_man1_rgb24_ref.bmp b/ue2/imgsynth2/test/yellow_man1_rgb24_ref.bmp
new file mode 100644
index 0000000..340eab9
--- /dev/null
+++ b/ue2/imgsynth2/test/yellow_man1_rgb24_ref.bmp
Binary files differ
diff --git a/ue2/imgsynth2/test/yellow_man1_rgb555_in.bmp b/ue2/imgsynth2/test/yellow_man1_rgb555_in.bmp
new file mode 100644
index 0000000..3824922
--- /dev/null
+++ b/ue2/imgsynth2/test/yellow_man1_rgb555_in.bmp
Binary files differ
diff --git a/ue2/imgsynth2/test/yellow_man1_rgb555_out.bmp b/ue2/imgsynth2/test/yellow_man1_rgb555_out.bmp
new file mode 100644
index 0000000..1c35ab5
--- /dev/null
+++ b/ue2/imgsynth2/test/yellow_man1_rgb555_out.bmp
Binary files differ
diff --git a/ue2/imgsynth2/test/yellow_man1_rgb555_ref.bmp b/ue2/imgsynth2/test/yellow_man1_rgb555_ref.bmp
new file mode 100644
index 0000000..1c35ab5
--- /dev/null
+++ b/ue2/imgsynth2/test/yellow_man1_rgb555_ref.bmp
Binary files differ
diff --git a/ue2/imgsynth2/test/yellow_man2_rgb24_in.bmp b/ue2/imgsynth2/test/yellow_man2_rgb24_in.bmp
new file mode 100644
index 0000000..39193a4
--- /dev/null
+++ b/ue2/imgsynth2/test/yellow_man2_rgb24_in.bmp
Binary files differ
diff --git a/ue2/imgsynth2/test/yellow_man2_rgb24_out.bmp b/ue2/imgsynth2/test/yellow_man2_rgb24_out.bmp
new file mode 100644
index 0000000..c859cda
--- /dev/null
+++ b/ue2/imgsynth2/test/yellow_man2_rgb24_out.bmp
Binary files differ
diff --git a/ue2/imgsynth2/test/yellow_man2_rgb24_ref.bmp b/ue2/imgsynth2/test/yellow_man2_rgb24_ref.bmp
new file mode 100644
index 0000000..2ef73e5
--- /dev/null
+++ b/ue2/imgsynth2/test/yellow_man2_rgb24_ref.bmp
Binary files differ
diff --git a/ue2/imgsynth2/test/yellow_man2_rgb555_in.bmp b/ue2/imgsynth2/test/yellow_man2_rgb555_in.bmp
new file mode 100644
index 0000000..812311d
--- /dev/null
+++ b/ue2/imgsynth2/test/yellow_man2_rgb555_in.bmp
Binary files differ
diff --git a/ue2/imgsynth2/test/yellow_man2_rgb555_out.bmp b/ue2/imgsynth2/test/yellow_man2_rgb555_out.bmp
new file mode 100644
index 0000000..60588e3
--- /dev/null
+++ b/ue2/imgsynth2/test/yellow_man2_rgb555_out.bmp
Binary files differ
diff --git a/ue2/imgsynth2/test/yellow_man2_rgb555_ref.bmp b/ue2/imgsynth2/test/yellow_man2_rgb555_ref.bmp
new file mode 100644
index 0000000..1b63825
--- /dev/null
+++ b/ue2/imgsynth2/test/yellow_man2_rgb555_ref.bmp
Binary files differ
diff --git a/ue2/imgsynth2/x1 b/ue2/imgsynth2/x1
new file mode 100644
index 0000000..5593645
--- /dev/null
+++ b/ue2/imgsynth2/x1
@@ -0,0 +1,26 @@
100000000 42 4d 8a 01 00 00 00 00 00 00 36 00 00 00 28 00 |BM........6...(.|
200000010 00 00 09 00 00 00 11 00 00 00 01 00 10 00 00 00 |................|
300000020 00 00 54 01 00 00 13 0b 00 00 13 0b 00 00 00 00 |..T.............|
400000030 00 00 00 00 00 00 00 00 00 00 1f 00 1f 00 1f 00 |................|
500000040 1f 00 1f 00 1f 00 1f 00 00 00 00 00 00 00 1f 00 |................|
600000050 1f 00 1f 00 1f 00 1f 00 1f 00 1f 00 00 00 00 00 |................|
700000060 00 00 1f 00 1f 00 1f 00 1f 00 1f 00 1f 00 1f 00 |................|
800000070 00 00 00 00 00 00 1f 00 1f 00 1f 00 1f 00 1f 00 |................|
900000080 1f 00 1f 00 00 00 00 00 00 00 00 00 a0 7f 00 00 |................|
1000000090 a0 7f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
11000000a0 a0 7f 00 00 a0 7f 00 00 00 00 00 00 00 00 00 00 |................|
12000000b0 a0 7f 00 00 a0 7f a0 7f a0 7f 00 00 a0 7f 00 00 |................|
13000000c0 00 00 00 00 a0 7f 00 00 a0 7f a0 7f a0 7f 00 00 |................|
14000000d0 a0 7f 00 00 00 00 00 00 a0 7f 00 00 a0 7f a0 7f |................|
15000000e0 a0 7f 00 00 a0 7f 00 00 00 00 e0 03 e0 03 e0 03 |................|
16000000f0 e0 03 e0 03 e0 03 00 00 a0 7f 00 00 00 00 e0 03 |................|
1700000100 e0 03 e0 03 e0 03 e0 03 e0 03 a0 7f 00 00 00 00 |................|
1800000110 00 00 e0 03 e0 03 e0 03 e0 03 e0 03 e0 03 00 00 |................|
1900000120 00 00 00 00 00 00 e0 03 e0 03 e0 03 e0 03 e0 03 |................|
2000000130 e0 03 00 00 00 00 00 00 00 00 e0 03 e0 03 e0 03 |................|
2100000140 e0 03 e0 03 e0 03 00 00 00 00 00 00 00 00 00 00 |................|
2200000150 00 00 00 00 a0 7f a0 7f a0 7f 00 00 00 00 00 00 |................|
2300000160 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
24*
2500000180 00 00 00 00 00 00 00 00 00 00 |..........|
260000018a
diff --git a/ue2/imgsynth2/x2 b/ue2/imgsynth2/x2
new file mode 100644
index 0000000..26cbf82
--- /dev/null
+++ b/ue2/imgsynth2/x2
@@ -0,0 +1,26 @@
100000000 42 4d 8a 01 00 00 00 00 00 00 36 00 00 00 28 00 |BM........6...(.|
200000010 00 00 09 00 00 00 11 00 00 00 01 00 10 00 00 00 |................|
300000020 00 00 54 01 00 00 13 0b 00 00 13 0b 00 00 00 00 |..T.............|
400000030 00 00 00 00 00 00 00 00 00 00 1f 00 1f 00 1f 00 |................|
500000040 1f 00 1f 00 1f 00 1f 00 00 00 00 00 00 00 1f 00 |................|
600000050 1f 00 1f 00 1f 00 1f 00 1f 00 1f 00 00 00 00 00 |................|
700000060 00 00 1f 00 1f 7f 1f 00 1f 7f 1f 00 1f 00 1f 00 |................|
800000070 00 00 00 00 00 00 1f 00 1f 7f 1f 00 1f 7f 1f 00 |................|
900000080 1f 00 1f 00 00 00 00 00 00 00 00 00 a0 7f 00 00 |................|
1000000090 a0 7f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
11000000a0 a0 7f 00 00 a0 7f 00 00 00 00 00 00 00 00 00 00 |................|
12000000b0 a0 7f 00 00 a0 7f a0 7f a0 7f 00 00 a0 7f 00 00 |................|
13000000c0 00 00 00 00 a0 7f 00 00 a0 7f a0 7f a0 7f 00 00 |................|
14000000d0 a0 7f 00 00 00 00 00 00 a0 7f 00 00 a0 7f a0 7f |................|
15000000e0 a0 7f 00 00 a0 7f 00 00 00 00 00 00 00 7f 00 00 |................|
16000000f0 00 7f 00 7f 00 7f 00 00 a0 7f 00 00 00 00 00 00 |................|
1700000100 00 00 00 7f 00 7f 00 7f 00 7f a0 7f 00 00 00 00 |................|
1800000110 00 00 00 00 00 00 00 00 00 00 00 7f 00 00 00 00 |................|
1900000120 00 00 00 00 00 00 00 00 00 00 00 00 00 7f 00 7f |................|
2000000130 00 7f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
2100000140 00 7f 00 7f 00 7f 00 00 00 00 00 00 00 00 00 00 |................|
2200000150 00 00 00 00 a0 7f a0 7f a0 7f 00 00 00 00 00 00 |................|
2300000160 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
24*
2500000180 00 00 00 00 00 00 00 00 00 00 |..........|
260000018a
diff --git a/ue2/protokoll/Makefile b/ue2/protokoll/Makefile
new file mode 100644
index 0000000..94c8aa4
--- /dev/null
+++ b/ue2/protokoll/Makefile
@@ -0,0 +1,19 @@
1# Makefile for protokoll
2# Author: Guenther Neuwirth (0626638), Manuel Mausz (0728348)
3# Created: 26.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/ue2/protokoll/fancyheadings.sty b/ue2/protokoll/fancyheadings.sty
new file mode 100644
index 0000000..c1e706e
--- /dev/null
+++ b/ue2/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/ue2/protokoll/imgsynth.vpp b/ue2/protokoll/imgsynth.vpp
new file mode 100644
index 0000000..b94b9e4
--- /dev/null
+++ b/ue2/protokoll/imgsynth.vpp
Binary files differ
diff --git a/ue2/protokoll/oop_prot.sty b/ue2/protokoll/oop_prot.sty
new file mode 100644
index 0000000..26a66e6
--- /dev/null
+++ b/ue2/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/ue2/protokoll/protokoll.tex b/ue2/protokoll/protokoll.tex
new file mode 100644
index 0000000..456a6e7
--- /dev/null
+++ b/ue2/protokoll/protokoll.tex
@@ -0,0 +1,98 @@
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 2}
9
10\author{
11Günther Neuwirth, \matrnr 0626638\\
12 {\small e0626638@student.tuwien.ac.at}
13Manuel Mausz, \matrnr 0728348\\
14 {\small manuel-tu@mausz.at}\\
15}
16
17\begin{document}
18
19% create titlepage
20\maketitle
21
22\tableofcontents
23\newpage
24
25%------------------------------------------------------------------
26%------------------------------------------------------------------
27
28\section{Aufgabenstellung - Beispiel 2}
29\includegraphics[width=\textwidth,page=1]{../angabe.pdf}
30\includegraphics[width=\textwidth,page=2]{../angabe.pdf}
31\includegraphics[width=\textwidth,page=3]{../angabe.pdf}
32
33%------------------------------------------------------------------
34%------------------------------------------------------------------
35
36\section{Beispiel 2}
37
38\subsection{Design}\label{Design}
39
40Abbildung~\ref{fig:classdiagram1} zeigt das Klassendiagramm der Aufgabe.
41
42
43TODO
44
45%==================================================================
46\begin{figure}[htb]
47\begin{center}
48\epsfxsize=0.9\textwidth\epsfbox{ClassDiagram1.png}
49\end{center}
50\caption{Klassendiagramm 1}
51\label{fig:classdiagram1}
52\end{figure}
53%==================================================================
54
55
56\subsection{Verwaltung der Ressourcen}
57
58TODO
59
60\subsection{Fehlerbehandlung}
61
62TODO
63
64\subsection{Implementierung}
65
66TODO
67
68%------------------------------------------------------------------
69%------------------------------------------------------------------
70
71\section{Projektverlauf}
72
73
74\subsection{Probleme und Fallstricke}
75
76TODO
77
78\subsection{Arbeitsaufwand}
79
80
81TODO
82\begin{tabular}{ll}
83 \toprule
84 Entwicklungsschritt / Meilenstein & Arbeitsaufwand\\
85 \midrule
86 TODO
87 \bottomrule
88\end{tabular}
89
90%------------------------------------------------------------------
91%------------------------------------------------------------------
92
93\section{Listings}\label{Listings}
94
95TODO
96
97\end{document}
98