file2c.c revision 200420
1219820Sjeff/* 2272407Shselasky * ---------------------------------------------------------------------------- 3219820Sjeff * "THE BEER-WARE LICENSE" (Revision 42): 4219820Sjeff * <phk@FreeBSD.org> wrote this file. As long as you retain this notice you 5219820Sjeff * can do whatever you want with this stuff. If we meet some day, and you think 6219820Sjeff * this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp 7219820Sjeff * ---------------------------------------------------------------------------- 8219820Sjeff */ 9219820Sjeff 10219820Sjeff#include <sys/cdefs.h> 11219820Sjeff__FBSDID("$FreeBSD: head/usr.bin/file2c/file2c.c 200420 2009-12-11 23:35:38Z delphij $"); 12219820Sjeff 13219820Sjeff#include <stdio.h> 14219820Sjeff#include <stdlib.h> 15219820Sjeff#include <unistd.h> 16219820Sjeff 17219820Sjeffstatic void 18219820Sjeffusage(void) 19219820Sjeff{ 20219820Sjeff 21219820Sjeff fprintf(stderr, "usage: %s [-sx] [-n count] [prefix [suffix]]\n", 22219820Sjeff getprogname()); 23219820Sjeff exit(1); 24219820Sjeff} 25219820Sjeff 26219820Sjeffint 27219820Sjeffmain(int argc, char *argv[]) 28219820Sjeff{ 29219820Sjeff int c, count, linepos, maxcount, pretty, radix; 30219820Sjeff 31219820Sjeff maxcount = 0; 32219820Sjeff pretty = 0; 33219820Sjeff radix = 10; 34219820Sjeff while ((c = getopt(argc, argv, "n:sx")) != -1) { 35219820Sjeff switch (c) { 36219820Sjeff case 'n': /* Max. number of bytes per line. */ 37219820Sjeff maxcount = strtol(optarg, NULL, 10); 38219820Sjeff break; 39219820Sjeff case 's': /* Be more style(9) comliant. */ 40219820Sjeff pretty = 1; 41255932Salfred break; 42255932Salfred case 'x': /* Print hexadecimal numbers. */ 43219820Sjeff radix = 16; 44219820Sjeff break; 45219820Sjeff case '?': 46219820Sjeff default: 47219820Sjeff usage(); 48255932Salfred } 49255932Salfred } 50219820Sjeff argc -= optind; 51219820Sjeff argv += optind; 52219820Sjeff 53219820Sjeff if (argc > 0) 54219820Sjeff printf("%s\n", argv[0]); 55219820Sjeff count = linepos = 0; 56272407Shselasky while((c = getchar()) != EOF) { 57255932Salfred if (count) { 58219820Sjeff putchar(','); 59219820Sjeff linepos++; 60219820Sjeff } 61219820Sjeff if ((maxcount == 0 && linepos > 70) || 62219820Sjeff (maxcount > 0 && count >= maxcount)) { 63219820Sjeff putchar('\n'); 64219820Sjeff count = linepos = 0; 65219820Sjeff } 66219820Sjeff if (pretty) { 67219820Sjeff if (count) { 68219820Sjeff putchar(' '); 69219820Sjeff linepos++; 70219820Sjeff } else { 71219820Sjeff putchar('\t'); 72219820Sjeff linepos += 8; 73219820Sjeff } 74219820Sjeff } 75219820Sjeff switch (radix) { 76219820Sjeff case 10: 77219820Sjeff linepos += printf("%d", c); 78219820Sjeff break; 79219820Sjeff case 16: 80219820Sjeff linepos += printf("0x%02x", c); 81219820Sjeff break; 82219820Sjeff default: 83219820Sjeff abort(); 84219820Sjeff } 85219820Sjeff count++; 86219820Sjeff } 87219820Sjeff putchar('\n'); 88219820Sjeff if (argc > 1) 89219820Sjeff printf("%s\n", argv[1]); 90219820Sjeff return (0); 91219820Sjeff} 92219820Sjeff