int main(int argc, char *argv[]) { int length = 0; char line[MAX_LINE_LENGTH]; int distance; if(argc != 2 || !isnumerical(argv[1])) { usage(); exit(EXIT_FAILURE); } else { distance = atoi(argv[1]); } while((length = getline2(line, MAX_LINE_LENGTH)) >= 0) { if(isnumerical(line)) { printf("%u\n", rightrot(atoi(line), distance)); } else { exit(EXIT_FAILURE); } } exit(EXIT_SUCCESS); }
int com_article(FILE *fp, char **args) { if (! selectedp()) { message(fp, 412, "Not in a newsgroup"); } else if (*args == NULL) { message(fp, 413, "Name a message"); } else if (isnumerical(*args)) { if (message_present(atoi(*args))) { output_article(fp, selected_group, atoi(*args)); client.articles++; } else { message(fp, 423, "Bad article number"); } } else { message(fp, 413, "Not implemented"); } return 0; }
/** * This is the mane entry point of the program * * @param argc The number of elements in `argv` * @parma argv Command line arguments, including the command * @return Exit value, zero on success */ int main(int argc, char** argv) { struct winsize win; struct termios saved_stty; struct termios stty; size_t i, ndevices = 0; pid_t pid = 0; char* set = NULL; int j, get = 0, help = 0, all = 0, cols = 80; char** devices = alloca((size_t)argc * sizeof(char*)); if (argc > 1) { char* arg; for (i = 1; i < (size_t)argc; i++) { #define T(S) (!strcmp(arg, S)) arg = *(argv + i); if (T("-h") || T("--help")) help = 1; else if (T("-a") || T("--all")) all = 1; else if (T("-c") || T("--copyright") || T("--copying")) { P("\n"); P("adjbacklight – Convenient method for adjusting the backlight on your portable computer"); P(""); P("Copyright © " _YEARS_ " Mattias Andrée ([email protected])"); P(""); P("This program is free software: you can redistribute it and/or modify"); P("it under the terms of the GNU General Public License as published by"); P("the Free Software Foundation, either version 3 of the License, or"); P("(at your option) any later version."); P(""); P("This program is distributed in the hope that it will be useful,"); P("but WITHOUT ANY WARRANTY; without even the implied warranty of"); P("MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the"); P("GNU General Public License for more details."); P(""); P("You should have received a copy of the GNU General Public License"); P("along with this program. If not, see <http://www.gnu.org/licenses/>."); P("\n"); return 0; } else if (T("-w") || T("--warranty")) { P("\n"); P("This program is distributed in the hope that it will be useful,"); P("but WITHOUT ANY WARRANTY; without even the implied warranty of"); P("MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the"); P("GNU General Public License for more details."); P("\n"); return 0; } else if (T("-s") || T("--set")) { char* tmp; if (i + 1 == (size_t)argc) fprintf(stderr, "%s: argument for option %s is missing, ignoring option\n", *argv, arg); else if (!isnumerical(tmp = *(argv + ++i))) fprintf(stderr, "%s: argument for option %s is malformated, ignoring option\n", *argv, arg); else { set = tmp; get = 0; } } else if (T("-g") || T("--get")) { get = 1; set = NULL; } else if (((*arg == '-') || (*arg == '+') || (*arg == '=')) && isnumerical(arg + 1)) { set = arg; get = 0; } else { if (*arg && (*arg != '-')) *(devices + ndevices++) = arg; else fprintf(stderr, "%s: ignoring unrecognised argument: %s\n", *argv, arg); } #undef T } fflush(stderr); if (help || (((size_t)all + ndevices + (size_t)get == 0) && !set)) { P("\n"); P("adjbacklight - Convenient method for adjusting the backlight on your portable computer"); P(""); P("USAGE: adjbacklight (-c | -w | [-g | -s LEVEL | LEVEL] [-a | DEVICE...])"); P(""); P("Run with options to adjust the backlight on your monitors."); P(""); P(""); P("OPTIONS:"); P(""); P("-c"); P("--copyright"); P("--copying Display copyright information"); P(""); P("-w"); P("--warranty Display warranty disclaimer"); P(""); P("-a"); P("--all Run for all devices, including ACPI devices"); P(""); P("-g"); P("--get Get average brightness on devices"); P(""); P("-s"); P("--set LEVEL[%] Set brightness on devices"); P(""); P("+LEVEL Increase brightness on devices by actual value"); P("-LEVEL Decrease brightness on devices by actual value"); P("=LEVEL Set brightness on devices by actual value"); P(""); P("+LEVEL% Increase brightness on devices by percentage-points"); P("-LEVEL% Decrease brightness on devices by percentage-points"); P("=LEVEL% Set brightness on devices by percentage-points"); P(""); P("+LEVEL%% Increase brightness on devices by percentage"); P("-LEVEL%% Decrease brightness on devices by percentage"); P("=LEVEL%% Set brightness on devices by percentage"); P(""); P(""); P("KEYBOARD:"); P(""); P("←"); P("↓ Darken the screen"); P(""); P("→"); P("↑ Brighten the screen"); P(""); P("q"); P("enter"); P("C-d Continue to next controller, or if at last, quit"); P(""); P(""); P(""); P("Copyright © " _YEARS_ " Mattias Andrée ([email protected])"); P(""); P("This program is free software: you can redistribute it and/or modify"); P("it under the terms of the GNU General Public License as published by"); P("the Free Software Foundation, either version 3 of the License, or"); P("(at your option) any later version."); P(""); return 0; } } /* Check permissions */ if (getuid()) /* Always accept root */ { struct group* video_grp = getgrnam("video"); if (video_grp) /* Accept everypony if the group ‘video’ does not exist */ { struct passwd* realuser = getpwuid(getuid()); char** mems; char* realname; int ok; if (!realuser) { P("You do not exist, go away!"); return 1; } mems = video_grp->gr_mem; realname = realuser->pw_name; ok = 0; for (; *mems; mems++) if (!strcmp(realname, *mems)) { ok = 1; break; } endgrent(); if (!ok) { P("Sorry, you need to be in the group 'video'."); return 1; } } endpwent(); } if (!get && !set) { P("\n"); P("If the program is abnormally aborted the may be some residual"); P("effects on the terminal. the following commands should reset it:"); P(""); P(" stty icanon echo"); P(" echo -en '\\e[?25h'"); P(""); P("\n\n\n"); } if (!get && !set) { /* Get the size of the terminal */ if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &win) == -1) perror(*argv); else cols = win.ws_col; /* Hide cursor */ printf("%s", "\033[?25l"); fflush(stdout); /* stty -icanon -echo */ if (tcgetattr(STDIN_FILENO, &stty)) { perror(*argv); return 1; } saved_stty = stty; stty.c_lflag &= (tcflag_t)~(ICANON | ECHO); if (tcsetattr(STDIN_FILENO, TCSAFLUSH, &stty)) { perror(*argv); return 1; } } /* Fork to diminish risk of unclean exit */ if (!get && !set) { pid = FORK(); if (pid == (pid_t)-1) { perror(*argv); pid = 0; } } if (pid) waitpid(pid, NULL, 0); else { float brightness = 0; int nbrightness = 0; if (!get && !set) { line = malloc((size_t)cols * 3 * sizeof(char)); space = malloc((size_t)cols * sizeof(char)); for (i = 0; i < (size_t)cols; i++) { *(line + i * 3 + 0) = (char)(0xE2); *(line + i * 3 + 1) = (char)(0x94); *(line + i * 3 + 2) = (char)(0x80); *(space + i) = ' '; } *(space + cols - 1) = 0; *(line + (cols - 2) * 3) = 0; } if (ndevices) { char* device; for (i = 0; i < ndevices; i++) { device = *(devices + i); for (j = 0; *(device + j); j++) if (*(device + j) == '/') { device += j + 1; j = -1; } if (get) { float value = getbrightness(device); if (value >= 0.f) { brightness += value; nbrightness++; } } else if (set) setbrightness(device, set); else adjust(cols, device); } } else { struct dirent* ent; DIR* dir = opendir(BACKLIGHT_DIR); if (dir) { char* device; while ((ent = readdir(dir))) { device = ent->d_name; if (all || (strstr(device, "acpi_video") != device)) if (*device && (*device != '.')) { if (get) { float value = getbrightness(device); if (value >= 0.f) { brightness += value; nbrightness++; } } else if (set) setbrightness(device, set); else adjust(cols, device); } } closedir(dir); } } if (!get && !set) { free(line); free(space); } else if (get) { if (nbrightness) { brightness *= 100.f; brightness /= (float)nbrightness; printf("%.2f%%\n", (double)brightness); fflush(stdout); } else { printf("%s\n", "100.00%"); fflush(stdout); } } } if (!get && !set) { /* `stty icanon echo` */ if (tcsetattr(STDIN_FILENO, TCSAFLUSH, &saved_stty)) { perror(*argv); return 1; } /* Show cursor */ printf("%s", "\033[?25h"); fflush(stdout); } return 0; }