/* Splash daemon */ #include #include #include #include #include #include char unfilled[64] = " "; char filled[64] = "="; char leftborder[64] = "["; char rightborder[64] = "]"; char animation[64] = "\\|/-"; char message[128] = "SplashD"; int width = 78; int delay = 50000; int steps = 10; char sigusr1 = 0; char sigusr2 = 0; char sigterm = 0; const char options[] = "a:d:f:l:m:r:u:"; void usage(int exitcode) { fprintf(stderr, "Usage: splashd [-adflru] [OPTION] STEPS\n"); exit(exitcode); } int parse_args(int argc, char *argv[]) { int c; while ((c = getopt(argc, argv, options)) > 0) { switch(c) { case 'a': { strncpy(animation, optarg, sizeof(animation)); break; } case 'd': { delay = atoi(optarg); break; } case 'f': { strncpy(filled, optarg, sizeof(filled)); break; } case 'l': { strncpy(leftborder, optarg, sizeof(leftborder)); break; } case 'm': { strncpy(message, optarg, sizeof(message)); break; } case 'r': { strncpy(rightborder, optarg, sizeof(rightborder)); break; } case 'u': { strncpy(unfilled, optarg, sizeof(unfilled)); break; } case '?': default: { usage(1); break; } } } if (optind != argc-1) usage(1); return atoi(argv[optind]); } void clear_screen(void) { int i; for (i=0; i<50; i++) { printf("\f"); } printf("\n"); } void center(char *s) { int i; printf("\n"); for (i=0; i < (80-strlen(s)) /2; i++) putchar(' '); printf("%s", s); } void draw_bar(int steps, char *msg) { int i=0; char bar[256]; char *p = bar; int size=sizeof(bar); if (steps >= 78) steps=78; for (i=0; i < 20; i++) printf("\n"); p += snprintf(p, (size =- strlen(leftborder)), "%s", leftborder); for (i=0; i < steps; i++) { p += snprintf(p, (size =-strlen(unfilled)), "%s", unfilled); } p += snprintf(p, (size =- strlen(rightborder)), "%s", rightborder); center(msg); printf("\n"); center(bar); for (i=0; i