#include #include #include #define N 26 #define A 'A' char shift( char x, char *key, int pos, int dir ) { /* if dir != 0, encrypt; otherwise, decrypt */ return( A + (N+x+(dir?(key[pos]):(-key[pos])))%N ); } int main( int argc, char **argv ) { char x, *key; int i,l,dir; if( argc < 3 ) { fprintf( stderr, "usage: vigen KEYWORD [1 (encrypt) | 0 (decrypt)]\n" ); exit(1); } key = argv[1]; l = strlen(key); dir = atoi(argv[2]); i=0; while( (x=getchar()) != EOF ) { if( isupper((int) x) ) { putchar( shift(x, key, i, dir) ); i=(i+1)%l; } else putchar(x); } exit(0); }