#define LF 0x01
#define CR 0x02
-#define SKIP_LINE_ENDINGS(flags) (((flags) & CR) && ((flags) & LF) ? 2 : 1)
+#define SKIP_LINE_ENDINGS(flags) ((flags) == (CR|LF) ? 2 : 1)
#define VALID_FILE_TYPE(mode) (S_ISREG (mode) || S_ISLNK (mode) || S_ISFIFO (mode))
# define COLOR_SEP_CHAR '/'
#endif
-#define DEBUG_FILE "debug.txt"
+#if DEBUG
+# define DEBUG_FILE "debug.txt"
+#endif
-#define MAX_ATTRIBUTE_CHARS (5 * 2)
+#define MAX_ATTRIBUTE_CHARS (6 * 2)
-#define VERSION "0.61"
+#define VERSION "0.63"
typedef enum { false, true } bool;
char unit;
};
-enum fmts {
+enum {
FMT_GENERIC,
FMT_STRING,
FMT_QUOTE,
enum { GENERIC, FOREGROUND = 0, BACKGROUND };
static const struct {
- struct color const *entries;
+ const struct color *entries;
unsigned int count;
const char *desc;
} tables[] = {
strncpy (attr_invalid, s, p - s);
attr_invalid[p - s] = '\0';
vfprintf_fail ("--attr switch attribute '%s' is not valid", attr_invalid);
+ RELEASE_VAR (attr_invalid); /* never reached */
}
}
if (*p)
static void
print_help (void)
{
- struct short_opt {
+ struct opt_data {
const char *name;
const char *short_opt;
+ const char *arg;
};
- const struct short_opt short_opts[] = {
- { "help", "h" },
- { "version", "V" },
+ const struct opt_data opts_data[] = {
+ { "attr", NULL, "=ATTR1,ATTR2,..." },
+ { "exclude-random", NULL, "=COLOR" },
+ { "help", "h", NULL },
+ { "version", "V", NULL },
};
const struct option *opt = long_opts;
unsigned int i;
printf ("\n\tOptions\n");
for (; opt->name; opt++)
{
- const char *short_opt = NULL;
+ const struct opt_data *opt_data = NULL;
unsigned int i;
- for (i = 0; i < sizeof (short_opts) / sizeof (struct short_opt); i++)
- if (streq (opt->name, short_opts[i].name))
+ for (i = 0; i < sizeof (opts_data) / sizeof (struct opt_data); i++)
+ if (streq (opt->name, opts_data[i].name))
{
- short_opt = short_opts[i].short_opt;
+ opt_data = &opts_data[i];
break;
}
- if (short_opt)
- printf ("\t\t-%s, --%s\n", short_opt, opt->name);
+ if (opt_data)
+ {
+ if (opt_data->short_opt)
+ printf ("\t\t-%s, --%s\n", opt_data->short_opt, opt->name);
+ else
+ printf ("\t\t --%s%s\n", opt->name, opt_data->arg);
+ }
else
printf ("\t\t --%s\n", opt->name);
}
color_name.name = color_name.orig = "default";
find_color_entry (&color_name, FOREGROUND, colors);
+ assert (colors[FOREGROUND]->code != NULL);
}
process_file_arg (file_string, file, stream);
{
char *p;
- assert (strlen (str));
- assert (strlen (name));
+ assert (strlen (str) > 0);
+ assert (strlen (name) > 0);
if (!(*str == *name || *str == toupper (*name)))
return false;