<p>Das zu ergänzende Programm dep2dot hat folgende Funktionalität:</p>
<p>Ergänzen Sie in <strong><codeclass="docutils literal notranslate"><spanclass="pre">modularize/src</span></code></strong> den Code in <strong><codeclass="docutils literal notranslate"><spanclass="pre">triangle.c</span></code></strong>,
<strong><codeclass="docutils literal notranslate"><spanclass="pre">read.h</span></code></strong>, <strong><codeclass="docutils literal notranslate"><spanclass="pre">read.c</span></code></strong>, <strong><codeclass="docutils literal notranslate"><spanclass="pre">rectang.h</span></code></strong> und <strong><codeclass="docutils literal notranslate"><spanclass="pre">rectang.c</span></code></strong> so
dass die Tests erfolgreich durchlaufen. Die C Implementation soll
dieselbe Funktionalität haben wie die gegebenen Java Files. Lehnen Sie
sich so nahe wie möglich an die Java Files an.</p>
<olclass="arabic simple">
<li><p>In den Header-Files implementieren Sie den Include-Guard und
deklarieren Sie die öffentlichen Funktionen und gegebenenfalls
<li><p>In den Implementations-Files implementieren Sie die Funktionen.</p></li>
</ol>
<p>Die drei Java Files liegen in <strong><codeclass="docutils literal notranslate"><spanclass="pre">modularize/java</span></code></strong>.</p>
<sectionid="tipps">
<h3>Tipps<aclass="headerlink"href="#tipps"title="Permalink to this headline">¶</a></h3>
<ulclass="simple">
<li><p>Implementieren Sie die Symbole welche vollständig in Grossbuchstaben
geschrieben sind als <strong><codeclass="docutils literal notranslate"><spanclass="pre">#define</span></code></strong>.</p></li>
<li><p><strong><codeclass="docutils literal notranslate"><spanclass="pre">EOF</span></code></strong> kommt schon aus <strong><codeclass="docutils literal notranslate"><spanclass="pre">stdio.h</span></code></strong> und sollte deshalb nicht
mehr definiert werden.</p></li>
<li><p>Jene <strong><codeclass="docutils literal notranslate"><spanclass="pre">#define</span></code></strong> welche von andern Modulen verwendet werden
kommen ins Header-File, die andern ins Implementations-File.</p></li>
<li><p>Ein Grossteil des Java Codes aus den Methoden Bodies kann
eins-zu-eins in C übernommen werden. Listen Sie auf welche
<p>Die folgenden drei Schritte erstellen von einem C Source File eine
graphische Darstellung der Abhängigkeiten:</p>
<olclass="arabic simple">
<li><p><codeclass="docutils literal notranslate"><spanclass="pre">gcc</span><spanclass="pre">...</span><spanclass="pre">-H</span><spanclass="pre">..</span><spanclass="pre">file.c</span><spanclass="pre">...</span><spanclass="pre">2></span><spanclass="pre">file.dep</span></code> (Regeln im Makefile bereits vorhanden)</p></li>
<li><p><codeclass="docutils literal notranslate"><spanclass="pre">dep2dot</span><spanclass="pre">file.c</span><spanclass="pre"><file.dep</span><spanclass="pre">>file.dot</span></code> (in dieser Aufgabe zu erstellen)</p></li>
<li><p><codeclass="docutils literal notranslate"><spanclass="pre">dot</span><spanclass="pre">-Tpng</span><spanclass="pre">file.dot</span><spanclass="pre">>file.png</span></code> (in dieser Aufgabe zu erstellen)</p></li>
</ol>
<p>Sie sollen für die Compiler-ähnlichen Programme <codeclass="docutils literal notranslate"><spanclass="pre">dep2dot</span></code> und <codeclass="docutils literal notranslate"><spanclass="pre">dot</span></code>
<p>Das Programm <codeclass="docutils literal notranslate"><spanclass="pre">dep2dot</span></code> hat folgende Funktionalität:</p>
<olclass="arabic simple">
<li><p>Es liest von <codeclass="docutils literal notranslate"><spanclass="pre">stdin</span></code> die vom Compiler generierten
Abhängigkeits-Daten in Form des <codeclass="docutils literal notranslate"><spanclass="pre">dep</span></code> Formates ein.</p></li>
<li><p>Das erste und einzige Command Line Argument gibt das File an für
welches die von <codeclass="docutils literal notranslate"><spanclass="pre">stdin</span></code> gelesenen Abhängigkeiten gelten.</p></li>
<li><p>Auf <codeclass="docutils literal notranslate"><spanclass="pre">stdout</span></code> werden die Abhängigkeiten von <codeclass="docutils literal notranslate"><spanclass="pre">stdin</span></code> übersetzt als
<codeclass="docutils literal notranslate"><spanclass="pre">dot</span></code>-File Format ausgegeben.</p></li>
</ol>
<p>Das Programm <codeclass="docutils literal notranslate"><spanclass="pre">dot</span></code> hat folgende Funktionalität:</p>
<olclass="arabic simple">
<li><p>Es liest die textuelle Beschreibung eines Graphen aus der
übergebenen Datei (erstes Argument) ein.</p></li>
<li><p>Auf <codeclass="docutils literal notranslate"><spanclass="pre">stdout</span></code> wird die grafische Darstellung der Beschreibung der
Eingabe-Datei im <codeclass="docutils literal notranslate"><spanclass="pre">png</span></code>-File Format ausgegeben.</p></li>
</ol>
<p>Das <codeclass="docutils literal notranslate"><spanclass="pre">dep</span></code>-Format und das <codeclass="docutils literal notranslate"><spanclass="pre">dot</span></code>-Format sind im Anhang beschrieben.</p>
<p>Sie können die Funktionalität des Programms <codeclass="docutils literal notranslate"><spanclass="pre">dep2dot</span></code> kennen lernen,
indem Sie folgende Zeilen auf der Bash Shell ausführen. Das
<codeclass="docutils literal notranslate"><spanclass="pre">dep.input</span></code> File ist Teil der automatisierten Test Suite im
<p>Definieren Sie im <codeclass="docutils literal notranslate"><spanclass="pre">Makefile</span></code> Regeln, welche die einzelnen Schritte von
den Source Files zu den <codeclass="docutils literal notranslate"><spanclass="pre">png</span></code> Files ausführen.</p>
<p>Prüfen Sie schliesslich die Umsetzung Aufgabe mittels <codeclass="docutils literal notranslate"><spanclass="pre">make</span><spanclass="pre">dep-clean</span><spanclass="pre">dep</span><spanclass="pre">&&</span><spanclass="pre">firefox</span><spanclass="pre">src/*.png.</span></code></p>
<p>Führen Sie im <codeclass="docutils literal notranslate"><spanclass="pre">Makefile</span></code> an den angegebenen Stellen folgende
Ergänzungen durch</p>
<ulclass="simple">
<li><p>definieren Sie eine Variable <codeclass="docutils literal notranslate"><spanclass="pre">DEPFILES</span></code> deren Inhalt die Liste alle
Einträge der Variable <codeclass="docutils literal notranslate"><spanclass="pre">SOURCES</span></code> ist, wobei bei allen die Endung <codeclass="docutils literal notranslate"><spanclass="pre">.c</span></code>
durch die Endung <codeclass="docutils literal notranslate"><spanclass="pre">.c.png</span></code> ersetzt ist</p></li>
<li><p>fügen Sie zum <codeclass="docutils literal notranslate"><spanclass="pre">Pseudo-Target</span><spanclass="pre">.PHONEY</span></code> das Target <codeclass="docutils literal notranslate"><spanclass="pre">dep</span></code> dazu – dies
besagt, dass das später folgenden Target <codeclass="docutils literal notranslate"><spanclass="pre">dep</span></code> nicht ein File
repräsentiert (ohne dieses Setting würde make gegebenenfalls nach
einem File mit Namen <codeclass="docutils literal notranslate"><spanclass="pre">dep</span></code> suchen um zu entscheiden ob es
inkrementell gebildet werden muss)</p></li>
<li><p>schreiben Sie das Target <codeclass="docutils literal notranslate"><spanclass="pre">dep</span></code> gemäss der Beschreibung im Makefile</p></li>
<li><p>schreiben Sie die Suffix Regel für die Übersetzung von <codeclass="docutils literal notranslate"><spanclass="pre">.png</span><spanclass="pre"><-</span><spanclass="pre">.dot</span></code> gemäss Vorgabe im <codeclass="docutils literal notranslate"><spanclass="pre">Makefile</span></code> (als Inspiration, siehe auch die
<codeclass="docutils literal notranslate"><spanclass="pre">%.c.dep:</span><spanclass="pre">%.c</span></code> Suffix Regel weiter unten im <codeclass="docutils literal notranslate"><spanclass="pre">Makefile</span></code>) – erklären
Sie was die Regel macht</p></li>
<li><p>schreiben Sie die Suffix Regel für die Übersetzung von<codeclass="docutils literal notranslate"><spanclass="pre">.dot</span><spanclass="pre"><-</span><spanclass="pre">.dep</span></code> gemäss Vorgabe im <codeclass="docutils literal notranslate"><spanclass="pre">Makefile</span></code>– erklären Sie was die Regel
macht</p></li>
</ul>
<p>Die Umsetzung der obigen Änderungen sind erfolgreich, wenn Sie
folgende Shell Command Line erfolgreich ausführen können und in
<p>Die gegebenenfalls gestellten Theorieaufgaben und der funktionierende Programmcode müssen der Praktikumsbetreuung gezeigt werden. Die Lösungen müssen mündlich erklärt werden.</p>
<h3>6.1 Verwendete zusätzliche Sprach Elemente<aclass="headerlink"href="#verwendete-zusatzliche-sprach-elemente"title="Permalink to this headline">¶</a></h3>
<h3>6.2 Verarbeitung und verwendete File Formate <aname="file_formats"></a><aclass="headerlink"href="#verarbeitung-und-verwendete-file-formate-a-name-file-formats-a"title="Permalink to this headline">¶</a></h3>
<p>Das Programm in diesem Praktikum ist Teil für die graphische
Darstellung von <codeclass="docutils literal notranslate"><spanclass="pre">#include</span></code> File Abhängigkeit von C Files.</p>
<p>Den ersten Schritt für die Darstellung der <codeclass="docutils literal notranslate"><spanclass="pre">#include</span></code> File
Abhängigkeiten bietet der Compiler. Der Compiler kann mittels der <codeclass="docutils literal notranslate"><spanclass="pre">-H</span></code>
Command Line Option auf <codeclass="docutils literal notranslate"><spanclass="pre">stderr</span></code> ein Text File generieren, welches die
tatsächlich verwendeten Header Files auflistet. Zusätzlich wird im
Resultat die Verschachtelungstiefe der Includes angegeben.</p>
<p>Im zweiten Schritt übersetzt das Programm (<codeclass="docutils literal notranslate"><spanclass="pre">dep2dot</span></code>) dieses
Praktikums solche Dependency Files (<codeclass="docutils literal notranslate"><spanclass="pre">dep</span></code>) in eine Text Repräsentation
der Abhängigkeiten (<codeclass="docutils literal notranslate"><spanclass="pre">dot</span></code>) welche in graphische Darstel-lung (<codeclass="docutils literal notranslate"><spanclass="pre">png</span></code>)
übersetzt werden kann.</p>
<p>Als Tool zur Übersetzung der <codeclass="docutils literal notranslate"><spanclass="pre">dot</span></code> Files in das <codeclass="docutils literal notranslate"><spanclass="pre">png</span></code> Format dient das
<codeclass="docutils literal notranslate"><spanclass="pre">dot</span></code> Tool. Dieses Tool muss gegebenenfalls installiert werden:</p>
<p>Die <codeclass="docutils literal notranslate"><spanclass="pre">png</span></code> Files können dann z.B. in der Programm Dokumentation
integriert werden (Darstellung zu Test Zwecken z.B. mittels <codeclass="docutils literal notranslate"><spanclass="pre">firefox</span><spanclass="pre">file.png</span></code>).</p>
<sectionid="dep-file">
<h4>6.2.1 dep File<aclass="headerlink"href="#dep-file"title="Permalink to this headline">¶</a></h4>
<divclass="highlight-bash notranslate"><divclass="highlight"><pre><span></span>-H Print the name of each header file used, <spanclass="k">in</span> addition to other
normal activities. Each name is indented to show how deep <spanclass="k">in</span> the
<spanclass="c1">#include stack it is. [...]</span>
</pre></div>
</div>
<p>Das File wird auf <codeclass="docutils literal notranslate"><spanclass="pre">stderr</span></code> ausgegeben.</p>
<p><strong>Beispiel File</strong> (für Abhängigkeiten des <codeclass="docutils literal notranslate"><spanclass="pre">main.c</span></code> Files des <codeclass="docutils literal notranslate"><spanclass="pre">dep2dot</span></code> Programms)</p>
Multiple include guards may be useful <spanclass="k">for</span>:
/usr/include/x86_64-linux-gnu/bits/stdlib-float.h
/usr/include/x86_64-linux-gnu/bits/sys_errlist.h
/usr/include/x86_64-linux-gnu/bits/typesizes.h
/usr/include/x86_64-linux-gnu/gnu/stubs-64.h
/usr/include/x86_64-linux-gnu/gnu/stubs.h
</pre></div>
</div>
</section>
<sectionid="dot-file">
<h4>6.2.2 dot File<aclass="headerlink"href="#dot-file"title="Permalink to this headline">¶</a></h4>
<p><strong>Graphviz</strong> ist ein mächtiges Tool-Set welches Graphen, definiert in
einem <codeclass="docutils literal notranslate"><spanclass="pre">dot</span></code>-Text File, automatisch anordnet und in <codeclass="docutils literal notranslate"><spanclass="pre">png</span></code>, <codeclass="docutils literal notranslate"><spanclass="pre">gif</span></code> und