
#include <stdio.h>
#include <string.h>
#include <stdlib.h>


char *str_replace(char *inchar, char *outchar, char *instring)
{
 char inchars[501]= "" ;
 char outchars[501] = "";
 char sbuffer[501];
 char *pos = instring, *apos;
 if (strlen(inchar) >= 1) {
 if (*(inchar + strlen(inchar) - 1) == '"' && *inchar == '"') {
    strcpy(inchars, (inchar + 1));
    *(inchars + strlen(inchars) - 1) = 0;
 } else if (*(inchar + strlen(inchar) - 1) == 39 && *inchar == 39) {
    strcpy(inchars, (inchar + 1));
    *(inchars + strlen(inchars) - 1) = 0;
 } else {
    strcpy(inchars, inchar);
 }
 if (*(outchar + strlen(outchar) - 1) == '"' && *outchar == '"') {
    strcpy(outchars, (outchar + 1));
    *(outchars + strlen(outchars) - 1) = 0;
 } else if (*(outchar + strlen(outchar) - 1) == 39 && *outchar == 39) {
    strcpy(outchars, (outchar + 1));
    *(outchars + strlen(outchars) - 1) = 0;
 } else {
    strcpy(outchars, outchar);
 }
    
 if (strlen(inchars) >= 1) {
 while ((apos = strstr(pos, inchars)))
 {
   *apos = 0;
   sprintf(sbuffer, "%s%s%s", instring, outchars, (apos + strlen(inchars)));
   strcpy(instring, sbuffer);
   pos = apos;
   pos++;
 }
 }
 }
 return instring;
}

int main(int argc, char *argv[])
{
    FILE *ourfp, *outfp, *vourfp;
    char buffer[1001], *rbuffer, from[501] = "", to[501] = "", outf[501] = "";
    char arg[501] = "",argv1[501] = "",argv2[501] = "",argv3[501] = "",argv4[501] = "",argv5[501] = "";
    if (argc > 1) {
	strcpy(argv1, argv[1]);
if (argc >= 3) strcpy(argv2, argv[2]);
if (argc >= 4) strcpy(argv3, argv[3]);
if (argc >= 5) strcpy(argv4, argv[4]);
if (argc >= 6) strcpy(argv5, argv[5]);
if (strlen(argv1)) {
  ourfp = fopen(argv1, "r");
 if (ourfp) {
  while ((rbuffer = fgets(buffer, 1000, ourfp))) {
   if (strlen(argv2) && strlen(argv3)) {
    if (!strcmp(argv2, "-n") && strlen(argv2) == 2) {
        strcpy(from, argv[3]);
        strcpy(to, argv[4]);
    } else if (!strcmp(argv2, "-w") && strlen(argv2) == 2) {
      strcpy(outf, "y");
      outfp = fopen(argv1, "w");
        strcpy(from, argv[4]);
        strcpy(to, argv[5]);
    } else if (!strcmp(argv2, "-a") && strlen(argv2) == 2) {
      strcpy(outf, "y");
      outfp = fopen(argv1, "a");
        strcpy(from, argv[4]);
        strcpy(to, argv[5]);
    } else if (strlen(from) == 0) {
        strcpy(from, argv[2]);
        strcpy(to, argv[3]);
    }
    if (strlen(outf) > 0) {
      fprintf(outfp, "%s", str_replace(from, to, buffer));
    } else {
      printf(str_replace(from, to, buffer));
    }
   } else {
    printf("%s", buffer);
   }
  }
  if (strlen(outf) > 0) fclose(outfp);
  fclose(ourfp);
 } else {
   strcpy(arg, argv1);
   strcpy(arg, str_replace("?", "", arg));
   strcpy(arg, str_replace("*", "", arg));
   if (strlen(arg) == strlen(argv1)) printf("%s does not exist.", argv1);
 }
    }
}
    return 0;
}   
