diff --git a/20151203/ujma/Text-Grafik-Bibliothek-4.c b/20151203/ujma/Text-Grafik-Bibliothek-4.c
new file mode 100644
index 0000000000000000000000000000000000000000..e9655a635f19e6424ed83baa0a0d58c1ab1e7a76
--- /dev/null
+++ b/20151203/ujma/Text-Grafik-Bibliothek-4.c
@@ -0,0 +1,62 @@
+#include "Text-Grafik-Bibliothek-20x15.h"
+#include <stdio.h>
+#include "fifo-pg-3.h"
+
+char screen[WIDTH][HEIGHT];
+
+//Setze alle Einträge in display auf c
+void clear (char c)
+{
+ for (int i=0;i<WIDTH;i++)
+  {
+   for (int j=0;j<HEIGHT;j++)
+    {
+     screen[i][j]=c;
+    }
+  }
+}
+
+//setze display [x][y] auf c
+void putPoint (int x, int y, char c)
+{
+ screen[x][y]=c;
+}
+
+//Gebe display[x][y] zurück
+char getPoint (int x, int y)
+{
+  char c=screen[x][y];
+  return c;
+}
+
+//Fülle eine Fläche in display, die aus den Zeichen o besteht mit den Zeichen c aus
+void fill (int x, int y, char c, char o)
+{
+  push_pair (x, y);
+  while (!fifo_empty ())
+    {
+      pair p = pop_pair ();
+      if (getPoint (p.x, p.y) == o)
+	{
+	  putPoint (p.x, p.y, c++);
+	  push_pair (p.x + 1, p.y);
+	  push_pair (p.x - 1, p.y);
+	  push_pair (p.x, p.y + 1);
+	  push_pair (p.x, p.y - 1);
+	}
+    }
+}
+
+//Gib display aus
+void display (void)
+{
+ for (int i=0;i<HEIGHT;i++)
+  {
+   for (int j=0;j<WIDTH;j++)
+    {
+     printf("%c",screen[j][i]);
+    }
+   printf("\n");
+  }
+}
+
diff --git a/20151203/ujma/fifo-pg-1.c b/20151203/ujma/fifo-pg-1.c
new file mode 100644
index 0000000000000000000000000000000000000000..016bc00afab124bb7a3d109694166b58311f213b
--- /dev/null
+++ b/20151203/ujma/fifo-pg-1.c
@@ -0,0 +1,94 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+#define FIFO_SIZE 42
+
+typedef struct
+{
+	int x, y;
+}
+pair;
+
+pair fifo[FIFO_SIZE];
+int fifo_read_pointer = 0;
+int fifo_write_pointer = 0;
+
+void fatal_error (char *msg)
+{
+	fprintf (stderr, "%s\n", msg);
+	exit (1);
+}
+
+void push_pair (int x, int y)
+{
+	if (fifo_write_pointer < 0 || fifo_write_pointer >= FIFO_SIZE)
+		fatal_error ("push_pair: fifo inconsistence");
+	else
+	{
+		printf ("pushing (%d,%d)\n", x, y);
+		fifo[fifo_write_pointer].x = x;
+		fifo[fifo_write_pointer].y = y;
+		fifo_write_pointer++;
+		if (fifo_write_pointer >= FIFO_SIZE)
+			fifo_write_pointer = 0;
+		if (fifo_write_pointer == fifo_read_pointer)
+			fatal_error ("fifo overflow");
+    }
+}
+
+pair pop_pair (void)
+{
+	pair nix = { 0, 0 };
+	if (fifo_read_pointer < 0 || fifo_read_pointer >= FIFO_SIZE)
+    {
+		fatal_error ("pop_pair: fifo inconsistence");		
+		return nix;
+    }
+	else if (fifo_read_pointer == fifo_write_pointer)
+    {
+		fatal_error ("fifo underflow");
+		return nix;
+    }
+	else
+    {
+		printf ("popping (%d,%d)\n", fifo[fifo_read_pointer].x, fifo[fifo_read_pointer].y);
+		pair value = fifo[fifo_read_pointer];
+		fifo[fifo_read_pointer].x = 0;
+		fifo[fifo_read_pointer].y = 0;
+		fifo_read_pointer++;
+		if (fifo_read_pointer >= FIFO_SIZE)
+			fifo_read_pointer = 0;
+		return value;
+    }
+}
+
+void dump_fifo (void)
+{
+	int i;
+	printf ("dump_fifo:");
+	for (i = 0; i < FIFO_SIZE; i++)
+		printf (" (%d,%d)", fifo[i].x, fifo[i].y);
+	printf ("\n");
+}
+
+int main (void)
+{
+	dump_fifo ();
+	push_pair (3, 0);
+	dump_fifo ();
+	push_pair (7, 2);
+	dump_fifo ();
+	push_pair (23, 23);
+	dump_fifo ();
+	pop_pair ();
+	dump_fifo ();
+	pop_pair ();
+	dump_fifo ();
+	push_pair (42, 137);
+	dump_fifo ();
+	pop_pair ();
+	dump_fifo ();
+	pop_pair ();
+	dump_fifo ();
+	return 0;
+}
diff --git a/20151203/ujma/fifo-pg-2.c b/20151203/ujma/fifo-pg-2.c
new file mode 100644
index 0000000000000000000000000000000000000000..cf3194f4f9f9d6f8902a02b8c9aaf0f53d1fc4be
--- /dev/null
+++ b/20151203/ujma/fifo-pg-2.c
@@ -0,0 +1,94 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+#define FIFO_SIZE 42
+
+typedef struct
+{
+	int x, y;
+}
+pair;
+
+pair fifo[FIFO_SIZE];
+int fifo_read_pointer = 0;
+int fifo_write_pointer = 0;
+
+void fatal_error (char *msg)
+{
+	fprintf (stderr, "%s\n", msg);
+	exit (1);
+}
+
+void push_pair (int x, int y)
+{
+	if (fifo_write_pointer < 0 || fifo_write_pointer >= FIFO_SIZE)
+		fatal_error ("push_pair: fifo inconsistence");
+	else
+	{
+		printf ("pushing (%d,%d)\n", x, y);
+		fifo[fifo_write_pointer].x = x;
+		fifo[fifo_write_pointer].y = y;
+		fifo_write_pointer++;
+		if (fifo_write_pointer >= FIFO_SIZE)
+			fifo_write_pointer = 0;
+		if (fifo_write_pointer == fifo_read_pointer)
+			fatal_error ("fifo overflow");
+    }
+}
+
+pair pop_pair (void)
+{
+	pair nix = { 0, 0 };
+	if (fifo_read_pointer < 0 || fifo_read_pointer >= FIFO_SIZE)
+    {
+		fatal_error ("pop_pair: fifo inconsistence");		
+		return nix;
+    }
+	else if (fifo_read_pointer == fifo_write_pointer)
+    {
+		fatal_error ("fifo underflow");
+		return nix;
+    }
+	else
+    {
+		printf ("popping (%d,%d)\n", fifo[fifo_read_pointer].x, fifo[fifo_read_pointer].y);
+		pair value = fifo[fifo_read_pointer];
+		fifo[fifo_read_pointer].x = 0;
+		fifo[fifo_read_pointer].y = 0;
+		fifo_read_pointer++;
+		if (fifo_read_pointer >= FIFO_SIZE)
+			fifo_read_pointer = 0;
+		return value;
+    }
+}
+
+void dump_fifo (void)
+{
+	int i;
+	printf ("dump_fifo:");
+	for (i = fifo_read_pointer; i < fifo_write_pointer; i++)
+		printf (" (%d,%d)", fifo[i].x, fifo[i].y);
+	printf ("\n");
+}
+
+int main (void)
+{
+	dump_fifo ();
+	push_pair (3, 0);
+	dump_fifo ();
+	push_pair (7, 2);
+	dump_fifo ();
+	push_pair (23, 23);
+	dump_fifo ();
+	pop_pair ();
+	dump_fifo ();
+	pop_pair ();
+	dump_fifo ();
+	push_pair (42, 137);
+	dump_fifo ();
+	pop_pair ();
+	dump_fifo ();
+	pop_pair ();
+	dump_fifo ();
+	return 0;
+}
diff --git a/20151203/ujma/fifo-pg-3.c b/20151203/ujma/fifo-pg-3.c
new file mode 100644
index 0000000000000000000000000000000000000000..316fcbfbfee3bc3f9c4106c0b2e97573d6b62a6f
--- /dev/null
+++ b/20151203/ujma/fifo-pg-3.c
@@ -0,0 +1,70 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include "fifo-pg-3.h"
+
+pair fifo[FIFO_SIZE];
+int fifo_read_pointer = 0;
+int fifo_write_pointer = 0;
+
+void fatal_error (char *msg)
+{
+	fprintf (stderr, "%s\n", msg);
+	exit (1);
+}
+
+int fifo_empty (void)
+{
+  return fifo_read_pointer == fifo_write_pointer;
+}
+
+void push_pair (int x, int y)
+{
+	if (fifo_write_pointer < 0 || fifo_write_pointer >= FIFO_SIZE)
+		fatal_error ("push_pair: fifo inconsistence");
+	else
+	{
+		printf ("pushing (%d,%d)\n", x, y);
+		fifo[fifo_write_pointer].x = x;
+		fifo[fifo_write_pointer].y = y;
+		fifo_write_pointer++;
+		if (fifo_write_pointer >= FIFO_SIZE)
+			fifo_write_pointer = 0;
+		if (fifo_write_pointer == fifo_read_pointer)
+			fatal_error ("fifo overflow");
+    }
+}
+
+pair pop_pair (void)
+{
+	pair nix = { 0, 0 };
+	if (fifo_read_pointer < 0 || fifo_read_pointer >= FIFO_SIZE)
+    {
+		fatal_error ("pop_pair: fifo inconsistence");		
+		return nix;
+    }
+	else if (fifo_read_pointer == fifo_write_pointer)
+    {
+		fatal_error ("fifo underflow");
+		return nix;
+    }
+	else
+    {
+		printf ("popping (%d,%d)\n", fifo[fifo_read_pointer].x, fifo[fifo_read_pointer].y);
+		pair value = fifo[fifo_read_pointer];
+		fifo[fifo_read_pointer].x = 0;
+		fifo[fifo_read_pointer].y = 0;
+		fifo_read_pointer++;
+		if (fifo_read_pointer >= FIFO_SIZE)
+			fifo_read_pointer = 0;
+		return value;
+    }
+}
+
+void dump_fifo (void)
+{
+	int i;
+	printf ("dump_fifo:");
+	for (i = fifo_read_pointer; i < fifo_write_pointer; i++)
+		printf (" (%d,%d)", fifo[i].x, fifo[i].y);
+	printf ("\n");
+}
diff --git a/20151203/ujma/fifo-pg-3.h b/20151203/ujma/fifo-pg-3.h
new file mode 100644
index 0000000000000000000000000000000000000000..968c011095abaac80d056166e082107b7acd145a
--- /dev/null
+++ b/20151203/ujma/fifo-pg-3.h
@@ -0,0 +1,15 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+#define FIFO_SIZE 42
+
+typedef struct
+{
+	int x, y;
+}
+pair;
+
+extern int fifo_empty (void);
+extern void push_pair (int x, int y);
+extern pair pop_pair (void);
+extern void dump_fifo (void);
diff --git a/20151203/ujma/fifo.c b/20151203/ujma/fifo.c
new file mode 100644
index 0000000000000000000000000000000000000000..f1a06167468bc15947171cfe3cfbc133c567f957
--- /dev/null
+++ b/20151203/ujma/fifo.c
@@ -0,0 +1,94 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+#define FIFO_SIZE 42
+
+typedef struct
+{
+	int x, y;
+}
+pair;
+
+pair fifo[FIFO_SIZE];
+int fifo_read_pointer = 0;
+int fifo_write_pointer = 0;
+
+void fatal_error (char *msg)
+{
+	fprintf (stderr, "%s\n", msg);
+	exit (1);
+}
+
+void push_pair (int x, int y)
+{
+	if (fifo_write_pointer < 0 || fifo_write_pointer >= FIFO_SIZE)
+		fatal_error ("push_pair: fifo inconsistence");
+	else
+	{
+		printf ("pushing (%d,%d)\n", x, y);
+		fifo[fifo_write_pointer].x = x;
+		fifo[fifo_write_pointer].y = y;
+		fifo_write_pointer++;
+		if (fifo_write_pointer >= FIFO_SIZE)
+			fifo_write_pointer = 0;
+		if (fifo_write_pointer == fifo_read_pointer)
+			fatal_error ("fifo overflow");
+    }
+}
+
+pair pop_pair (void)
+{
+	pair nix;
+	if (fifo_read_pointer < 0 || fifo_read_pointer >= FIFO_SIZE)
+    {
+		fatal_error ("pop_pair: fifo inconsistence");		
+		return nix;
+    }
+	else if (fifo_read_pointer == fifo_write_pointer)
+    {
+		fatal_error ("fifo underflow");
+		return nix;
+    }
+	else
+    {
+		printf ("popping (%d,%d)\n", fifo[fifo_read_pointer].x, fifo[fifo_read_pointer].y);
+		pair value = fifo[fifo_read_pointer];
+		fifo[fifo_read_pointer].x = 0;
+		fifo[fifo_read_pointer].y = 0;
+		fifo_read_pointer++;
+		if (fifo_read_pointer >= FIFO_SIZE)
+			fifo_read_pointer = 0;
+		return value;
+    }
+}
+
+void dump_stack (void)
+{
+	int i;
+	printf ("dump_stack:");
+	for (i = 0; i < FIFO_SIZE; i++)
+		printf (" (%d,%d)", fifo[i].x, fifo[i].y);
+	printf ("\n");
+}
+
+int main (void)
+{
+	dump_stack ();
+	push_pair (3, 0);
+	dump_stack ();
+	push_pair (7, 2);
+	dump_stack ();
+	push_pair (23, 23);
+	dump_stack ();
+	pop_pair ();
+	dump_stack ();
+	pop_pair ();
+	dump_stack ();
+	push_pair (42, 137);
+	dump_stack ();
+	pop_pair ();
+	dump_stack ();
+	pop_pair ();
+	dump_stack ();
+	return 0;
+}