aboutsummaryrefslogtreecommitdiffstats
path: root/umlaut.c
diff options
context:
space:
mode:
Diffstat (limited to 'umlaut.c')
-rw-r--r--umlaut.c65
1 files changed, 65 insertions, 0 deletions
diff --git a/umlaut.c b/umlaut.c
new file mode 100644
index 0000000..77bfa84
--- /dev/null
+++ b/umlaut.c
@@ -0,0 +1,65 @@
+#include <stdio.h>
+#include <ctype.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#include "sysdefs.h"
+#include "specchars.h"
+
+#define TMPNAME "tempfile"
+
+ int main(int argc, char **argv)
+{
+ FILE *src,*dest;
+ int ch;
+ int z,z2,res;
+ unsigned char cmdline[1024];
+ long charcnt,metacnt,crcnt;
+
+ if (argc<2)
+ {
+ fprintf(stderr,"usage: %s <file> [more files]\n",argv[0]);
+ exit(1);
+ }
+
+ for (z=1; z<argc; z++)
+ {
+ src=fopen(argv[z],OPENRDMODE);
+ if (src==NULL)
+ {
+ fprintf(stderr,"error opening %s for reading\n",argv[z]); exit(2);
+ }
+ dest=fopen(TMPNAME,OPENWRMODE);
+ if (dest==NULL)
+ {
+ fprintf(stderr,"error opening %s for writing\n",TMPNAME); exit(2);
+ }
+ charcnt=metacnt=crcnt=0;
+ while (!feof(src))
+ {
+ ch=fgetc(src); charcnt++;
+ switch (ch)
+ {
+ case EOF:
+ break;
+ case 13:
+ crcnt++; break;
+ default:
+ for (z2=0; *specchars[z2]!=0000; z2++)
+ if (ch==specchars[z2][0])
+ { fputc(specchars[z2][1],dest); metacnt++; break; }
+ if (*specchars[z2]==0000) fputc(ch,dest);
+ }
+ }
+ fclose(src); fclose(dest);
+ sprintf(cmdline,"mv %s %s",TMPNAME,argv[z]); res=system(cmdline);
+ if (res!=0)
+ {
+ fprintf(stderr,"command \"%s\" failed\n",cmdline); exit(2);
+ }
+ printf("%s: %ld char(s), %ld cr(s) stripped, %ld meta char(s) converted\n",
+ argv[z],charcnt,crcnt,metacnt);
+ }
+
+ exit(0);
+}