Skip to content

Commit

Permalink
Merge pull request #5 from zoltanp/dont-log-by-default
Browse files Browse the repository at this point in the history
Implement basisc for logging.
  • Loading branch information
zoltanp committed Apr 27, 2014
2 parents 2a5ab33 + 5dee52e commit 7ca1d6f
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 20 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ The follwing program option is implemented:
* `-s <crtc_number>` : Instead of inverting all screens, invert only the colors of the screen identified by `<crtc_number>`.
* `--help` and `-h` : Print a short help for the program.
* `--version` : Print a (dummy) version information.
* `-d` : Enables debug log on standard output. Prints diagonstic messages.

Hint: put the executable in the a directory listed in $PATH, and bind the execution of `xrandr-invert-colors.bin` to a shortcut key.

Expand Down
65 changes: 45 additions & 20 deletions xrandr-invert-colors.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,28 +23,40 @@

#define _(x) x

#define LOG_DEBUG(debug_flag, ...) \
if ((debug_flag)) { \
printf(__VA_ARGS__); \
}

int invert_colors(randr_state_t *state);
int parse_arguments(int argc, const char *argv[], randr_state_t *state);
int parse_arguments(int argc, const char *argv[], int is_debug_enabled, randr_state_t *state);
int parse_debug_argument(int argc, const char *argv[], int *is_debug_enabled);

int main(int argc, const char *argv[]){
int is_debug_enabled = 0;
randr_state_t state;

if(randr_init(&state) < 0){
printf("error while init\n");
return 1;
if (parse_debug_argument(argc, argv, &is_debug_enabled) < 0) {
fprintf(stderr, "error while parsing arguments (for debug flag)\n");
return 3;
}
if(randr_start(&state) < 0){
printf("error while start\n");

if (randr_init(&state) < 0){
fprintf(stderr, "error while init\n");
return 1;
}
if (randr_start(&state) < 0){
fprintf(stderr, "error while start randr\n");
return 4;
}

if(parse_arguments(argc, argv, &state) < 0) {
printf("error while parsing arguments\n");
if (parse_arguments(argc, argv, is_debug_enabled, &state) < 0) {
fprintf(stderr, "error while parsing arguments\n");
return 2;
}

if(invert_colors(&state) < 0){
printf("error while inverting\n");
if (invert_colors(&state) < 0){
fprintf(stderr, "error while inverting\n");
// no return!
}

Expand All @@ -59,10 +71,22 @@ int main(int argc, const char *argv[]){
return 0;
}

int parse_debug_argument(int argc, const char *argv[], int *is_debug_enabled) {
/* first argument is the program name, skip it */
int current_arg;
for (current_arg = 1; current_arg < argc; current_arg++) {
if (strcmp(argv[current_arg], "-d") == 0) {
*is_debug_enabled = 1;
LOG_DEBUG(is_debug_enabled, "debug output enabled\n");
}
}
return 0;
}

void display_usage(const char *program_name);
void display_version(const char *program_name);

int parse_arguments(int argc, const char *argv[], randr_state_t *state) {
int parse_arguments(int argc, const char *argv[], int is_debug_enabled, randr_state_t *state) {
/* first argument is the program name, skip it */
int current_arg;
for (current_arg = 1; current_arg < argc; current_arg++) {
Expand All @@ -73,38 +97,39 @@ int parse_arguments(int argc, const char *argv[], randr_state_t *state) {
int screen_nr;
char extra_junk[4];
if(sscanf(argv[current_arg], "%d%c", &screen_nr, extra_junk) != 1) {
printf("Screen number expected after '-s', instead of '%s'. Aborting.\n",
fprintf(stderr, "Screen number expected after '-s', instead of '%s'. Aborting.\n",
argv[current_arg]);
return -1;
}
printf("screen_nr = %d\n", screen_nr);
LOG_DEBUG(is_debug_enabled, "screen_nr = %d\n", screen_nr);
state->crtc_num = screen_nr;
} else {
printf("Screen number expected after '-s' option. Aborting.\n");
fprintf(stderr, "Screen number expected after '-s' option. Aborting.\n");
return -3;
}
} else if (strcmp(argv[current_arg], "-h") == 0) {
display_usage(argv[0]);
exit(EXIT_SUCCESS);
} else if (strcmp(argv[current_arg], "--help") == 0) {
} else if ((strcmp(argv[current_arg], "-h") == 0) || (strcmp(argv[current_arg], "--help") == 0)) {
display_usage(argv[0]);
exit(EXIT_SUCCESS);
} else if (strcmp(argv[current_arg], "--version") == 0) {
display_version(argv[0]);
exit(EXIT_SUCCESS);
} else if (strcmp(argv[current_arg], "-d") == 0) {
// skip silently
} else {
printf("Unknown argument: '%s'. Aborting.\n", argv[current_arg]);
fprintf(stderr, "Unknown argument: '%s'. Aborting.\n", argv[current_arg]);
return -4;
}
}
return 0;
}

void display_usage(const char * program_name) {
printf("Usage: %s [-s screen_number]\n", program_name);
printf("Usage: %s [options] [-s screen_number]\n", program_name);
printf(" %s -h\n", program_name);
printf(" %s --help\n", program_name);
printf(" %s --version\n", program_name);
printf(" Options:\n");
printf(" -d enable debug output\n");
printf("Simple utility that inverts colors on all screens, using XrandR.\n");
printf("When no parameter is given, it inverts colors on all screens; "
"if the screen_number parameter is given, then it inverts colors on "
Expand Down

0 comments on commit 7ca1d6f

Please sign in to comment.