/* umcop.c letzte Änderung:28.12.1994 */ static char *VERSION="1.1"; /* ;ALPHA> cx umcop ;ALPHA> link umcop ;VAX> ck umcop History: Erstellung: 30.9.1994 (RPf) */ #include #include #include #include #define MAXARG 3 /************************ Vordeklarationen *******************************/ char *machgross(char *); void setzetrenner(char *); void trenn(int,FILE *); void umcop(FILE *,FILE *); void umcop2(FILE *,FILE *); /*************************************************************************/ void usage() { printf("UMCOP Version %s\n",VERSION); printf("Anwendung: UMCOP Name1.txt Name2.txt [Cod] [-Flags]\n"); printf(" Cod muss aus 2 Buchstaben bestehen:\n"); printf(" IS = von IBM- auf Standard-Format wandeln\n"); printf(" MS = von MAC- auf Standard-Format wandeln\n"); printf(" SI SM IM MI = entsprechend wandeln\n"); printf(" Flags:\n"); printf(" A = nur LF als Zeilentrenner verwenden (Cod-Voreinstellung=IS)\n"); printf(" I = immer CR LF als Zeilentrenner verwenden (Cod-Voreinst.=SI)\n"); printf(" C = nur CR als Zeilentrenner verwenden (Cod-Voreinst.=SM)\n"); printf(" X = Datei im Textmodus öffnen\n"); exit(0); } #define ANZUML 6 char s2i[256],i2s[256],m2s[256],s2m[256],i2m[256],m2i[256]; char *wandle; char STDuml[]={0xE4,0xF6,0xFC,0xC4,0xD6,0xDC}, IBMuml[]={0x84,0x94,0x81,0x8E,0x99,0x9A}, MACuml[]={0x8A,0x9A,0x9F,0x80,0x85,0x86}; void init1(char *tab1,char *tab2,char *um1,char *um2) { int i,c1,c2; char *u1,*u2; for(i=0,u1=um1,u2=um2;iMAXARG+1 || name1[0]=='?' || argflag['?']) usage(); if(name1[0]==0) {printf("Quelldatei:"); scanf("%s",name1);} if(name2[0]==0) {printf("Zieldatei:"); scanf("%s",name2);} if(cod[0]==0) {if(argflag['A']) strcpy(cod,"IS"); else if(argflag['I']) strcpy(cod,"SI"); else if(argflag['C']) strcpy(cod,"SM"); else {printf("Wandlung (z.B. IM für IBM-->MAC):"); scanf("%s",cod);} } if(strcmp(machgross(cod),"IS")==0) wandle=i2s; else if(strcmp(cod,"SI")==0) wandle=s2i; else if(strcmp(cod,"MS")==0) wandle=m2s; else if(strcmp(cod,"SM")==0) wandle=s2m; else if(strcmp(cod,"IM")==0) wandle=i2m; else if(strcmp(cod,"MI")==0) wandle=m2i; else usage(); if(argflag['X']) {rstring="r"; wstring="w";} else {rstring="rb"; wstring="wb";} if(!(fp=fopen(name1,rstring))) {printf("'%s' nicht gefunden\n",name1); exit(0);} if(!(fp2=fopen(name2,wstring))) {printf("kann '%s' nicht öffnen\n",name2); fclose(fp); exit(0);} if(argflag['I']) {setzetrenner("\015\012");/* CR LF */ umcop2(fp,fp2);} else if(argflag['A']) {setzetrenner("\012");/* LF */ umcop2(fp,fp2);} else if(argflag['C']) {setzetrenner("\015");/* CR */ umcop2(fp,fp2);} else umcop(fp,fp2); fclose(fp); fclose(fp2); } void umcop(FILE *fp,FILE *fp2) { int c; while((c=getc(fp))!=EOF) putc(wandle[c],fp2); } void umcop2(FILE *fp,FILE *fp2) { int c; while((c=getc(fp))!=EOF) trenn(wandle[c],fp2); trenn(EOF,fp2); } /*************************** kleinkram ***********************************/ #define CR 0x0D #define LF 0x0A static char *trenner; void setzetrenner(char *tre) {trenner=tre;} void puttrenner(FILE *fp) { char* s=trenner; int c; while(c= *s++) putc(c,fp); } void trenn(int c,FILE *fp) { static int c1=0; int x; if(c==CR) {if(c1==LF) {puttrenner(fp); c1=0;} else if(c1==CR) {puttrenner(fp); c1=c;} else c1=c; return; } if(c==LF) {if(c1==LF) {puttrenner(fp); c1=c;} else if(c1==CR) {puttrenner(fp); c1=0;} else c1=c; return; } if(c1!=0) {puttrenner(fp); c1=0;} if(c!=EOF) putc(c,fp); } char *machgross(char *s) { char *t=s; int c; while(c= *t) *t++ = toupper(c); return s; }