1
0
src/rot/rot.c
2023-12-04 20:15:51 -07:00

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;
}