#include<stdio.h>

unsigned char B;
int  filstorleik = 0;

FILE *innfilPtr,
     *utfilPtr;

void plussminus(char * string){
 int verdi, forskyv;
 sscanf(string, "%d", &forskyv);
 printf("%d", forskyv);
 if(forskyv > 255 || forskyv < -255) printf(" -Upassende verdi. Idiot");
 else while (fscanf(innfilPtr,"%c",&B) != -1){
  verdi = forskyv + B;
  if(verdi > 255) verdi -= 256;
  if(verdi < 0) verdi += 256;
  B = verdi;
  fprintf(utfilPtr,"%c",B);
  filstorleik++;
 }
printf("\n");
}

void toutf8(){
 while (fscanf(innfilPtr,"%c",&B) != -1){
  if(B >= 160){
   if(B >= 192){
    fprintf(utfilPtr,"%c%c", 195, B-64);
   }
   else{
    fprintf(utfilPtr,"%c%c", 194, B);
   }
  }
  else{
   fprintf(utfilPtr,"%c", B);
  }
  filstorleik++;
 }
}

void toiso88591(){
 short int bool=0;
 while (fscanf(innfilPtr,"%c",&B) != -1){
  if(bool == 64){
   fprintf(utfilPtr,"%c", B+64);
   bool=0;
  }
  else if(B == 195){
   bool=64;
  }
  else if(B != 194){
   fprintf(utfilPtr,"%c", B);
   bool=0;
  }
  filstorleik++;
 }
}

void invert(){
 while (fscanf(innfilPtr,"%c",&B) != -1){
  B = 255 - B;
  fprintf(utfilPtr,"%c",B);
  filstorleik++;
 }
}

void strtolower(){
 while (fscanf(innfilPtr,"%c",&B) != -1){
  if(B>=65 && B<=90) B += 32;
  if(B>=192 && B<=222 && B != 215) B += 32;
  fprintf(utfilPtr,"%c",B);
  filstorleik++;
 }
}

void strtoupper(){
 while (fscanf(innfilPtr,"%c",&B) != -1){
  if(B>=97 && B<=122) B -= 32;
  if(B>=224 && B<=254 && B != 247) B -= 32;
  fprintf(utfilPtr,"%c",B);
  filstorleik++;
 }
}

void fcmp(){
 unsigned char C;
 printf("De to filene er ");
 while (fscanf(innfilPtr,"%c",&B) != -1){
  if(fscanf(utfilPtr,"%c",&C) != -1){
   filstorleik++;
   if (B != C){
    printf("ulike (%c/%c) ved ", B, C);
    break;
   }
  }
 }
 if(B == C) printf("like.\n");
}

void tell(){
 while (fscanf(innfilPtr,"%c",&B) != -1){
  filstorleik++;
 }
}

int main(int argc, char *argv[]){
 if(argc>1){
  innfilPtr = fopen(argv[1],"r");
  if(argc>3){

   utfilPtr = fopen(argv[2],"w");
   if(argv[3][0] == 'i') invert();
   else if(argv[3][0] == 'l') strtolower();
   else if(argv[3][0] == 'u') strtoupper();
   else if(argv[3][0] == '1') toiso88591();
   else if(argv[3][0] == '8') toutf8();
   else if(argv[3][0] == '+' || argv[3][0] == '-') plussminus(argv[3]);


  }
  else if(argc>2){
   utfilPtr = fopen(argv[2],"r");
   fcmp();
  }
  else tell();
  printf("%d B\n", filstorleik);
 }
 return 0;
}

