t_move_record *lookup_move(struct t_board *board, char *move_string) { t_chess_square from_square = name_to_index(move_string); t_chess_square to_square = name_to_index(move_string + 2); t_chess_piece piece = board->square[from_square]; t_chess_piece captured = PIECETYPE(board->square[to_square]); t_chess_color color = COLOR(piece); t_chess_piece promote_to = 0; if (KING == PIECETYPE(piece)) { // Is it a Chess960 castling move? if ((captured != BLANK) && (COLOR(board->square[to_square]) == color)) { if (to_square > from_square) { return &xmove_list[2 * color]; } else { return &xmove_list[2 * color + 1]; } } else return move_directory[from_square][to_square][piece] + captured; } else if (PAWN == PIECETYPE(piece) && (RANK(to_square) % 7 == 0)) { if (move_string[4] == 'q') promote_to = QUEEN; else if (move_string[4] == 'b') promote_to = BISHOP; else if (move_string[4] == 'r') promote_to = ROOK; else if (move_string[4] == 'n') promote_to = KNIGHT; return move_directory[from_square][to_square][piece] + (4 * captured) + promote_to - 1; } else return move_directory[from_square][to_square][piece] + captured; }
static void join(const char *ifname, const char *mcast, const char* group, const char *addr, const char *port_str) { int ifindex; struct in_addr iface_addr; struct in_addr group_addr; struct in_addr bind_addr; int port; int result; int fd; struct sockaddr_in sock_addr; ifindex = name_to_index(ifname); if (ifindex < 0) { fprintf(stderr, "%s: could not find interface: %s\n", prog_name, ifname); exit(1); } result = inet_pton(AF_INET, mcast, &iface_addr); if (result <= 0) { fprintf(stderr, "%s: bad interface address: %s\n", prog_name, mcast); exit(1); } result = inet_pton(AF_INET, group, &group_addr); if (result <= 0) { fprintf(stderr, "%s: bad group address: %s\n", prog_name, group); exit(1); } result = inet_pton(AF_INET, addr, &bind_addr); if (result <= 0) { fprintf(stderr, "%s: bad bind address: %s\n", prog_name, addr); exit(1); } port = atoi(port_str); fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if (fd < 0) { fprintf(stderr, "%s: could not create socket: socket(): errno=%d: %s\n", prog_name, errno, strerror(errno)); exit(1); } { int enable = 1; /* boolean */ if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (void *) &enable, sizeof enable)) { fprintf(stderr, "%s: could not set SO_REUSEADDR: errno=%d: %s\n", prog_name, errno, strerror(errno)); } } { /* will request IP_PKTINFO info while reading the socket */ int opt = 1; if (setsockopt(fd, SOL_IP, IP_PKTINFO, &opt, sizeof opt)) { fprintf(stderr, "%s: could not set IP_PKTINFO: errno=%d: %s\n", prog_name, errno, strerror(errno)); } } if (setsockopt(fd, IPPROTO_IP, IP_MULTICAST_IF, (void *) &iface_addr, sizeof iface_addr)) { fprintf(stderr, "%s: could not multicast interface: errno=%d: %s\n", prog_name, errno, strerror(errno)); } if (setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, ifname, strlen(ifname))) { fprintf(stderr, "%s: could set SO_BINDTODEVICE: errno=%d: %s\n", prog_name, errno, strerror(errno)); } sock_addr.sin_family = AF_INET; sock_addr.sin_addr = bind_addr; sock_addr.sin_port = htons(port); if (bind(fd, (struct sockaddr *)&sock_addr, sizeof(sock_addr))) { fprintf(stderr, "%s: could not bind socket: errno=%d: %s\n", prog_name, errno, strerror(errno)); exit(1); } if (join_group(fd, ifindex, group_addr)) { fprintf(stderr, "%s: could not join group: errno=%d: %s\n", prog_name, errno, strerror(errno)); exit(1); } printf("%s: joined, reading...\n", prog_name); read_loop(fd); close(fd); }
int font::load(int *not_found, int head_only) { char *path; FILE *fp; if ((fp = open_file(name, &path)) == NULL) { if (not_found) *not_found = 1; else error("can't find font file `%1'", name); return 0; } text_file t(fp, path); t.skip_comments = 1; t.silent = head_only; char *p; for (;;) { if (!t.next()) { t.error("missing charset command"); return 0; } p = strtok(t.buf, WS); if (strcmp(p, "name") == 0) { } else if (strcmp(p, "spacewidth") == 0) { p = strtok(0, WS); int n; if (p == 0 || sscanf(p, "%d", &n) != 1 || n <= 0) { t.error("bad argument for spacewidth command"); return 0; } space_width = n; } else if (strcmp(p, "slant") == 0) { p = strtok(0, WS); double n; if (p == 0 || sscanf(p, "%lf", &n) != 1 || n >= 90.0 || n <= -90.0) { t.error("bad argument for slant command", p); return 0; } slant = n; } else if (strcmp(p, "ligatures") == 0) { for (;;) { p = strtok(0, WS); if (p == 0 || strcmp(p, "0") == 0) break; if (strcmp(p, "ff") == 0) ligatures |= LIG_ff; else if (strcmp(p, "fi") == 0) ligatures |= LIG_fi; else if (strcmp(p, "fl") == 0) ligatures |= LIG_fl; else if (strcmp(p, "ffi") == 0) ligatures |= LIG_ffi; else if (strcmp(p, "ffl") == 0) ligatures |= LIG_ffl; else { t.error("unrecognised ligature `%1'", p); return 0; } } } else if (strcmp(p, "internalname") == 0) { p = strtok(0, WS); if (!p) { t.error("`internalname command requires argument"); return 0; } internalname = new char[strlen(p) + 1]; strcpy(internalname, p); } else if (strcmp(p, "special") == 0) { special = 1; } else if (strcmp(p, "kernpairs") != 0 && strcmp(p, "charset") != 0) { char *command = p; p = strtok(0, "\n"); handle_unknown_font_command(command, trim_arg(p), t.path, t.lineno); } else break; } if (head_only) return 1; char *command = p; int had_charset = 0; t.skip_comments = 0; while (command) { if (strcmp(command, "kernpairs") == 0) { for (;;) { if (!t.next()) { command = 0; break; } char *c1 = strtok(t.buf, WS); if (c1 == 0) continue; char *c2 = strtok(0, WS); if (c2 == 0) { command = c1; break; } p = strtok(0, WS); if (p == 0) { t.error("missing kern amount"); return 0; } int n; if (sscanf(p, "%d", &n) != 1) { t.error("bad kern amount `%1'", p); return 0; } int i1 = name_to_index(c1); if (i1 < 0) { t.error("invalid character `%1'", c1); return 0; } int i2 = name_to_index(c2); if (i2 < 0) { t.error("invalid character `%1'", c2); return 0; } add_kern(i1, i2, n); } } else if (strcmp(command, "charset") == 0) { had_charset = 1; int last_index = -1; for (;;) { if (!t.next()) { command = 0; break; } char *nm = strtok(t.buf, WS); if (nm == 0) continue; // I dont think this should happen p = strtok(0, WS); if (p == 0) { command = nm; break; } if (p[0] == '"') { if (last_index == -1) { t.error("first charset entry is duplicate"); return 0; } if (strcmp(nm, "---") == 0) { t.error("unnamed character cannot be duplicate"); return 0; } int idx = name_to_index(nm); if (idx < 0) { t.error("invalid character `%1'", nm); return 0; } copy_entry(idx, last_index); } else { font_char_metric metric; metric.height = 0; metric.depth = 0; metric.pre_math_space = 0; metric.italic_correction = 0; metric.subscript_correction = 0; int nparms = sscanf(p, "%d,%d,%d,%d,%d,%d", &metric.width, &metric.height, &metric.depth, &metric.italic_correction, &metric.pre_math_space, &metric.subscript_correction); if (nparms < 1) { t.error("bad width for `%1'", nm); return 0; } p = strtok(0, WS); if (p == 0) { t.error("missing character type for `%1'", nm); return 0; } int type; if (sscanf(p, "%d", &type) != 1) { t.error("bad character type for `%1'", nm); return 0; } if (type < 0 || type > 255) { t.error("character type `%1' out of range", type); return 0; } metric.type = type; p = strtok(0, WS); if (p == 0) { t.error("missing code for `%1'", nm); return 0; } char *ptr; metric.code = (int)strtol(p, &ptr, 0); if (metric.code == 0 && ptr == p) { t.error("bad code `%1' for character `%2'", p, nm); return 0; } p = strtok(0, WS); if ((p == NULL) || (strcmp(p, "--") == 0)) { metric.special_device_coding = NULL; } else { char *nam = new char[strlen(p) + 1]; strcpy(nam, p); metric.special_device_coding = nam; } if (strcmp(nm, "---") == 0) { last_index = number_to_index(metric.code); add_entry(last_index, metric); } else { last_index = name_to_index(nm); if (last_index < 0) { t.error("invalid character `%1'", nm); return 0; } add_entry(last_index, metric); copy_entry(number_to_index(metric.code), last_index); } } } if (last_index == -1) { t.error("I didn't seem to find any characters"); return 0; } } else { t.error("unrecognised command `%1' after `kernpairs' or `charset' command", command); return 0; } } if (!had_charset) { t.error("missing charset command"); return 0; } if (space_width == 0) space_width = scale_round(unitwidth, res, 72*3*sizescale); compact(); return 1; }
/** * \brief Initialize extension override tables. * * This should be called one time early during first context initialization. */ void _mesa_one_time_init_extension_overrides(void) { const char *env_const = getenv("MESA_EXTENSION_OVERRIDE"); char *env; char *ext; int len; size_t offset; atexit(free_unknown_extensions_strings); memset(&_mesa_extension_override_enables, 0, sizeof(struct gl_extensions)); memset(&_mesa_extension_override_disables, 0, sizeof(struct gl_extensions)); if (env_const == NULL) { return; } /* extra_exts: List of unrecognized extensions. */ extra_extensions = calloc(ALIGN(strlen(env_const) + 2, 4), sizeof(char)); /* Copy env_const because strtok() is destructive. */ env = strdup(env_const); if (env == NULL || extra_extensions == NULL) { free(env); free(extra_extensions); return; } for (ext = strtok(env, " "); ext != NULL; ext = strtok(NULL, " ")) { int enable; int i; bool recognized; switch (ext[0]) { case '+': enable = 1; ++ext; break; case '-': enable = 0; ++ext; break; default: enable = 1; break; } i = name_to_index(ext); offset = set_extension(&_mesa_extension_override_enables, i, enable); if (offset != 0 && (offset != o(dummy_true) || enable != GL_FALSE)) { ((GLboolean *) &_mesa_extension_override_disables)[offset] = !enable; recognized = true; } else { recognized = false; } if (i >= 0) disabled_extensions[i] = !enable; if (!recognized && enable) { strcat(extra_extensions, ext); strcat(extra_extensions, " "); } } free(env); /* Remove trailing space, and free if unused. */ len = strlen(extra_extensions); if (len == 0) { free(extra_extensions); extra_extensions = NULL; } else if (extra_extensions[len - 1] == ' ') { extra_extensions[len - 1] = '\0'; } }