/* * Looks better at 4 spaces/tab * */ #define _INCLUDE_POSIX_SOURCE #include #include #include #include /* tolow */ #include /* stat */ #include /* stat */ #include "errors.h" #include "prefs.h" #ifdef THINK_C #define MAX_FNAME_L 256 #else #define MAX_FNAME_L 14 #endif #define SML 256 #define FOPEN fopen #ifdef MYGETOPT char getopt( int argc, char *argv[], char *format ); #endif #define tolow(c) (isupper(c) ? (c)-'A'+'a' : (c)) char* g_ProgName; char g_iname[SML]; char g_oname[SML]; PrefsType Prefs; extern int optind; static int make_oname( char *name, char *suffix , char *osuffix); extern void catrib( FILE *RibFileIn, FILE *RibFileOut); main( int argc, char *argv[] ) { int quitting,i; FILE *i_f, *o_f; g_ProgName=argv[0]; GetPrefs(&Prefs,argc,argv); for(i=0; i %s",g_iname,g_oname); DoError(NO_ERR,DEBUG_ERR,"Opening %d %s",i,g_iname); i_f=(Prefs.fromstdin ? stdin : FOPEN(g_iname,"rb")); if(NULL==i_f) DoError(SYS_ERR,WARN_ERR,"can't open file: %s:",g_iname); else { DoError(NO_ERR,DEBUG_ERR,"Opening %d %s",i,g_oname); o_f = (Prefs.tostdout ? stdout : FOPEN(g_oname,"w")); if(NULL==o_f) DoError(SYS_ERR,WARN_ERR,"can't open file: %s:",g_oname); else { catrib(i_f, o_f); if(EOF==fclose(o_f)) DoError(SYS_ERR,WARN_ERR,"error closing: %s:",g_oname); else DoError(NO_ERR,DEBUG_ERR,"Closed %d %s",i,g_oname); } if(EOF==fclose(i_f)) DoError(SYS_ERR,WARN_ERR,"error closing: %s:",g_iname); else DoError(NO_ERR,DEBUG_ERR,"Closed %d %s",i,g_iname); } } exit(0); } static int make_oname( char *name, char *suffix , char *osuffix) { struct stat o_stat; char *p; if (strlen(name)>MAX_FNAME_L) return(2); p=name+strlen(name); DoError(NO_ERR,DEBUG_ERR,"suffix %d ",MAX_FNAME_L); while((*p!='.')&&(p>name+1)) { p--; *p = tolow(*p); } if(0==strcmp(++p,suffix)) { strcpy(p,osuffix); if ( 0== stat(name,&o_stat)) { if ( !Prefs.force /* requires this order of evaluation */ && !Prefs.tostdout && DoError(NO_ERR, ASK_ERR, "%s exists, if you continue, it will be replaced", name) ) return(2); } return(0); } else return(1); }