did tedious stuff
diff --git a/uniq.c b/uniq.c
index 251cf2d..5f0e192 100644
--- a/uniq.c
+++ b/uniq.c
@@ -23,6 +23,8 @@
 
 #include "internal.h"
 #include <stdio.h>
+#include <string.h>
+#include <errno.h>
 
 static const char uniq_usage[] =
 "haha\n"
@@ -105,6 +107,35 @@
     return self;
 }
 
+static int
+set_file_pointers(int schema, FILE **in, FILE **out, char **argv)
+{
+    switch (schema) {
+	case 0:
+	    *in = stdin;
+	    *out = stdout;
+	    break;
+	case 1:
+	    *in = fopen(argv[0], "r");
+	    *out = stdout;
+	    break;
+	case 2:
+	    *in = fopen(argv[0], "r");
+	    *out = fopen(argv[1], "w");
+	    break;
+    }
+    if (*in == NULL) {
+	fprintf(stderr, "uniq: %s: %s\n", argv[0], strerror(errno));
+	return errno;
+    }
+    if (*out == NULL) {
+	fprintf(stderr, "uniq: %s: %s\n", argv[1], strerror(errno));
+	return errno;
+    }
+    return 0;
+}
+
+
 /* one variable is the decision algo */
 /* another variable is the printing algo */
 
@@ -122,20 +153,6 @@
     FILE    *in, *out;
     Subject s;
 
-    /* init */
-    in  = stdin;
-    out = stdout;
-
-    subject_init(&s, in, out, NULL);
-    while (subject_next(&s)) { 
-	subject_study(&s);
-    }
-    subject_last(&s);
-    subject_study(&s);
-    exit(0);
-
-    /* XXX : finish the tedious stuff */
-
     /* parse argv[] */
     for (i = 1; i < argc; i++) {
 	if (argv[i][0] == '-') {
@@ -152,7 +169,21 @@
 	}
     }
 
+    /* 0 src: stdin; dst: stdout */
+    /* 1 src: file;  dst: stdout */
+    /* 2 src: file;  dst: file   */
+    if (set_file_pointers((argc - 1), &in, &out, &argv[i])) {
+	exit(1);
+    }
+
+    subject_init(&s, in, out, NULL);
+    while (subject_next(&s)) { 
+	subject_study(&s);
+    }
+    subject_last(&s);
+    subject_study(&s);
+
     exit(0);
 }
 
-/* $Id: uniq.c,v 1.2 2000/01/06 01:14:56 erik Exp $ */
+/* $Id: uniq.c,v 1.3 2000/01/06 23:49:21 beppu Exp $ */