#include #include #include #include #include #include "elib.h" /* * mark_list * * given a list of numbers (separated by commas with ranges specified by -'s), * fill in the given character array with 0's for numbers not specified and * 1's for numbers specified. The size of the character array is also given. * Return 0 on success, non-zero means failure, such as an out-of-range number * in the given list. */ int mark_list(char *num_list, char *mark_list, int max_num) { char *cur_pos, *new_pos; int i, j; for (i=0; i max_num) || (new_pos == NULL)) return 1; if (*(new_pos = skip_whitespace(new_pos)) == '-') { cur_pos = new_pos+1; if (((j = (int) strtol(cur_pos, &new_pos, 10)) < i) || (j > max_num) || (new_pos == NULL)) return 1; for (i--, j--; i <= j; i++) mark_list[i] = '\1'; } else if (*new_pos == ',') mark_list[i-1] = '\1'; else if (*new_pos == '\0') { mark_list[i-1] = '\1'; return 0; } else if (isdigit(*new_pos)) { mark_list[i-1] = '\1'; new_pos--; } } return 0; }