Exemplo n.º 1
0
/******fonction de chiffrement ( pointeur ,poiteur , pointeur, taille de la clef)******/
void chiffrement(char *entree, char *sortie,unsigned int *clef,unsigned int n)
{

    FILE *f_in, *f_out;		//pointeur sur les fichiers d'entree et de sortie
    int c;								//code ASCII du caractère de lecture du fichier source
    int chiffre = 0;			//code ASCII du caractère de lecture du fichier de sortie
    unsigned int i = 0;	 	//incrémente la clef pour passer au caractère suivant
    int booleen = FAUX;		//variable de test sur les accents

    /**ouverture du fichier source**/
    if ((f_in = fopen(entree, "r")) == NULL)
    {
        fprintf(stderr,"Erreur ds l’ouverture du fichier %s\n", entree);
        return;
    }

    /**ouverture du fichier de sortie**/
    if ((f_out = fopen(sortie, "w")) == NULL)
    {
        fprintf(stderr,"Erreur ds l’ouverture du fichier %s\n", sortie);
        return;
    }

    /**boucle sur le caractère du fichier source jusqu'à la fin de fichier**/
    while ((c = fgetc(f_in)) != EOF)
    {

        if( (c<65) || (c>90) )		//si la lettre n'est pas majuscule
        {
            //printf("cinit= %d\n",c);
            if (c == 195)
            {
                booleen = VRAI;
            }
            else
            {
                if (booleen == VRAI)
                {
                    //printf("caccent= %d\n",c);
                    c = accent(c);
                    booleen = FAUX;															 //si la lettre est minuscule, 'c' est compris entre 0 et 25
                    chiffre = (((c-97) + clef[i%n]) % 26) + 65 ; //on lui ajoute la clé puis on ajoute 65 pour que le résultat
                    i++ ;	 																			 //soit compris entre 65 et 90 i.e codes ascii de et Z
                }
                else if (ponctuation(c)==1)
                {
                    chiffre =32;
                }
                else
                {
                    chiffre = (((c-97) + clef[i%n]) % 26) + 65 ;
                    i++ ;
                }

                fprintf(f_out,"%c",chiffre) ;
            }
        }
        else //si la lettre est majuscule
        {
            chiffre = (((c-65) + clef[i%n]) % 26) + 65 ;
            i++ ;
            fprintf(f_out,"%c",chiffre) ;
        }
    }												//fermeture du while

    /**fermeture des fichiers source et sortie**/
    fclose(f_in) ;
    fclose(f_out) ;

    return ;
}
Exemplo n.º 2
0
//extern uchar pass_cut;
void criteria(cell *c)
{
    uchar let = 0, *raster = 0;
    cf::version *vers = 0;
    int16_t r = 0, flacc = 0, flon = 0, inc = 0;
    cf::version save[VERS_IN_CELL] = { 0 };
    int16_t snvers = 0;

    // #define PROB_V_OK 170
    if (c->nvers > 0)
        memcpy(save, c->vers, c->nvers);
    snvers = c->nvers;
    if (!c->nvers)
        return;
    get_b_lines(c, &bl);
    H = (int16_t) get_size();
    if (c->nvers == 1 && c->vers[0].let == '>')
        test_rq(c);
    if (c->nvers == 1 && ((let = c->vers[0].let) == 'c' || let == 'C') || (c->nvers == 2
            && (c->vers[0].let == 'c' && c->vers[1].let == 'C' || c->vers[0].let == 'C'
                    && c->vers[1].let == 'c')))
        test_c(c);
    if (c->nvers >= 2 && (c->vers[0].let == 'a' && c->vers[1].let == 'o' || c->vers[0].let == 'o'
            && c->vers[1].let == 'a'))
        crit_oa(c);
    for (vers = c->vers, flacc = flon = 0; (let = vers->let) != 0; vers++) {
        { //Andrew
            if ((let = vers->let) == liga_CC || let == liga_CR) {
                raster = save_raster(c);
                inc = AnglesCurve(raster, (int16_t) ((c->w + 7) / 8), c->h);
                inc = (4 - inc) * 40;
                if (3 * c ->w > 4 * c ->h)
                    inc += 150;
                if (3 * c ->w < 2 * c ->h)
                    inc += 150;

                if (c->env && c->env->nl < 4)
                    inc += 100;

                if (vers->prob > inc)
                    vers->prob -= inc;
                else
                    vers->prob = 0;
            }
        }

        if (((language == LANGUAGE_FRENCH || language == LANGUAGE_ITALIAN) && memchr(
                "ACEIOUaceiou", let, 12) || // Включая нижние акценты "c" 05.07.2002 E.P.
                language == LANGUAGE_SPANISH && memchr("AEINOUaeniou", let, 12) || language
                == LANGUAGE_GERMAN && memchr("AOUaou", let, 6) || language == LANGUAGE_RUSSIAN
                && memchr("Ґ…", let, 2) || language == LANGUAGE_CROATIAN
                && memchr("SZCszc", let, 6)
        /*&& !pass_cut*/|| language == LANGUAGE_POLISH && memchr("AESZCNOaeszcno", let, 14) || // Включая нижние акценты a,e 05.07.2002 E.P.
                language == LANGUAGE_PORTUGUESE && memchr("AEOUIaeoui", let, 10) || language
                == LANGUAGE_SWEDISH && memchr("AEOaeo", let, 6)) && !flacc ||

        // 05.09.2000 E.P.
                language == LANGUAGE_CZECH && memchr("AaCcDdEeIiNnOoRrSsTtUuYyZz", let, 26)
                || language == LANGUAGE_ROMANIAN && memchr("AaIiSsTt", let, 8) || // Включая нижние акценты s,t 05.07.2002 E.P.
                language == LANGUAGE_HUNGARIAN && memchr("AaEeIiOoUu", let, 10) || language
                == LANGUAGE_SLOVENIAN && memchr("CcSsZz", let, 6) ||

        // 09.07.2001 E.P.
                language == LANGUAGE_LATVIAN && memchr("AaCcEeGgIiKkLlNnSsUuZz", let, 22)
                || language == LANGUAGE_LITHUANIAN && memchr("AaCcEeIiSsUuZz", let, 14) || language
                == LANGUAGE_ESTONIAN && memchr("AaOoSsUuZz", let, 10) ||

        // 21.05.2002 E.P.
                language == LANGUAGE_TURKISH && (memchr("AaCcIiGgOoSsUu", let, 14) || let
                        == i_sans_accent) || 0) {
            flacc = 1;
            if (accent(c))
                break;
        }

        // Урезание чужих букв из общих таблиц
        if (language == LANGUAGE_POLISH && memchr("qQ", let, 2) ||

        // BULGAR 08.09.2000 E.P.
                language == LANGUAGE_RUSSIAN && langBul && (let == 155 || let == 235 || // Ыы 08.09.2000 E.P.
                        let == 157 || let == 237 || // Ээ 08.09.2000 E.P.
                        let == r_EE_2dot || let == r_e_2dot) ||

        language == LANGUAGE_SLOVENIAN && isnot_slovenian(let) ||

        // 09.07.2001 E.P.
                language == LANGUAGE_LATVIAN && isnot_latvian(let) || language
                == LANGUAGE_LITHUANIAN && isnot_lithuanian(let) || language == LANGUAGE_ESTONIAN
                && isnot_estonian(let) ||

        // 21.05.2002 E.P.
                language == LANGUAGE_TURKISH && isnot_turkish(let) || 0) {
            vers->prob >>= 1;
            if (vers->prob & 1)
                vers->prob--;
            if (!vers->prob)
                vers->prob = 2;
        }

        if (c->isBadLetter()) // Oleg : 02-28-96 04:55pm : letter only
            if (((let = vers->let) == 'i' || let == 'j' || (language == LANGUAGE_TURKISH && let
                    == II_dot_accent) // 17.06.2002 E.P.
            ) && (r = ij_dot(c)) != 0) {
                if (r > 0)
                    break;
                vers--;
                continue;
            }

        // Nick 18.06.2002
        if (language == LANGUAGE_TURKISH && ((let = vers->let) == i_sans_accent || let
                == II_dot_accent) && (r = upper_right_angle(c)) > 0) {
            vers->prob = MAX(2, vers->prob - r);
            continue;
        }

        if ((let = vers->let) == '!' || let == '?') {
            if (excl_dot(c) > 0)
                break;
            vers--;
            continue;
        }
        if (language != LANGUAGE_RUSSIAN) // refuse with  ,Ў
            if ((let = vers->let) == invers_exm || let == invers_qm) {
                if (inv_dot(c) > 0)
                    break;
                vers--;
                continue;
            }

        if ((language == LANGUAGE_FRENCH || language == LANGUAGE_TURKISH // 18.06.2002 E.P.
        ) && (vers->let == 'c' || vers->let == 'C'))
            c_to_ctail(c, 0); // AL 940321
        if (vers->let == liga_rt && not_rt(c)) {
            vers--;
            continue;
        }
        if (is_liga_ff(vers->let) && not_ff(c)) {
            vers--;
            continue;
        }

        if (vers->let == 'n' || vers->let == 'o')
            flon = 1;
    }
Exemplo n.º 3
0
/******Main******/
int main(int argc, char *argv[0])
{
    int i,c;
    unsigned int longueur_clef;
    unsigned int *clef;
    int booleen = FAUX;

    if (argc != 3)											//tester le nombre d'arguments, exit si nombre incorrect
    {
        fprintf(stderr, "\nErreur : nombre d’arguments invalide\n");
        fprintf(stderr, "Syntaxe : %s fichier_entree fichier_sortie\n", argv[0]);
        return(EXIT_FAILURE) ;
    }

    printf("\nEntrez la longueur de la clef sans espace (exemple : texte sans espace = 15 )\t");
    scanf("%u", &longueur_clef);

    clef = malloc(longueur_clef * sizeof(unsigned int));

    printf("Entrez un mot clé ou une phrase clé de %d caractères (sans compter les espaces) : ",longueur_clef);
    c = getchar();											//lire une fois le caractère pour lire entrée
    i = 0;


    while(i< longueur_clef)
    {
        c = getchar();

        if (c == 195)
        {
            booleen = VRAI;

        }
        else
        {
            if (booleen == VRAI)
            {
                c = accent(c);
                booleen = FAUX;
                clef[i] = c - 97 ;
                i++ ;
            }
            else
            {
                if((c!=32) &&((c<65) || (c>90)))		//si 'c' n'est pas un espace et n'est pas une lettre majuscule
                {
                    clef[i] = c - 97 ; 							//affecte des résultats entre 0 et 25 sur les lettre minuscules
                    i++;
                }
                else
                {
                    clef[i] = c - 65 ; 							//affecte des résultats entre 0 et 25 sur les lettre majuscules
                    i++;
                }
            }
        }
    }																					//fermeture du while


    chiffrement(argv[1], argv[2], clef, longueur_clef) ;

    return 0;
}
Exemplo n.º 4
0
int main(int argc, char *argv[0])
{
 
  int i,c;
  unsigned int longueur_clef;
  unsigned int *clef ;
	int booleen = FAUX;
   if (argc != 3)
    {
      fprintf(stderr, "\nErreur : nombre d’arguments invalide\n") ;
      fprintf(stderr, "Syntaxe : %s fichier_entree fichier_sortie\n", argv[0]) ;
      return(EXIT_FAILURE) ;
    }
   
  printf("\nEntrez la longueur de la clef sans espace (exemple : texte sans espace = 15 )\t") ;
  scanf("%u", &longueur_clef) ;
  clef = malloc(longueur_clef * sizeof(unsigned int)) ;
  
  
  printf("Entrez un mot clé ou une phrase clé de %d caractères (sans compter les espaces) : ",longueur_clef) ;
  
  c = getchar() ;
  i=0;


  while(i< longueur_clef)
	{
      c = getchar() ;

      if (c == 195)
				booleen = VRAI;

			else
			 if (booleen == VRAI)
				{
					c = accent(c);
					booleen = FAUX;
					clef[i] = c - 97 ;
					i++ ;
				} 
				else
				{
					if((c!=32) &&((c<65) || (c>90)))
					{ 
						clef[i] = c - 97 ;
						i++;
				 	}
					else
					{
					clef[i] = c - 65 ; 
					i++;
					}
				}
	
	}

	
 	dechiffrement(argv[1], argv[2], clef, longueur_clef);

	return 0;
}