--- /dev/null
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <string.h>
+#include <gtk/gtk.h>
+
+static void
+destroy (GtkWidget *widget, gpointer data)
+{
+ gtk_main_quit ();
+}
+
+int
+main (int argc, char **argv)
+{
+ FILE *fp;
+ struct stat statbuf;
+ unsigned char *buf;
+ size_t nbytes;
+ GtkWidget *window, *view;
+ GtkTextBuffer *buffer;
+
+ if (argc < 2)
+ {
+ fprintf (stderr, "Usage: viewfile FILENAME\n");
+ exit (1);
+ }
+ if (stat (argv[1], &statbuf) != 0
+ || ! (fp = fopen (argv[1], "r")))
+ {
+ fprintf (stderr, "Can't open \"%s\"\n", argv[1]);
+ exit (1);
+ }
+ buf = alloca (statbuf.st_size);
+ fread (buf, 1, statbuf.st_size, fp);
+ fclose (fp);
+
+ gtk_init (&argc, &argv);
+ window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (destroy), NULL);
+ view = gtk_text_view_new ();
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
+ gtk_text_buffer_set_text (buffer, (gchar *) buf, statbuf.st_size);
+ gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (view), FALSE);
+ gtk_container_add (GTK_CONTAINER (window), view);
+ gtk_widget_show_all (window);
+ gtk_main ();
+
+ return 0;
+}