2025-12-13 00:40:57 +04:00

85 lines
1.4 KiB
C

/*
* repeat a string a bunch of times
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *
deformat(char *s)
{
char *ptr, *new = calloc(strlen(s)+1, 1);
if ( (ptr = new) == NULL ) {
fprintf(stderr, "out of memory!\n");
exit(1);
}
for ( ; *s; s++ ) {
if ( *s == '\\' && s[1] ) {
switch ( *(++s) ) {
case 'n': *ptr++ = '\n'; continue;
case 'r': *ptr++ = '\r'; continue;
case 't': *ptr++ = '\t'; continue;
case 'b': *ptr++ = '\b'; continue;
case '\\': *ptr++ = '\\'; continue;
default : *ptr++ = '\\'; break;
}
}
*ptr++ = *s;
}
*ptr++ = 0;
return new;
}
int
main(argc, argv)
char **argv;
{
int count;
char *string;
char *prefix = NULL;
char *suffix = NULL;
if ( argc < 3 ) {
fprintf(stderr, "usage: rep [prefix] <string> <count> [suffix]\n");
exit(1);
}
switch (argc) {
case 0: case 1: case 2:
fprintf(stderr, "repeat count needs to be >0\n");
exit(1);
case 3:
string = deformat(argv[1]);
count = atoi(argv[2]);
break;
default:
suffix = deformat(argv[4]);
case 4:
prefix = deformat(argv[1]);
string = deformat(argv[2]);
count = atoi(argv[3]);
break;
}
if ( prefix ) {
fputs(prefix, stdout);
free(prefix);
}
while ( count-- > 0 )
fputs(string, stdout);
if ( suffix ) {
fputs(suffix, stdout);
free(suffix);
}
free(string);
exit(0);
}