#include #include int main(int argc, char **argv) { int key[6][6] = { {0, 1, 0, 1, 0, 1}, {0, 0, 0, 0, 1, 0}, {0, 0, 1, 0, 0, 0}, {0, 1, 0, 0, 1, 0}, {0, 0, 0, 0, 0, 1}, {0, 0, 0, 1, 0, 0} }; int perm[36]; int i, j, k; k = 0; FILE *infile; FILE *outfile; char in[36]; char out[36]; for (i=0; i<6; i++) for (j=0; j<6; j++) if (key[i][j] == 1) perm[k++] = 6*i+j; for (j=0; j<6; j++) for (i=5; i>=0; i--) if (key[i][j] == 1) perm[k++] = 6*j+(5-i); for (i=5; i>=0; i--) for (j=5; j>=0; j--) if (key[i][j] == 1) perm[k++] = 6*(5-i)+(5-j); for (j=5; j>=0; j--) for (i=0; i<6; i++) if (key[i][j] == 1) perm[k++] = 6*(5-j)+i; if(argc != 3) { fprintf(stderr, "Usage: %s input_file output_file\n", argv[0]); return 1; } if((infile = fopen(argv[1], "rb")) == NULL) { fprintf(stderr, "Error: cannot open %s\n", argv[1]); return 1; } else if((outfile = fopen(argv[2], "wb")) == NULL) { fprintf(stderr, "Error: cannot open %s\n", argv[2]); return 1; } int n; char array[36000]; char *parray = array; while(!feof(infile)) { n = fread(in, 1, 36, infile); if (n != 36) { printf("error : n=%d\n", n); break; } int i; for (i=0; i<36; i++) out[i] = in[perm[i]]; parray = strncpy(parray, out, 36); parray += 36; } char *p = array; n = 0; while (*p++ == '#') n++; printf("nb de # : %d\n", n); *(p-1) = '\0'; while (*--parray != '\0') fwrite(parray, 1, 1, outfile); fclose(infile); fclose(outfile); return 0; }