]> git.saurik.com Git - wxWidgets.git/blobdiff - distrib/msw/unix2dos.c
Added unix2dos.c utility
[wxWidgets.git] / distrib / msw / unix2dos.c
diff --git a/distrib/msw/unix2dos.c b/distrib/msw/unix2dos.c
new file mode 100644 (file)
index 0000000..991b851
--- /dev/null
@@ -0,0 +1,141 @@
+/*****************************************************************************
+dos2unix, unix2dos: translate unix <-> dos text files by 
+                       -> adding a CR before each LF
+                       <- removing the CR from CRLF pairs 
+
+Use a modern compiler (gcc);  name the executable either unix2dos or dos2unix,
+and link to the other name. A warning will be printed if the input of unix2dos
+contains CR's, as it may have already been a dos file (output still produced).
+The warning is not produced if input is stdin.
+Jim Martino                                    +++++++++++++++++++++++++++++
+jrm@chow.mat.jhu.edu                   +   PLACE COMMERCIAL HERE   +
+jmartino@jhunix.hcf.jhu.edu            +++++++++++++++++++++++++++++
+Modified by Julian Smart, September 2002
+*****************************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define CR '\015'  /* define CR character */
+#define LF '\012'  /* define LF character */
+
+char *prog;      /* global var: program name as called */
+int warning=0;   /* global var: flag for unix2dos if input has CR's */
+
+void usage();
+void translate(FILE *, FILE *, int unix2Dos);
+
+main(int argc, char *argv[])
+{
+    FILE *fp, *outFile;
+    int i;
+    int unix2Dos;
+    
+    prog = argv[0]; /* program name as called */
+    
+    unix2Dos = 1;
+    
+    i = 1;
+    if (i > argc)
+    {
+        if (strcmp(argv[1], "--help") == 0)
+        {
+            usage();
+        }
+        else if (strcmp(argv[1], "--dos2unix") == 0)
+        {
+            unix2Dos = 0;
+        }
+        else if (strcmp(argv[1], "--unix2dos") == 0)
+        {
+            unix2Dos = 1;
+        }
+        else
+        {
+            usage();
+        }
+    }
+    else
+        usage();
+    
+    i ++;
+    if (i == argc)
+        translate(stdin, stdout, unix2Dos);
+    else
+    {
+        while (i < argc)
+        {
+            char tmpFile[512];
+            sprintf(tmpFile, "%s.tmp", argv[i]);
+            
+            fp = fopen(argv[i], "r");
+            outFile = fopen(tmpFile, "w");
+            if (!outFile)
+            {
+                fprintf(stderr, "Cannot open %s.\n", tmpFile);
+                exit(1);
+            }
+            if (!fp)
+            {
+                fprintf(stderr, "Cannot open %s.\n", argv[i]);
+                exit(1);
+            }
+            translate(fp, outFile, unix2Dos);
+            
+            if (warning) /* unix2dos acting on a possible DOS file */
+            {
+                fprintf(stderr,"%s: %s may have already been in DOS format.\n",
+                    prog, argv[i]);
+            }
+            fclose(fp);
+            fclose(outFile);
+#ifdef _WINDOWS
+            remove(argv[i]);
+#else
+            unlink(argv[i]);
+#endif
+            rename(tmpFile, argv[i]);
+            
+            i ++;
+        }
+    }
+}
+
+/* translate: unix2dos-change LF to CRLF
+dos2unix-strip out CR only before LF */
+
+void translate(FILE *ifp, FILE *ofp, int unix2Dos)
+{
+    int c,d;
+    
+    if (!unix2Dos)
+        /* DOS2Unix */
+        while ((c = getc(ifp)) != EOF){
+            if (c == CR)
+                switch(d = getc(ifp)){ /* check to see if LF follows */
+    case LF:
+        putc(d,ofp);         /* if so, ignore CR */
+        break;
+    default:
+        putc(c,ofp);         /* if not, output CR and following char */
+        putc(d,ofp);
+            }   else putc(c, ofp); /* c is not a CR */
+        }
+        
+        else
+            /* Unix2DOS */
+            while ((c = getc(ifp)) != EOF){
+                if (c == CR)
+                    warning = 1;   /* set warning flag: input file may be a DOS file */
+                if (c == LF) 
+                    putc(CR, ofp); /* add CR before each LF */
+                putc(c, ofp);
+            }
+}
+
+void usage()
+{
+    fprintf(stderr, "Usage:\n%s [--dos2unix] [--unix2dos] file1 file2 ...\nor\n%s [--dos2unix] [--unix2dos] < infile > outfile\n", prog, prog);
+    exit(0);
+}