C
Christopher J. Ruwe
Dear list,
I am a bit confused with a couple of very simple C programs I wrote.
One program takes a string and transforms each character into a
corresponding integer, starting with zero (a -> 0, b -> 1, ...).
The next program transforms a set of integers and applies the Vigenere
cypher (currently hard-coded).
The third transforms a set of integers to upper-case chars (0 -> A, 1
-> B, ...).
I would like to interconnect these little programs, so that
(PWD=/home/user/workspace/try) ./integerize verysecrettext | ./vigenere
| ./characterise, which unfortunately does not work. Creating a named
Pipe with mkfifo does not work either and ends with a broken pipe.
I am currently refreshing my C, which is in a very bad shape, so my
question might be stupid ... can anybody discern from my code what
might be the problem here?
Thanks in advance, cheers, Christopher
integerize.c:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int transform(char c);
int main(int argc, char *argv[])
{
int i; /* C90-style counter variable */
char c; /* single char passed to transform */
for(i = 0; i < strlen(argv[1]); i++)
{
printf("%3i", transform(argv[1]));
}
exit(EXIT_SUCCESS);
}
int transform(char c)
{
int r;
switch(c)
{
case 'a': r = 0;
break;
case 'b': r = 1;
break;
case 'c': r = 2;
break;
case 'd': r = 3;
break;
case 'e': r = 4;
break;
case 'f': r = 5;
break;
case 'g': r = 6;
break;
case 'h': r = 7;
break;
case 'i': r = 8;
break;
case 'j': r = 9;
break;
case 'k': r = 10;
break;
case 'l': r = 11;
break;
case 'm': r = 12;
break;
case 'n': r = 13;
break;
case 'o': r = 14;
break;
case 'p': r = 15;
break;
case 'q': r = 16;
break;
case 'r': r = 17;
break;
case 's': r = 18;
break;
case 't': r = 19;
break;
case 'u': r = 20;
break;
case 'v': r = 21;
break;
case 'w': r = 22;
break;
case 'x': r = 23;
break;
case 'y': r = 24;
break;
case 'z': r = 25;
break;
default: r = 99;
}
return r;
}
vigenere.c:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int i;
int out[argc-1];
int key[] = {10, 4, 24};
for(i = 0; i < argc - 1; i++)
{
out = atoi(argv[i+1]);
}
for(i = 0; i < argc - 1; i++)
{
out = (out + key[i % (sizeof(key)/sizeof(int))]) % 26;
}
for(i = 0; i < argc - 1; i++)
{
printf("%3i", out);
}
exit(EXIT_SUCCESS);
}
characterise.c:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char transform(int i);
int main(int argc, char *argv[])
{
int i; /* C90-style counter variable */
for(i = 1; i < argc; i++)
{
printf("%2c", transform(atoi(argv)));
}
exit(EXIT_SUCCESS);
}
char transform(int i)
{
char r;
switch(i)
{
case 0 : r = 'A';
break;
case 1 : r = 'B';
break;
case 2 : r = 'C';
break;
case 3 : r = 'D';
break;
case 4 : r = 'E';
break;
case 5 : r = 'F';
break;
case 6 : r = 'G';
break;
case 7 : r = 'H';
break;
case 8 : r = 'I';
break;
case 9 : r = 'J';
break;
case 10 : r = 'K';
break;
case 11 : r = 'L';
break;
case 12 : r = 'M';
break;
case 13 : r = 'N';
break;
case 14 : r = 'O';
break;
case 15 : r = 'P';
break;
case 16 : r = 'Q';
break;
case 17 : r = 'R';
break;
case 18 : r = 'S';
break;
case 19 : r = 'T';
break;
case 20 : r = 'U';
break;
case 21 : r = 'V';
break;
case 22 : r = 'W';
break;
case 23 : r = 'X';
break;
case 24 : r = 'Y';
break;
case 25 : r = 'Z';
break;
default: r = '-';
}
return r;
}
I am a bit confused with a couple of very simple C programs I wrote.
One program takes a string and transforms each character into a
corresponding integer, starting with zero (a -> 0, b -> 1, ...).
The next program transforms a set of integers and applies the Vigenere
cypher (currently hard-coded).
The third transforms a set of integers to upper-case chars (0 -> A, 1
-> B, ...).
I would like to interconnect these little programs, so that
(PWD=/home/user/workspace/try) ./integerize verysecrettext | ./vigenere
| ./characterise, which unfortunately does not work. Creating a named
Pipe with mkfifo does not work either and ends with a broken pipe.
I am currently refreshing my C, which is in a very bad shape, so my
question might be stupid ... can anybody discern from my code what
might be the problem here?
Thanks in advance, cheers, Christopher
integerize.c:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int transform(char c);
int main(int argc, char *argv[])
{
int i; /* C90-style counter variable */
char c; /* single char passed to transform */
for(i = 0; i < strlen(argv[1]); i++)
{
printf("%3i", transform(argv[1]));
}
exit(EXIT_SUCCESS);
}
int transform(char c)
{
int r;
switch(c)
{
case 'a': r = 0;
break;
case 'b': r = 1;
break;
case 'c': r = 2;
break;
case 'd': r = 3;
break;
case 'e': r = 4;
break;
case 'f': r = 5;
break;
case 'g': r = 6;
break;
case 'h': r = 7;
break;
case 'i': r = 8;
break;
case 'j': r = 9;
break;
case 'k': r = 10;
break;
case 'l': r = 11;
break;
case 'm': r = 12;
break;
case 'n': r = 13;
break;
case 'o': r = 14;
break;
case 'p': r = 15;
break;
case 'q': r = 16;
break;
case 'r': r = 17;
break;
case 's': r = 18;
break;
case 't': r = 19;
break;
case 'u': r = 20;
break;
case 'v': r = 21;
break;
case 'w': r = 22;
break;
case 'x': r = 23;
break;
case 'y': r = 24;
break;
case 'z': r = 25;
break;
default: r = 99;
}
return r;
}
vigenere.c:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int i;
int out[argc-1];
int key[] = {10, 4, 24};
for(i = 0; i < argc - 1; i++)
{
out = atoi(argv[i+1]);
}
for(i = 0; i < argc - 1; i++)
{
out = (out + key[i % (sizeof(key)/sizeof(int))]) % 26;
}
for(i = 0; i < argc - 1; i++)
{
printf("%3i", out);
}
exit(EXIT_SUCCESS);
}
characterise.c:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char transform(int i);
int main(int argc, char *argv[])
{
int i; /* C90-style counter variable */
for(i = 1; i < argc; i++)
{
printf("%2c", transform(atoi(argv)));
}
exit(EXIT_SUCCESS);
}
char transform(int i)
{
char r;
switch(i)
{
case 0 : r = 'A';
break;
case 1 : r = 'B';
break;
case 2 : r = 'C';
break;
case 3 : r = 'D';
break;
case 4 : r = 'E';
break;
case 5 : r = 'F';
break;
case 6 : r = 'G';
break;
case 7 : r = 'H';
break;
case 8 : r = 'I';
break;
case 9 : r = 'J';
break;
case 10 : r = 'K';
break;
case 11 : r = 'L';
break;
case 12 : r = 'M';
break;
case 13 : r = 'N';
break;
case 14 : r = 'O';
break;
case 15 : r = 'P';
break;
case 16 : r = 'Q';
break;
case 17 : r = 'R';
break;
case 18 : r = 'S';
break;
case 19 : r = 'T';
break;
case 20 : r = 'U';
break;
case 21 : r = 'V';
break;
case 22 : r = 'W';
break;
case 23 : r = 'X';
break;
case 24 : r = 'Y';
break;
case 25 : r = 'Z';
break;
default: r = '-';
}
return r;
}