#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

#define BUFFER		128	/* buffer size */
#define DEF_SPEED	10	/* default speed */
#define DEF_LINEDELAY	0	/* default linedelay */

int main(int argc, char *argv[])
{
	float speed = DEF_SPEED;	/* speed */
	int linedelay = DEF_LINEDELAY;	/* delay between each line */
	
	char line[128];			/* input buffer */	
	float delay;			/* delay computed from speed */

	unsigned int i;			/* counter */
	char *pname;			/* program name */

	pname = argv[0];
		
	for(argv++; argc > 1; argc--, argv++){
		if(argv[0][0] == '-'){
			/* an option */
			switch(argv[0][1]){
				case 's':
					/* speed */
					sscanf(argv[0], "-s%f", &speed);
					break;
				case 'l':
					/* linedelay */
					linedelay = 1;
					break;
				case 'h':
					/* help */
					printf("Usage: %s [options]\n", pname);
					printf("\nOptions\n");
					printf("-s<speed=%d>\t\tSet the speed of the text.\n", DEF_SPEED);
					printf("-l\t\t\tDelay between each line.\n");
					printf("\n-h\t\t\tDisplay this help information and exit.\n");
					exit(0);
					break;
				default:
					printf("%s: Invalid option '%s'.\n", pname, argv[0]);
					exit(1);
					break;
			}
		}
	}

	delay=1000000/speed;

	while(fgets(line, sizeof(line), stdin)){
		for(i = 0; i < strlen(line); i++){
			printf("%c", line[i]);
			fflush(stdout);
			usleep(delay);
		}
		if(linedelay){
			usleep(delay * speed / 5);
		}
	}
	
	return 0;
}
