diff --git a/20181203/hp-2018ws-p3.tex b/20181203/hp-2018ws-p3.tex
index a47eab02d0c330baab433baff0ef03b2d3628709..aca05c25ca5d6c936ca8c469be23a38c17b1189c 100644
--- a/20181203/hp-2018ws-p3.tex
+++ b/20181203/hp-2018ws-p3.tex
@@ -20,7 +20,7 @@
 % Attribution-ShareAlike 3.0 Unported License along with this
 % document.  If not, see <http://creativecommons.org/licenses/>.
 
-% README: Versuch 3, 5.12.2017 und Januar 2018: Druckknopfampel
+% README: Versuch 3, 5.12.2017 und 9.1.2019: Druckknopfampel
 
 \documentclass[a4paper]{article}
 
diff --git a/20190114/hp-2018ws-p4.pdf b/20190114/hp-2018ws-p4.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..2db1f052bb679298bf934e76a09cdabfe1d30202
Binary files /dev/null and b/20190114/hp-2018ws-p4.pdf differ
diff --git a/20190114/hp-2018ws-p4.tex b/20190114/hp-2018ws-p4.tex
new file mode 100644
index 0000000000000000000000000000000000000000..62174b215ce8ad9ed2ffe1fd569d7a6037a2b2fa
--- /dev/null
+++ b/20190114/hp-2018ws-p4.tex
@@ -0,0 +1,196 @@
+% hp-2018ws-p4.pdf - Labor Notes on Low-Level Programming
+% Copyright (C) 2014, 2015, 2016, 2018, 2019  Peter Gerwinski
+%
+% This document is free software: you can redistribute it and/or
+% modify it either under the terms of the Creative Commons
+% Attribution-ShareAlike 3.0 License, or under the terms of the
+% GNU General Public License as published by the Free Software
+% Foundation, either version 3 of the License, or (at your option)
+% any later version.
+%
+% This document is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this document.  If not, see <http://www.gnu.org/licenses/>.
+%
+% You should have received a copy of the Creative Commons
+% Attribution-ShareAlike 3.0 Unported License along with this
+% document.  If not, see <http://creativecommons.org/licenses/>.
+
+% README: Versuch 4, 16. und 23.1.2019: Objektorientiertes Grafik-Programm
+
+\documentclass[a4paper]{article}
+
+\usepackage{pgscript}
+\usepackage{multicol}
+\usepackage{amsmath}
+\usepackage{sfmath}
+
+\sloppy
+%\pagestyle{empty}
+\newcommand{\sep}{~$\cdot$~}
+\newcommand{\mylicense}{CC-by-sa (Version 3.0) oder GNU GPL (Version 3 oder höher)}
+
+\begin{document}
+
+  \makebox(0,0.005)[tl]{\includegraphics[scale=0.72]{logo-hochschule-bochum-cvh-text-v2.pdf}}\hfill
+  \makebox(0,0)[tr]{\includegraphics[scale=0.5]{logo-hochschule-bochum.pdf}}
+  \par\bigskip\bigskip
+  \begin{center}
+    \Large\textbf{Praktikumsversuch 4: Objektorientiertes Grafik-Programm}
+    \par\medskip
+    \normalsize Hardwarenahe Programmierung\sep
+    Wintersemester 2018/19\sep
+    Prof.~Dr.~Peter Gerwinski
+  \end{center}
+
+  Aufgabe: Schreiben Sie ein GTK+-Programm,
+  mit dem man verschiedene Objekte (z.\,B.\ Rechtecke, Kreise, Dreiecke)
+  in eine Grafik einfügen und nachträglich verändern kann
+  (z.\,B.\ Position, Größe, Farbe).
+
+  (Beispiel: Ich füge zunächst zwei Rechtecke und einen Kreis in eine Grafik ein,
+  wähle anschließend das erste Rechteck aus und ändere dessen Farbe.)
+
+  \bigskip
+
+  Hinweise:
+  \vspace*{-\medskipamount}
+
+  \begin{itemize}
+    \item
+      Das Beispielprogramm \gitfile{hp}{20190114}{objects-12.c} zeigt,
+      wie man in C verschiedenartige Objekte
+      in einem Array von Zeigern verwaltet.
+    \item
+      Das Beispielprogramm \gitfile{hp}{20190114}{gtk-6.c} zeigt,
+      wie man mit Hilfe der GUI-Bibliothek GTK+
+      verschiedene Objekte in ein Fenster zeichnet.
+    \item
+      Das Beispielprogramm \gitfile{hp}{20190114}{gtk-7.c} zeigt,
+      wie man in der GUI-Bibliothek GTK+
+      Tastatur- und Maus-Eingaben entgegennimmt und verarbeitet.
+    \item
+      Das Auswählen eines bereits vorhandenen Objekts geht am einfachsten
+      mittels Tastatur-Eingaben (z.\,B.\ Ziffer 1 für das erste Objekt usw.).
+      Auswahl mit der Maus ist auch möglich, aber schwieriger.
+    \item
+      Mit Hilfe der Funktion \lstinline{gtk_widget_queue_draw()}
+      teilen Sie GTK+ mit, daß Sie ein \lstinline{GtkWidget}
+      neu zeichnen lassen möchten.
+    \item
+      Das Compilieren eines GTK+-Programms
+      (z.\,B.\ \gitfile{hp}{20190114}{gtk-7.c}) geschieht wie folgt:
+      \begin{lstlisting}[style=cmd,gobble=8]
+        gcc $(pkg-config --cflags gtk+-3.0) -Wall -O gtk-7.c \
+            $(pkg-config --libs gtk+-3.0) -o gtk-7
+      \end{lstlisting}
+      (Den Backslash am Ende der ersten Zeile entfällt,
+      wenn Sie den ganzen Befehl in eine einzige Zeile schreiben.)
+  \end{itemize}
+
+  \bigskip
+  \textbf{GTK+ unter GNU/Linux}
+  \begin{itemize}
+    \item
+      Installieren Sie das Entwickler-Paket für GTK+-3,\\
+      z.\,B.\ unter Debian GNU/Linux und darauf basierenden Systemen:
+      \begin{lstlisting}[style=cmd,gobble=8]
+        apt-get install libgtk-3-dev
+      \end{lstlisting}
+  \end{itemize}
+
+  \bigskip
+  \goodbreak
+  \textbf{GTK+ unter MacOS X}
+  \begin{itemize}
+    \item
+      Zuerst den Paketmanager "`Homebrew"' installieren:
+      \begin{lstlisting}[style=cmd,gobble=8]
+        ruby -e "$(curl -fsSL https://raw.githubusercontent.com/
+                              Homebrew/install/master/install)"
+      \end{lstlisting}
+      (Die URL nicht trennen, sondern in einer Zeile schreiben.)
+    \item
+      Danach mit Hilfe von \lstinline[style=cmd]{brew} GTK+ installieren:
+      \begin{lstlisting}[style=cmd,gobble=8]
+        brew install gtk+3
+      \end{lstlisting}
+  \end{itemize}
+
+  \bigskip
+  \goodbreak
+  \textbf{GTK+ unter Microsoft Windows: Cygwin}
+  \begin{itemize}
+    \item
+      Im Cygwin-Setup-Programm die Pakete \file{libgtk3-devel}
+      und \file{xorg-server} installieren.\\
+      (Evtl.\ muß zusätzlich \file{dbus-x11} installiert werden -- bitte mal testen.)
+    \item
+      Bevor Sie GTK+-Programme starten können,
+      müssen Sie einmalig den X-Server starten:
+      \begin{lstlisting}[style=cmd,gobble=8]
+        XWin -multiwindow &
+      \end{lstlisting}
+    \item
+      Bevor Sie GTK+-Programme starten können,
+      müssen Sie einmalig pro Shell-Sitzung\\
+      die \lstinline[style=cmd]{DISPLAY}-Variable setzen:
+      \begin{lstlisting}[style=cmd,gobble=8]
+        export DISPLAY=:0.0
+      \end{lstlisting}
+  \end{itemize}
+
+  \bigskip
+  \goodbreak
+  \textbf{GTK+ unter Microsoft Windows: MinGW}
+  \begin{itemize}
+%    \item[]
+%      \emph{(Wir arbeiten dran. Kommt gleich \dots)}
+    \item
+      Installieren Sie \file{MSYS2} (Installer).
+    \item
+      Installieren Sie von der MinGW-Shell aus GTK+
+      und weitere Entwicklungswerkzeuge:
+      \begin{lstlisting}[style=cmd,gobble=8]
+        pacman -S mingw-w64-x86_64-gcc
+        pacman -S mingw-w64-x86_64-gtk3
+        pacman -S mingw-w64-x86_64-pkg-config
+      \end{lstlisting}
+    \item
+      Falls nötig, ergänzen Sie in der MinGW-Shell
+      den Pfad zu den neu installierten Programmen:
+      \begin{lstlisting}[style=cmd,gobble=8]
+        export PATH=$PATH:/mingw64/bin
+      \end{lstlisting}
+  \end{itemize}
+
+  \bigskip
+
+  \strut\hfill\emph{Viel Erfolg!}
+
+  \vfill
+
+  \begingroup
+
+    \small
+
+    \setlength{\leftskip}{3cm}
+
+    Stand: 14.\ Januar 2019
+
+%    Soweit nicht anders angegeben:\\
+    Copyright \copyright\ 2014, 2015, 2016, 2018, 2019\quad Peter Gerwinski\\
+    Lizenz: \mylicense
+
+    Sie können diese Praktikumsunterlagen einschließlich Quelltext
+%    und Beispielprogramme\\
+    herunterladen unter:\\
+    \url{https://gitlab.cvh-server.de/pgerwinski/hp}
+
+  \endgroup
+
+\end{document}
diff --git a/README.md b/README.md
index 5e9652574d855caa30f8d001c0df34051f70dda1..fefb0d526848fdec3ae5e9f05f171f3aa81ca721 100644
--- a/README.md
+++ b/README.md
@@ -69,7 +69,8 @@ Praktikumsunterlagen:
 ---------------------
  * [Versuch 1, 10., 17. und 24.10.2018: RSA-Verschlüsselung](https://gitlab.cvh-server.de/pgerwinski/hp/raw/master/20181008/hp-2018ws-p1.pdf)
  * [Versuch 2, 14. und 21.11.2018: Weltraum-Simulation](https://gitlab.cvh-server.de/pgerwinski/hp/raw/master/20181112/hp-2018ws-p2.pdf)
- * [Versuch 3, 5.12.2017 und Januar 2018: Druckknopfampel](https://gitlab.cvh-server.de/pgerwinski/hp/raw/master/20181203/hp-2018ws-p3.pdf)
+ * [Versuch 3, 5.12.2017 und 9.1.2019: Druckknopfampel](https://gitlab.cvh-server.de/pgerwinski/hp/raw/master/20181203/hp-2018ws-p3.pdf)
+ * [Versuch 4, 16. und 23.1.2019: Objektorientiertes Grafik-Programm](https://gitlab.cvh-server.de/pgerwinski/hp/raw/master/20190114/hp-2018ws-p4.pdf)
 
 Skript:
 -------
diff --git a/hp-slides-2018ws.pdf b/hp-slides-2018ws.pdf
index 0e76e40103a20c996ce2591ee8e6ef49507c45c0..1b442af0a938f142f8d44c8efb504ca813798da8 100644
Binary files a/hp-slides-2018ws.pdf and b/hp-slides-2018ws.pdf differ