Latest and greatest
 -Erik
diff --git a/gzip.c b/gzip.c
index 500d6d7..8f2c1c4 100644
--- a/gzip.c
+++ b/gzip.c
@@ -12,10 +12,11 @@
 //#endif
 
 static const char gzip_usage[] =
-    "gzip [OPTION]... [FILE]...\n\n"
-    "Compress FILEs with maximum compression.\n\n"
+    "gzip [OPTION]... FILE\n\n"
+    "Compress FILE with maximum compression.\n"
+    "When FILE is -, reads standard input.  Implies -c.\n\n"
     "Options:\n"
-    "\t-c\tWrite output on standard output\n";
+    "\t-c\tWrite output to standard output instead of FILE.gz\n";
 
 
 /* gzip.h -- common declarations for all gzip modules
@@ -1731,7 +1732,6 @@
 
 int ascii = 0;        /* convert end-of-lines to local OS conventions */
 int decompress = 0;   /* decompress (-d) */
-int tostdout = 0;     /* uncompress to stdout (-c) */
 int no_name = -1;     /* don't save or restore the original file name */
 int no_time = -1;     /* don't save or restore the original file time */
 int foreground;       /* set if program run in foreground */
@@ -1770,13 +1770,25 @@
 //    char **argv;
 int gzip_main(int argc, char ** argv)
 {
-
+    int result;
     int inFileNum;
     int outFileNum;
+    struct stat statBuf;
+    char* delFileName; 
+    int tostdout = 0;
+    int fromstdin = 0;
+
+    if (argc==1)
+	usage(gzip_usage);
 
     /* Parse any options */
     while (--argc > 0 && **(++argv) == '-') {
+	if (*((*argv)+1) == '\0') {
+	    fromstdin = 1;
+	    tostdout = 1;
+	}
 	while (*(++(*argv))) {
+	    fprintf(stderr, "**argv='%c'\n", **argv);
 	    switch (**argv) {
 	    case 'c':
 		tostdout = 1;
@@ -1817,18 +1829,40 @@
     ALLOC(ush, tab_prefix1, 1L<<(BITS-1));
 #endif
 
+    if (fromstdin==1) {
+	strcpy(ofname, "stdin");
+
+	inFileNum=fileno(stdin);
+	time_stamp = 0; /* time unknown by default */
+	ifile_size = -1L; /* convention for unknown size */
+    } else {
+	/* Open up the input file */
+	if (*argv=='\0')
+	    usage(gzip_usage);
+	strncpy(ifname, *argv, MAX_PATH_LEN);
+
+	/* Open input fille */
+	inFileNum=open( ifname, O_RDONLY);
+	if (inFileNum < 0) {
+	    perror(ifname);
+	    do_exit(WARNING);
+	}
+	/* Get the time stamp on the input file. */
+	result = stat(ifname, &statBuf);
+	if (result < 0) {
+	    perror(ifname);
+	    do_exit(WARNING);
+	}
+	time_stamp = statBuf.st_ctime;
+	ifile_size = statBuf.st_size;
+    }
+
+
     if (tostdout==1) {
 	/* And get to work */
-	SET_BINARY_MODE(fileno(stdout));
-	strcpy(ifname, "stdin");
 	strcpy(ofname, "stdout");
-	inFileNum=fileno(stdin);
 	outFileNum=fileno(stdout);
-
-	/* Get the time stamp on the input file. */
-	time_stamp = 0; /* time unknown by default */
-
-	ifile_size = -1L; /* convention for unknown size */
+	SET_BINARY_MODE(fileno(stdout));
 
 	clear_bufs(); /* clear input and output buffers */
 	part_nb = 0;
@@ -1837,44 +1871,39 @@
 	zip(inFileNum, outFileNum);
 
     } else {
-	int result;
-	struct stat statBuf;
 
 	/* And get to work */
-	if (*argv=='\0')
-	    usage(gzip_usage);
-	strncpy(ifname, *argv, MAX_PATH_LEN);
-	strncpy(ofname, *argv, MAX_PATH_LEN-4);
+	strncpy(ofname, ifname, MAX_PATH_LEN-4);
 	strcat(ofname, ".gz");
 
-	inFileNum=open( ifname, O_RDONLY);
-	if (inFileNum < 0) {
-	    perror(ifname);
-	    do_exit(WARNING);
-	}
-	result = stat(ifname, &statBuf);
-	if (result < 0) {
-	    perror(ifname);
-	    do_exit(WARNING);
-	}
 
-	outFileNum=open( ofname, O_RDONLY);
+	/* Open output fille */
+	outFileNum=open( ofname, O_RDWR|O_CREAT|O_EXCL|O_NOFOLLOW);
 	if (outFileNum < 0) {
 	    perror(ofname);
 	    do_exit(WARNING);
 	}
 	SET_BINARY_MODE(outFileNum);
-
-	/* Get the time stamp on the input file. */
-	time_stamp = statBuf.st_ctime; /* time unknown by default */
-
-	ifile_size = statBuf.st_size; /* convention for unknown size */
+	/* Set permissions on the file */
+	fchmod(outFileNum, statBuf.st_mode);
 
 	clear_bufs(); /* clear input and output buffers */
 	part_nb = 0;
 
 	/* Actually do the compression/decompression. */
-	zip(inFileNum, outFileNum);
+	result=zip(inFileNum, outFileNum);
+	close( outFileNum);
+	close( inFileNum);
+	/* Delete the original file */
+	if (result == OK)
+	    delFileName=ifname;
+	else
+	    delFileName=ofname;
+
+	if (unlink (delFileName) < 0) {
+	    perror (delFileName);
+	    exit( FALSE);
+	}
     }
 
     do_exit(exit_code);
@@ -3198,6 +3227,7 @@
 
     /* Write the header to the gzip file. See algorithm.doc for the format */
 
+
     method = DEFLATED;
     put_byte(GZIP_MAGIC[0]); /* magic header */
     put_byte(GZIP_MAGIC[1]);