38 lines
748 B
C
38 lines
748 B
C
#include <errno.h> /* errno */
|
|
#include <stdlib.h> /* strtol(3), size_t */
|
|
#if !defined EX_OK || !defined EX_USAGE
|
|
# include <sysexits.h> /* EX_OK, EX_USAGE */
|
|
#endif
|
|
|
|
CHAR caesar(CHAR c, size_t r);
|
|
|
|
static char *program_name = "rot";
|
|
|
|
int main(int argc, char *argv[]){
|
|
CHAR c;
|
|
size_t r;
|
|
|
|
if(argc > 2){
|
|
fprintf(stderr, "Usage: %s (rotation)\n",
|
|
argv[0] == NULL ? program_name : argv[0]
|
|
);
|
|
return EX_USAGE;
|
|
}
|
|
|
|
if(argc == 2){
|
|
r = strtol(argv[1], &argv[1], 10);
|
|
if(*argv[1] != '\0' || errno != 0){
|
|
fprintf(stderr, "%s: Invalid rotation\n", argv[0]);
|
|
return EX_USAGE;
|
|
}
|
|
}else
|
|
r = 13; /* default to rot13 */
|
|
|
|
|
|
while((c = GETC(stdin)) != ENDOFFILE)
|
|
if(PUTC(caesar(c, r), stdout) == ENDOFFILE)
|
|
break;
|
|
|
|
return EX_OK;
|
|
}
|