Previous 15994 Revisions Next

r8348 Tuesday 29th June, 2010 at 14:29:30 UTC by Miodrag Milanović
Moved some image related utilities from mess to image.c
[src/emu]image.c image.h
[src/mess]utils.c utils.h
[src/mess/devices]cassette.c flopdrv.c
[src/mess/formats]cassimg.c flopimg.c
[src/mess/tools/imgtool]imgtool.c
[src/mess/tools/imgtool/windows]assocdlg.c

src/emu/image.c
r8347r8348
498498      cnt++;
499499   }
500500   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
507static 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
519static 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
559int 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
580void 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/emu/image.h
r8347r8348
3131astring *image_info_astring(running_machine *machine, astring *string);
3232
3333device_image_interface *image_from_absolute_index(running_machine *machine, int absolute_index);
34
35/* extension list handling */
36int image_find_extension(const char *extensions, const char *ext);
37void image_specify_extension(char *buffer, size_t buffer_len, const char *extension);
38
3439#endif /* __IMAGE_H__ */
src/mess/utils.c
r8347r8348
154154
155155
156156
157/*-------------------------------------------------
158    is_delim - returns whether c is a comma or \0
159-------------------------------------------------*/
160
161static 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
173static 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
213int 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
234void 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}
src/mess/devices/cassette.c
r8347r8348
428428            info->s[0] = '\0';
429429
430430            for ( i = 0; formats[i]; i++ )
431               specify_extension( info->s, 256, formats[i]->extensions );
431               image_specify_extension( info->s, 256, formats[i]->extensions );
432432         }
433433         break;
434434   }
src/mess/devices/flopdrv.c
r8347r8348
10591059            /* set up a temporary string */
10601060            info->s[0] = '\0';
10611061            for ( i = 0; floppy_options[i].construct; i++ )
1062               specify_extension( info->s, 256, floppy_options[i].extensions );
1062               image_specify_extension( info->s, 256, floppy_options[i].extensions );
10631063         }
10641064         break;
10651065      default:
src/mess/utils.h
r8347r8348
191191int compute_log2(int val);
192192int hexdigit(char c);
193193
194/* extension list handling */
195int find_extension(const char *extensions, const char *ext);
196void specify_extension(char *buffer, size_t buffer_len, const char *extension);
197
198/* validity checks */
199int utils_validitychecks(void);
200
201194#endif /* UTILS_H */
src/mess/tools/imgtool/windows/assocdlg.c
r8347r8348
186186
187187   // merge all file extensions onto one comma-delimited list
188188   for (module = imgtool_find_module(NULL); module; module = module->next)
189      specify_extension(dlginfo->buffer, ARRAY_LENGTH(dlginfo->buffer) - 1, module->extensions);
189      image_specify_extension(dlginfo->buffer, ARRAY_LENGTH(dlginfo->buffer) - 1, module->extensions);
190190
191191   // split the comma delimited list, and convert it to a string array
192192   dlginfo->extension_count = 0;
src/mess/tools/imgtool/imgtool.c
r8347r8348
379379   /* iterate through all modules */
380380   while((module = imgtool_library_iterate(library, module)) != NULL)
381381   {
382      if (!extension || find_extension(module->extensions, extension))
382      if (!extension || image_find_extension(module->extensions, extension))
383383      {
384384         err = evaluate_module(fname, module, &val);
385385         if (err)
src/mess/formats/flopimg.c
r8347r8348
114114   /* vote on the best format */
115115   for (i = 0; (i < max_options) && floppy_options[i].construct; i++)
116116   {
117      if (!extension || !floppy_options[i].extensions || find_extension(floppy_options[i].extensions, extension))
117      if (!extension || !floppy_options[i].extensions || image_find_extension(floppy_options[i].extensions, extension))
118118      {
119119         if (floppy_options[i].identify)
120120         {
src/mess/formats/cassimg.c
r8347r8348
116116
117117static int good_format(const struct CassetteFormat *format, const char *extension, int flags)
118118{
119   if (extension && !find_extension(format->extensions, extension))
119   if (extension && !image_find_extension(format->extensions, extension))
120120      return FALSE;
121121   if (((flags & CASSETTE_FLAG_READONLY) == 0) && !format->save)
122122      return FALSE;

Previous 15994 Revisions Next


© 1998-2018 The MESS Team