src/emu/image.c
| r8347 | r8348 | |
| 498 | 498 | cnt++; |
| 499 | 499 | } |
| 500 | 500 | return NULL; |
| 501 | | } |
| | No newline at end of file |
| 501 | } |
| 502 | |
| 503 | /*------------------------------------------------- |
| 504 | is_delim - returns whether c is a comma or \0 |
| 505 | -------------------------------------------------*/ |
| 506 | |
| 507 | static int is_delim(char c) |
| 508 | { |
| 509 | return (c == '\0') || (c == ','); |
| 510 | } |
| 511 | |
| 512 | |
| 513 | |
| 514 | /*------------------------------------------------- |
| 515 | image_internal_find_extension - find an extension in |
| 516 | an extension list |
| 517 | -------------------------------------------------*/ |
| 518 | |
| 519 | static int image_internal_find_extension(const char *extension_list, const char *target_extension) |
| 520 | { |
| 521 | /* this version allows target_extension to be delimited with a comma */ |
| 522 | int pos = 0; |
| 523 | int i; |
| 524 | |
| 525 | while(extension_list[pos] != '\0') |
| 526 | { |
| 527 | /* compare a file extension */ |
| 528 | i = 0; |
| 529 | while(!is_delim(extension_list[pos + i]) |
| 530 | && !is_delim(target_extension[i]) |
| 531 | && (tolower(extension_list[pos + i]) == tolower(target_extension[i]))) |
| 532 | { |
| 533 | i++; |
| 534 | } |
| 535 | |
| 536 | /* check to see if it was found */ |
| 537 | if (is_delim(extension_list[pos + i]) && is_delim(target_extension[i])) |
| 538 | return TRUE; |
| 539 | |
| 540 | /* move to next position in the buffer */ |
| 541 | pos += i; |
| 542 | while(!is_delim(extension_list[pos])) |
| 543 | pos++; |
| 544 | while(extension_list[pos] == ',') |
| 545 | pos++; |
| 546 | } |
| 547 | |
| 548 | /* not found */ |
| 549 | return FALSE; |
| 550 | } |
| 551 | |
| 552 | |
| 553 | |
| 554 | /*------------------------------------------------- |
| 555 | image_find_extension - find an extension in an extension |
| 556 | list |
| 557 | -------------------------------------------------*/ |
| 558 | |
| 559 | int image_find_extension(const char *extension_list, const char *target_extension) |
| 560 | { |
| 561 | /* the internal function allows something that we do not */ |
| 562 | if (strchr(target_extension, ',')) |
| 563 | return FALSE; |
| 564 | |
| 565 | /* special case to allow ext to be in the form '.EXT' */ |
| 566 | if (*target_extension == '.') |
| 567 | target_extension++; |
| 568 | |
| 569 | /* do the actual work */ |
| 570 | return image_internal_find_extension(extension_list, target_extension); |
| 571 | } |
| 572 | |
| 573 | |
| 574 | |
| 575 | /*------------------------------------------------- |
| 576 | image_specify_extension - merge a comma-delimited |
| 577 | list of file extensions onto an existing list |
| 578 | -------------------------------------------------*/ |
| 579 | |
| 580 | void image_specify_extension(char *buffer, size_t buffer_len, const char *extension) |
| 581 | { |
| 582 | int extension_pos = 0; |
| 583 | int len; |
| 584 | int found; |
| 585 | |
| 586 | /* determine the length of the buffer */ |
| 587 | len = strlen(buffer); |
| 588 | |
| 589 | /* be aware that extension can be NULL */ |
| 590 | if (extension != NULL) |
| 591 | { |
| 592 | while(extension[extension_pos] != '\0') |
| 593 | { |
| 594 | /* try to find the file extension */ |
| 595 | found = image_internal_find_extension(buffer, &extension[extension_pos]); |
| 596 | |
| 597 | /* append a delimiter if we have to */ |
| 598 | if (!found && (len > 0)) |
| 599 | len += snprintf(&buffer[len], buffer_len - len, ","); |
| 600 | |
| 601 | /* move to the next extension, appending the extension if not found */ |
| 602 | while(!is_delim(extension[extension_pos])) |
| 603 | { |
| 604 | if (!found) |
| 605 | len += snprintf(&buffer[len], buffer_len - len, "%c", extension[extension_pos]); |
| 606 | extension_pos++; |
| 607 | } |
| 608 | while(extension[extension_pos] == ',') |
| 609 | extension_pos++; |
| 610 | } |
| 611 | } |
| 612 | } |
src/mess/utils.c
| r8347 | r8348 | |
| 154 | 154 | |
| 155 | 155 | |
| 156 | 156 | |
| 157 | | /*------------------------------------------------- |
| 158 | | is_delim - returns whether c is a comma or \0 |
| 159 | | -------------------------------------------------*/ |
| 160 | | |
| 161 | | static int is_delim(char c) |
| 162 | | { |
| 163 | | return (c == '\0') || (c == ','); |
| 164 | | } |
| 165 | | |
| 166 | | |
| 167 | | |
| 168 | | /*------------------------------------------------- |
| 169 | | internal_find_extension - find an extension in |
| 170 | | an extension list |
| 171 | | -------------------------------------------------*/ |
| 172 | | |
| 173 | | static int internal_find_extension(const char *extension_list, const char *target_extension) |
| 174 | | { |
| 175 | | /* this version allows target_extension to be delimited with a comma */ |
| 176 | | int pos = 0; |
| 177 | | int i; |
| 178 | | |
| 179 | | while(extension_list[pos] != '\0') |
| 180 | | { |
| 181 | | /* compare a file extension */ |
| 182 | | i = 0; |
| 183 | | while(!is_delim(extension_list[pos + i]) |
| 184 | | && !is_delim(target_extension[i]) |
| 185 | | && (tolower(extension_list[pos + i]) == tolower(target_extension[i]))) |
| 186 | | { |
| 187 | | i++; |
| 188 | | } |
| 189 | | |
| 190 | | /* check to see if it was found */ |
| 191 | | if (is_delim(extension_list[pos + i]) && is_delim(target_extension[i])) |
| 192 | | return TRUE; |
| 193 | | |
| 194 | | /* move to next position in the buffer */ |
| 195 | | pos += i; |
| 196 | | while(!is_delim(extension_list[pos])) |
| 197 | | pos++; |
| 198 | | while(extension_list[pos] == ',') |
| 199 | | pos++; |
| 200 | | } |
| 201 | | |
| 202 | | /* not found */ |
| 203 | | return FALSE; |
| 204 | | } |
| 205 | | |
| 206 | | |
| 207 | | |
| 208 | | /*------------------------------------------------- |
| 209 | | find_extension - find an extension in an extension |
| 210 | | list |
| 211 | | -------------------------------------------------*/ |
| 212 | | |
| 213 | | int find_extension(const char *extension_list, const char *target_extension) |
| 214 | | { |
| 215 | | /* the internal function allows something that we do not */ |
| 216 | | if (strchr(target_extension, ',')) |
| 217 | | return FALSE; |
| 218 | | |
| 219 | | /* special case to allow ext to be in the form '.EXT' */ |
| 220 | | if (*target_extension == '.') |
| 221 | | target_extension++; |
| 222 | | |
| 223 | | /* do the actual work */ |
| 224 | | return internal_find_extension(extension_list, target_extension); |
| 225 | | } |
| 226 | | |
| 227 | | |
| 228 | | |
| 229 | | /*------------------------------------------------- |
| 230 | | specify_extension - merge a comma-delimited |
| 231 | | list of file extensions onto an existing list |
| 232 | | -------------------------------------------------*/ |
| 233 | | |
| 234 | | void specify_extension(char *buffer, size_t buffer_len, const char *extension) |
| 235 | | { |
| 236 | | int extension_pos = 0; |
| 237 | | int len; |
| 238 | | int found; |
| 239 | | |
| 240 | | /* determine the length of the buffer */ |
| 241 | | len = strlen(buffer); |
| 242 | | |
| 243 | | /* be aware that extension can be NULL */ |
| 244 | | if (extension != NULL) |
| 245 | | { |
| 246 | | while(extension[extension_pos] != '\0') |
| 247 | | { |
| 248 | | /* try to find the file extension */ |
| 249 | | found = internal_find_extension(buffer, &extension[extension_pos]); |
| 250 | | |
| 251 | | /* append a delimiter if we have to */ |
| 252 | | if (!found && (len > 0)) |
| 253 | | len += snprintf(&buffer[len], buffer_len - len, ","); |
| 254 | | |
| 255 | | /* move to the next extension, appending the extension if not found */ |
| 256 | | while(!is_delim(extension[extension_pos])) |
| 257 | | { |
| 258 | | if (!found) |
| 259 | | len += snprintf(&buffer[len], buffer_len - len, "%c", extension[extension_pos]); |
| 260 | | extension_pos++; |
| 261 | | } |
| 262 | | while(extension[extension_pos] == ',') |
| 263 | | extension_pos++; |
| 264 | | } |
| 265 | | } |
| 266 | | } |