comparison tools/lib64fmts.c @ 2521:b19535da15e9

Add new field 'size_t extra' to DMC64ImageFormat for certain image format data for which size field was previously abused for.
author Matti Hamalainen <ccr@tnsp.org>
date Fri, 15 May 2020 03:06:48 +0300
parents 4dbb6572622d
children 27271f2afa7c
comparison
equal deleted inserted replaced
2520:4e7d9fd9b7e4 2521:b19535da15e9
72 static int fmtProbeSupeRes(const DMGrowBuf *buf, const DMC64ImageFormat *fmt) 72 static int fmtProbeSupeRes(const DMGrowBuf *buf, const DMC64ImageFormat *fmt)
73 { 73 {
74 if (buf->len > 12 && 74 if (buf->len > 12 &&
75 DM_MEMCMP_SIZE(buf->data, fmtSupeRes_MagicID_1) == 0) 75 DM_MEMCMP_SIZE(buf->data, fmtSupeRes_MagicID_1) == 0)
76 { 76 {
77 if (buf->data[3] == fmt->size) 77 if (buf->data[3] == fmt->extra)
78 return DM_PROBE_SCORE_MAX; 78 return DM_PROBE_SCORE_MAX;
79 } 79 }
80 80
81 return DM_PROBE_SCORE_FALSE; 81 return DM_PROBE_SCORE_FALSE;
82 } 82 }
235 { 235 {
236 return dmError(DMERR_MALLOC, 236 return dmError(DMERR_MALLOC,
237 "Could not allocate memory for decoding buffer.\n"); 237 "Could not allocate memory for decoding buffer.\n");
238 } 238 }
239 239
240 switch (fmt->size) 240 switch (fmt->extra)
241 { 241 {
242 case 0x23: 242 case 0x23:
243 case 0x25: 243 case 0x25:
244 if ((res = fmtDecodeSupeResSection(&ctx, 0x0000, 0x03e8)) != DMERR_OK || 244 if ((res = fmtDecodeSupeResSection(&ctx, 0x0000, 0x03e8)) != DMERR_OK ||
245 (res = fmtDecodeSupeResSection(&ctx, 0x0400, 0x1f40)) != DMERR_OK) 245 (res = fmtDecodeSupeResSection(&ctx, 0x0400, 0x1f40)) != DMERR_OK)
524 { 524 {
525 if (buf->len > 32 && 525 if (buf->len > 32 &&
526 (dmCompareAddr16(buf, 0, 0x1c00) || dmCompareAddr16(buf, 0, 0x5c00))) 526 (dmCompareAddr16(buf, 0, 0x1c00) || dmCompareAddr16(buf, 0, 0x5c00)))
527 { 527 {
528 // Packed variant 528 // Packed variant
529 if (fmt->size == 0xfe && 529 if (fmt->extra == 0xfe &&
530 buf->len != fmt->size &&
531 buf->len != 10242) // Attempt to avoid misprobes of "Rainbow Painter (unpacked)" 530 buf->len != 10242) // Attempt to avoid misprobes of "Rainbow Painter (unpacked)"
532 return DM_PROBE_SCORE_MAX; 531 return DM_PROBE_SCORE_MAX;
533 532
534 // Unpacked variant 533 // Unpacked variant
535 if (fmt->size != 0xfe && buf->len == fmt->size) 534 if (fmt->extra != 0xfe && buf->len == fmt->size)
536 return DM_PROBE_SCORE_MAX; 535 return DM_PROBE_SCORE_MAX;
537 } 536 }
538 537
539 return DM_PROBE_SCORE_FALSE; 538 return DM_PROBE_SCORE_FALSE;
540 } 539 }
557 DMCompParams cfg; 556 DMCompParams cfg;
558 557
559 cfg.func = fmt->name; 558 cfg.func = fmt->name;
560 cfg.type = DM_COMP_RLE_MARKER; 559 cfg.type = DM_COMP_RLE_MARKER;
561 cfg.flags = DM_RLE_BYTE_RUNS | DM_RLE_ORDER_2; 560 cfg.flags = DM_RLE_BYTE_RUNS | DM_RLE_ORDER_2;
562 cfg.rleMarkerB = fmt->size; 561 cfg.rleMarkerB = fmt->extra;
563 562
564 if ((res = dmDecodeGenericRLEAlloc(&mem, buf, &cfg)) != DMERR_OK) 563 if ((res = dmDecodeGenericRLEAlloc(&mem, buf, &cfg)) != DMERR_OK)
565 goto out; 564 goto out;
566 565
567 res = dmC64DecodeGenericBMP(img, &mem, fmt); 566 res = dmC64DecodeGenericBMP(img, &mem, fmt);
584 583
585 // And now RLE compress the data to the existing buffer 584 // And now RLE compress the data to the existing buffer
586 cfg.func = fmt->name; 585 cfg.func = fmt->name;
587 cfg.type = DM_COMP_RLE_MARKER; 586 cfg.type = DM_COMP_RLE_MARKER;
588 cfg.flags = DM_RLE_BYTE_RUNS | DM_RLE_ORDER_2; 587 cfg.flags = DM_RLE_BYTE_RUNS | DM_RLE_ORDER_2;
589 cfg.rleMarkerB = fmt->size; 588 cfg.rleMarkerB = fmt->extra;
590 cfg.rleMinCountB = 4; 589 cfg.rleMinCountB = 4;
591 cfg.rleMaxCountB = 255; 590 cfg.rleMaxCountB = 255;
592 res = dmEncodeGenericRLE(buf, &tmp, &cfg); 591 res = dmEncodeGenericRLE(buf, &tmp, &cfg);
593 592
594 out: 593 out:
2212 // Array with data for supported formats 2211 // Array with data for supported formats
2213 // 2212 //
2214 DMC64ImageFormat dmC64ImageFormats[] = 2213 DMC64ImageFormat dmC64ImageFormats[] =
2215 { 2214 {
2216 { 2215 {
2217 "d2p", "DrazPaint 1.4/2.0 (packed)", 0x5800, 0, DM_FMT_RDWR, 2216 "d2p", "DrazPaint 1.4/2.0 (packed)", 0x5800, 0, 0, DM_FMT_RDWR,
2218 fmtProbeDrazPaint20Packed, 2217 fmtProbeDrazPaint20Packed,
2219 fmtDecodeDrazPaintPacked, fmtEncodeDrazPaintPacked, 2218 fmtDecodeDrazPaintPacked, fmtEncodeDrazPaintPacked,
2220 { }, &dmC64CommonFormats[4] 2219 { }, &dmC64CommonFormats[4]
2221 }, 2220 },
2222 2221
2223 { 2222 {
2224 "drp", "DrazPaint (unpacked)", 0x5800, 10051, DM_FMT_RDWR, 2223 "drp", "DrazPaint (unpacked)", 0x5800, 10051, 0, DM_FMT_RDWR,
2225 NULL, 2224 NULL,
2226 NULL, NULL, 2225 NULL, NULL,
2227 { }, &dmC64CommonFormats[4] 2226 { }, &dmC64CommonFormats[4]
2228 }, 2227 },
2229 2228
2230 { 2229 {
2231 "dlp", "DrazLace 1.0 (packed)", 0x5800, 0, DM_FMT_RDWR, 2230 "dlp", "DrazLace 1.0 (packed)", 0x5800, 0, 0, DM_FMT_RDWR,
2232 fmtProbeDrazLace10Packed, 2231 fmtProbeDrazLace10Packed,
2233 fmtDecodeDrazPaintPacked, fmtEncodeDrazPaintPacked, 2232 fmtDecodeDrazPaintPacked, fmtEncodeDrazPaintPacked,
2234 { }, &dmC64CommonFormats[5] 2233 { }, &dmC64CommonFormats[5]
2235 }, 2234 },
2236 2235
2237 { 2236 {
2238 "drl", "DrazLace 1.0 (unpacked)", 0x5800, 18242, DM_FMT_RDWR, 2237 "drl", "DrazLace 1.0 (unpacked)", 0x5800, 18242, 0, DM_FMT_RDWR,
2239 NULL, 2238 NULL,
2240 NULL, NULL, 2239 NULL, NULL,
2241 { }, &dmC64CommonFormats[5] 2240 { }, &dmC64CommonFormats[5]
2242 }, 2241 },
2243 2242
2244 { 2243 {
2245 "bdp5", "Boogie Down Paint 5 (packed)", 0x5000, 0, DM_FMT_RDWR, 2244 "bdp5", "Boogie Down Paint 5 (packed)", 0x5000, 0, 0, DM_FMT_RDWR,
2246 fmtProbeBDP5Packed, 2245 fmtProbeBDP5Packed,
2247 fmtDecodeBDP5Packed, fmtEncodeBDP5Packed, 2246 fmtDecodeBDP5Packed, fmtEncodeBDP5Packed,
2248 { }, &dmC64CommonFormats[0] // Memory format is same as Koala 2247 { }, &dmC64CommonFormats[0] // Memory format is same as Koala
2249 }, 2248 },
2250 2249
2251 { 2250 {
2252 "vid", "Vidcom 64 (unpacked)", 0x5800, 10050, DM_FMT_RDWR, 2251 "vid", "Vidcom 64 (unpacked)", 0x5800, 10050, 0, DM_FMT_RDWR,
2253 NULL, 2252 NULL,
2254 NULL, NULL, 2253 NULL, NULL,
2255 { 2254 {
2256 D64_FMT_MC, 2255 D64_FMT_MC,
2257 D64_SCR_WIDTH / 2, D64_SCR_HEIGHT, 2256 D64_SCR_WIDTH / 2, D64_SCR_HEIGHT,
2269 }, 2268 },
2270 NULL 2269 NULL
2271 }, 2270 },
2272 2271
2273 { 2272 {
2274 "p64", "Picasso 64 (unpacked)", 0x1800, 10050, DM_FMT_RDWR, 2273 "p64", "Picasso 64 (unpacked)", 0x1800, 10050, 0, DM_FMT_RDWR,
2275 NULL, 2274 NULL,
2276 NULL, NULL, 2275 NULL, NULL,
2277 { 2276 {
2278 D64_FMT_MC, 2277 D64_FMT_MC,
2279 D64_SCR_WIDTH / 2, D64_SCR_HEIGHT, 2278 D64_SCR_WIDTH / 2, D64_SCR_HEIGHT,
2291 }, 2290 },
2292 NULL 2291 NULL
2293 }, 2292 },
2294 2293
2295 { 2294 {
2296 "mci", "Truepaint (unpacked)", 0x9c00, 19434, DM_FMT_RDWR, 2295 "mci", "Truepaint (unpacked)", 0x9c00, 19434, 0, DM_FMT_RDWR,
2297 NULL, 2296 NULL,
2298 NULL, NULL, 2297 NULL, NULL,
2299 { }, &dmC64CommonFormats[6] 2298 { }, &dmC64CommonFormats[6]
2300 }, 2299 },
2301 2300
2302 { 2301 {
2303 "mcip", "Truepaint (packed)", 0x0801, 0, DM_FMT_RD, 2302 "mcip", "Truepaint (packed)", 0x0801, 0, 0, DM_FMT_RD,
2304 fmtProbeTruePaintPacked, 2303 fmtProbeTruePaintPacked,
2305 fmtDecodeTruePaintPacked, NULL, 2304 fmtDecodeTruePaintPacked, NULL,
2306 { }, &dmC64CommonFormats[6] 2305 { }, &dmC64CommonFormats[6]
2307 }, 2306 },
2308 2307
2309 { 2308 {
2310 "kla", "Koala Painter (unpacked)", 0x6000, 10003, DM_FMT_RDWR, 2309 "kla", "Koala Painter (unpacked)", 0x6000, 10003, 0, DM_FMT_RDWR,
2311 fmtProbeKoalaPainter, 2310 fmtProbeKoalaPainter,
2312 NULL, NULL, 2311 NULL, NULL,
2313 { }, &dmC64CommonFormats[0] 2312 { }, &dmC64CommonFormats[0]
2314 }, 2313 },
2315 2314
2316 { 2315 {
2317 "klp", "Koala Painter (packed)", 0x6000, 0xfe, DM_FMT_RDWR, // size is abused for RLE marker byte 2316 "klp", "Koala Painter (packed)", 0x6000, 0, 0xfe, DM_FMT_RDWR,
2318 fmtProbeKoalaPainterPacked, 2317 fmtProbeKoalaPainterPacked,
2319 fmtDecodeStaticRLEMarkerMode2, fmtEncodeStaticRLEMarkerMode2, 2318 fmtDecodeStaticRLEMarkerMode2, fmtEncodeStaticRLEMarkerMode2,
2320 { }, &dmC64CommonFormats[0] 2319 { }, &dmC64CommonFormats[0]
2321 }, 2320 },
2322 2321
2323 { 2322 {
2324 "aas", "Advanced Art Studio (unpacked)", 0x2000, 10018, DM_FMT_RDWR, 2323 "aas", "Advanced Art Studio (unpacked)", 0x2000, 10018, 0, DM_FMT_RDWR,
2325 NULL, 2324 NULL,
2326 NULL, NULL, 2325 NULL, NULL,
2327 { 2326 {
2328 D64_FMT_MC, 2327 D64_FMT_MC,
2329 D64_SCR_WIDTH / 2, D64_SCR_HEIGHT, 2328 D64_SCR_WIDTH / 2, D64_SCR_HEIGHT,
2342 }, 2341 },
2343 NULL 2342 NULL
2344 }, 2343 },
2345 2344
2346 { 2345 {
2347 "ims", "Image System MC (unpacked)", 0x3c00, 10218, DM_FMT_RDWR, 2346 "ims", "Image System MC (unpacked)", 0x3c00, 10218, 0, DM_FMT_RDWR,
2348 NULL, 2347 NULL,
2349 NULL, NULL, 2348 NULL, NULL,
2350 { 2349 {
2351 D64_FMT_MC, 2350 D64_FMT_MC,
2352 D64_SCR_WIDTH / 2, D64_SCR_HEIGHT, 2351 D64_SCR_WIDTH / 2, D64_SCR_HEIGHT,
2364 }, 2363 },
2365 NULL 2364 NULL
2366 }, 2365 },
2367 2366
2368 { 2367 {
2369 "mil", "Micro Illustrator (unpacked)", 0x18dc, 10022, DM_FMT_RDWR | DM_FMT_BROKEN, 2368 "mil", "Micro Illustrator (unpacked)", 0x18dc, 10022, 0, DM_FMT_RDWR | DM_FMT_BROKEN,
2370 fmtProbeMicroIllustrator, 2369 fmtProbeMicroIllustrator,
2371 NULL, NULL, 2370 NULL, NULL,
2372 { 2371 {
2373 D64_FMT_MC, 2372 D64_FMT_MC,
2374 D64_SCR_WIDTH / 2, D64_SCR_HEIGHT, 2373 D64_SCR_WIDTH / 2, D64_SCR_HEIGHT,
2392 }, 2391 },
2393 NULL 2392 NULL
2394 }, 2393 },
2395 2394
2396 { 2395 {
2397 "cdu", "CDU-Paint (unpacked)", 0x7eef, 10277, DM_FMT_RDWR, 2396 "cdu", "CDU-Paint (unpacked)", 0x7eef, 10277, 0, DM_FMT_RDWR,
2398 NULL, 2397 NULL,
2399 NULL, NULL, 2398 NULL, NULL,
2400 { 2399 {
2401 D64_FMT_MC, 2400 D64_FMT_MC,
2402 D64_SCR_WIDTH / 2, D64_SCR_HEIGHT, 2401 D64_SCR_WIDTH / 2, D64_SCR_HEIGHT,
2414 }, 2413 },
2415 NULL 2414 NULL
2416 }, 2415 },
2417 2416
2418 { 2417 {
2419 "rbp", "Rainbow Painter (unpacked)", 0x5c00, 10242, DM_FMT_RDWR | DM_FMT_BROKEN, 2418 "rbp", "Rainbow Painter (unpacked)", 0x5c00, 10242, 0, DM_FMT_RDWR | DM_FMT_BROKEN,
2420 NULL, 2419 NULL,
2421 NULL, NULL, 2420 NULL, NULL,
2422 { 2421 {
2423 D64_FMT_MC, 2422 D64_FMT_MC,
2424 D64_SCR_WIDTH / 2, D64_SCR_HEIGHT, 2423 D64_SCR_WIDTH / 2, D64_SCR_HEIGHT,
2437 }, 2436 },
2438 NULL 2437 NULL
2439 }, 2438 },
2440 2439
2441 { 2440 {
2442 "sar", "Saracen Paint (unpacked)", 0x7800, 10219, DM_FMT_RDWR, 2441 "sar", "Saracen Paint (unpacked)", 0x7800, 10219, 0, DM_FMT_RDWR,
2443 fmtProbeSaracenPaint, 2442 fmtProbeSaracenPaint,
2444 NULL, NULL, 2443 NULL, NULL,
2445 { 2444 {
2446 D64_FMT_MC, 2445 D64_FMT_MC,
2447 D64_SCR_WIDTH / 2, D64_SCR_HEIGHT, 2446 D64_SCR_WIDTH / 2, D64_SCR_HEIGHT,
2459 }, 2458 },
2460 NULL 2459 NULL
2461 }, 2460 },
2462 2461
2463 { 2462 {
2464 "blp", "Blazing Paddles (unpacked)", 0xA000, 10242, DM_FMT_RDWR, 2463 "blp", "Blazing Paddles (unpacked)", 0xA000, 10242, 0, DM_FMT_RDWR,
2465 NULL, 2464 NULL,
2466 NULL, NULL, 2465 NULL, NULL,
2467 { 2466 {
2468 D64_FMT_MC, 2467 D64_FMT_MC,
2469 D64_SCR_WIDTH / 2, D64_SCR_HEIGHT, 2468 D64_SCR_WIDTH / 2, D64_SCR_HEIGHT,
2483 }, 2482 },
2484 NULL 2483 NULL
2485 }, 2484 },
2486 2485
2487 { 2486 {
2488 "pmg", "Paint Magic crippled MC (unpacked)", 0x3f8e, 9332, DM_FMT_RDWR, 2487 "pmg", "Paint Magic crippled MC (unpacked)", 0x3f8e, 9332, 0, DM_FMT_RDWR,
2489 NULL, 2488 NULL,
2490 NULL, NULL, 2489 NULL, NULL,
2491 { 2490 {
2492 D64_FMT_MC, 2491 D64_FMT_MC,
2493 D64_SCR_WIDTH / 2, D64_SCR_HEIGHT, 2492 D64_SCR_WIDTH / 2, D64_SCR_HEIGHT,
2506 }, 2505 },
2507 NULL 2506 NULL
2508 }, 2507 },
2509 2508
2510 { 2509 {
2511 "a64", "Wigmore Artist 64 (unpacked)", 0x4000, 10242, DM_FMT_RDWR, 2510 "a64", "Wigmore Artist 64 (unpacked)", 0x4000, 10242, 0, DM_FMT_RDWR,
2512 NULL, 2511 NULL,
2513 NULL, NULL, 2512 NULL, NULL,
2514 { 2513 {
2515 D64_FMT_MC, 2514 D64_FMT_MC,
2516 D64_SCR_WIDTH / 2, D64_SCR_HEIGHT, 2515 D64_SCR_WIDTH / 2, D64_SCR_HEIGHT,
2529 }, 2528 },
2530 NULL 2529 NULL
2531 }, 2530 },
2532 2531
2533 { 2532 {
2534 "ami", "Amica Paint (packed)", 0x4000, 0, DM_FMT_RDWR, 2533 "ami", "Amica Paint (packed)", 0x4000, 0, 0, DM_FMT_RDWR,
2535 fmtProbeAmicaPaintPacked, 2534 fmtProbeAmicaPaintPacked,
2536 fmtDecodeAmicaPaintPacked, fmtEncodeAmicaPaintPacked, 2535 fmtDecodeAmicaPaintPacked, fmtEncodeAmicaPaintPacked,
2537 { }, &dmC64CommonFormats[0] 2536 { }, &dmC64CommonFormats[0]
2538 }, 2537 },
2539 2538
2540 { 2539 {
2541 "rpm", "Run Paint (unpacked)", 0x6000, 10006, DM_FMT_RDWR, 2540 "rpm", "Run Paint (unpacked)", 0x6000, 10006, 0, DM_FMT_RDWR,
2542 NULL, 2541 NULL,
2543 NULL, NULL, 2542 NULL, NULL,
2544 { }, &dmC64CommonFormats[0] 2543 { }, &dmC64CommonFormats[0]
2545 }, 2544 },
2546 2545
2547 { 2546 {
2548 "ipc", "Interpaint MC (unpacked)", 0x4000, 10003, DM_FMT_RDWR, 2547 "ipc", "Interpaint MC (unpacked)", 0x4000, 10003, 0, DM_FMT_RDWR,
2549 NULL, 2548 NULL,
2550 NULL, NULL, 2549 NULL, NULL,
2551 { }, &dmC64CommonFormats[0] 2550 { }, &dmC64CommonFormats[0]
2552 }, 2551 },
2553 2552
2554 { 2553 {
2555 "art", "Art Studio (unpacked)", 0x2000, 9009, DM_FMT_RDWR, 2554 "art", "Art Studio (unpacked)", 0x2000, 9009, 0, DM_FMT_RDWR,
2556 fmtProbeArtStudio, 2555 fmtProbeArtStudio,
2557 NULL, NULL, 2556 NULL, NULL,
2558 { }, &dmC64CommonFormats[2] 2557 { }, &dmC64CommonFormats[2]
2559 }, 2558 },
2560 2559
2561 { 2560 {
2562 "iph", "Interpaint (unpacked)", 0x4000, 9002, DM_FMT_RDWR, 2561 "iph", "Interpaint (unpacked)", 0x4000, 9002, 0, DM_FMT_RDWR,
2563 NULL, 2562 NULL,
2564 NULL, NULL, 2563 NULL, NULL,
2565 { }, &dmC64CommonFormats[2] 2564 { }, &dmC64CommonFormats[2]
2566 }, 2565 },
2567 2566
2568 { 2567 {
2569 "dd", "Doodle (unpacked)", 0x1c00, 9218, DM_FMT_RDWR, 2568 "dd", "Doodle (unpacked)", 0x1c00, 9218, 0, DM_FMT_RDWR,
2570 fmtProbeDoodle, 2569 fmtProbeDoodle,
2571 NULL, NULL, 2570 NULL, NULL,
2572 { }, &dmC64CommonFormats[10] 2571 { }, &dmC64CommonFormats[10]
2573 }, 2572 },
2574 2573
2575 { 2574 {
2576 "jj", "Doodle (packed)", 0x5c00, 0xfe, DM_FMT_RDWR, // size is abused for RLE marker byte 2575 "jj", "Doodle (packed)", 0x5c00, 0, 0xfe, DM_FMT_RDWR,
2577 fmtProbeDoodle, 2576 fmtProbeDoodle,
2578 fmtDecodeStaticRLEMarkerMode2, fmtEncodeStaticRLEMarkerMode2, 2577 fmtDecodeStaticRLEMarkerMode2, fmtEncodeStaticRLEMarkerMode2,
2579 { }, &dmC64CommonFormats[10] 2578 { }, &dmC64CommonFormats[10]
2580 }, 2579 },
2581 2580
2582 { 2581 {
2583 "mon", "Monomagic (unpacked)", 0x2000, 8194, DM_FMT_RDWR, 2582 "mon", "Monomagic (unpacked)", 0x2000, 8194, 0, DM_FMT_RDWR,
2584 NULL, 2583 NULL,
2585 NULL, NULL, 2584 NULL, NULL,
2586 { 2585 {
2587 D64_FMT_HIRES, 2586 D64_FMT_HIRES,
2588 D64_SCR_WIDTH , D64_SCR_HEIGHT, 2587 D64_SCR_WIDTH , D64_SCR_HEIGHT,
2599 }, 2598 },
2600 NULL 2599 NULL
2601 }, 2600 },
2602 2601
2603 { 2602 {
2604 "hir", "Plain hires (unpacked)", 0x2000, 8002, DM_FMT_RDWR, 2603 "hir", "Plain hires (unpacked)", 0x2000, 8002, 0, DM_FMT_RDWR,
2605 NULL, 2604 NULL,
2606 NULL, NULL, 2605 NULL, NULL,
2607 { 2606 {
2608 D64_FMT_HIRES, 2607 D64_FMT_HIRES,
2609 D64_SCR_WIDTH , D64_SCR_HEIGHT, 2608 D64_SCR_WIDTH , D64_SCR_HEIGHT,
2619 }, 2618 },
2620 NULL 2619 NULL
2621 }, 2620 },
2622 2621
2623 { 2622 {
2624 "gih", "Gigapaint hires (unpacked)", 0x6000, 8002, DM_FMT_RDWR, 2623 "gih", "Gigapaint hires (unpacked)", 0x6000, 8002, 0, DM_FMT_RDWR,
2625 fmtProbeGigapaintHires, 2624 fmtProbeGigapaintHires,
2626 NULL, NULL, 2625 NULL, NULL,
2627 { 2626 {
2628 D64_FMT_HIRES, 2627 D64_FMT_HIRES,
2629 D64_SCR_WIDTH , D64_SCR_HEIGHT, 2628 D64_SCR_WIDTH , D64_SCR_HEIGHT,
2639 }, 2638 },
2640 NULL 2639 NULL
2641 }, 2640 },
2642 2641
2643 { 2642 {
2644 "bfli", "Pu-239 Big FLI/BFLI (unpacked)", 0x3bff, 33795, DM_FMT_RD, 2643 "bfli", "Pu-239 Big FLI/BFLI (unpacked)", 0x3bff, 33795, 0, DM_FMT_RD,
2645 NULL, 2644 NULL,
2646 NULL, NULL, 2645 NULL, NULL,
2647 { 2646 {
2648 D64_FMT_MC | D64_FMT_FLI, 2647 D64_FMT_MC | D64_FMT_FLI,
2649 D64_SCR_WIDTH / 2, D64_SCR_HEIGHT * 2, 2648 D64_SCR_WIDTH / 2, D64_SCR_HEIGHT * 2,
2663 }, 2662 },
2664 NULL 2663 NULL
2665 }, 2664 },
2666 2665
2667 { 2666 {
2668 "bml", "Black Mail FLI (unpacked)", 0x3b00, 17474, DM_FMT_RDWR, 2667 "bml", "Black Mail FLI (unpacked)", 0x3b00, 17474, 0, DM_FMT_RDWR,
2669 NULL, 2668 NULL,
2670 NULL, NULL, 2669 NULL, NULL,
2671 { }, &dmC64CommonFormats[1] 2670 { }, &dmC64CommonFormats[1]
2672 }, 2671 },
2673 2672
2674 { 2673 {
2675 "bmlp", "Black Mail FLI (packed)", 0x38f0, 0, DM_FMT_RDWR, 2674 "bmlp", "Black Mail FLI (packed)", 0x38f0, 0, 0, DM_FMT_RDWR,
2676 fmtProbeBlackMailFLIPacked, 2675 fmtProbeBlackMailFLIPacked,
2677 fmtDecodeBlackMailFLIPacked, fmtEncodeBlackMailFLIPacked, 2676 fmtDecodeBlackMailFLIPacked, fmtEncodeBlackMailFLIPacked,
2678 { }, &dmC64CommonFormats[1] 2677 { }, &dmC64CommonFormats[1]
2679 }, 2678 },
2680 2679
2681 { 2680 {
2682 "dfed", "Dolphins FLI Editor v3.2 (unpacked)", 0x3b00, 17665, DM_FMT_RDWR, 2681 "dfed", "Dolphins FLI Editor v3.2 (unpacked)", 0x3b00, 17665, 0, DM_FMT_RDWR,
2683 NULL, 2682 NULL,
2684 NULL, NULL, 2683 NULL, NULL,
2685 { }, &dmC64CommonFormats[1] 2684 { }, &dmC64CommonFormats[1]
2686 }, 2685 },
2687 2686
2688 { 2687 {
2689 "fd1", "FBI Crew FLI Designer 1.1 (unpacked)", 0x3c00, 17409, DM_FMT_RDWR, 2688 "fd1", "FBI Crew FLI Designer 1.1 (unpacked)", 0x3c00, 17409, 0, DM_FMT_RDWR,
2690 NULL, 2689 NULL,
2691 NULL, NULL, 2690 NULL, NULL,
2692 { }, &dmC64CommonFormats[9] 2691 { }, &dmC64CommonFormats[9]
2693 }, 2692 },
2694 2693
2695 { 2694 {
2696 "fd2", "FLI Designer 2 (unpacked)", 0x3ff0, 17409, DM_FMT_RDWR, 2695 "fd2", "FLI Designer 2 (unpacked)", 0x3ff0, 17409, 0, DM_FMT_RDWR,
2697 NULL, 2696 NULL,
2698 NULL, NULL, 2697 NULL, NULL,
2699 { }, &dmC64CommonFormats[9] 2698 { }, &dmC64CommonFormats[9]
2700 }, 2699 },
2701 2700
2702 { 2701 {
2703 "flnt", "Flinterlazer 1.0 (unpacked)", 0x284e, 38812, DM_FMT_RD | DM_FMT_BROKEN, 2702 "flnt", "Flinterlazer 1.0 (unpacked)", 0x284e, 38812, 0, DM_FMT_RD | DM_FMT_BROKEN,
2704 NULL, 2703 NULL,
2705 NULL, NULL, 2704 NULL, NULL,
2706 { 2705 {
2707 D64_FMT_MC | D64_FMT_FLI | D64_FMT_ILACE, 2706 D64_FMT_MC | D64_FMT_FLI | D64_FMT_ILACE,
2708 D64_SCR_WIDTH / 2, D64_SCR_HEIGHT, 2707 D64_SCR_WIDTH / 2, D64_SCR_HEIGHT,
2728 }, 2727 },
2729 NULL 2728 NULL
2730 }, 2729 },
2731 2730
2732 { 2731 {
2733 "eci", "ECI Graphic Editor 1.0 (unpacked)", 0x4000, 32770, DM_FMT_RDWR, 2732 "eci", "ECI Graphic Editor 1.0 (unpacked)", 0x4000, 32770, 0, DM_FMT_RDWR,
2734 NULL, 2733 NULL,
2735 NULL, NULL, 2734 NULL, NULL,
2736 { }, &dmC64CommonFormats[7] 2735 { }, &dmC64CommonFormats[7]
2737 }, 2736 },
2738 2737
2739 { 2738 {
2740 "ecip", "ECI Graphic Editor 1.0 (packed)", 0x4000, 0, DM_FMT_RDWR, 2739 "ecip", "ECI Graphic Editor 1.0 (packed)", 0x4000, 0, 0, DM_FMT_RDWR,
2741 fmtProbeECIPacked, 2740 fmtProbeECIPacked,
2742 fmtDecodeECIPacked, fmtEncodeECIPacked, 2741 fmtDecodeECIPacked, fmtEncodeECIPacked,
2743 { }, &dmC64CommonFormats[7] 2742 { }, &dmC64CommonFormats[7]
2744 }, 2743 },
2745 2744
2746 { 2745 {
2747 "fpt", "Face Painter (unpacked)", 0x4000, 10004, DM_FMT_RDWR, 2746 "fpt", "Face Painter (unpacked)", 0x4000, 10004, 0, DM_FMT_RDWR,
2748 NULL, 2747 NULL,
2749 NULL, NULL, 2748 NULL, NULL,
2750 { // Almost same layout as Koala Painter, but FPT has D020 2749 { // Almost same layout as Koala Painter, but FPT has D020
2751 D64_FMT_MC, 2750 D64_FMT_MC,
2752 D64_SCR_WIDTH / 2, D64_SCR_HEIGHT, 2751 D64_SCR_WIDTH / 2, D64_SCR_HEIGHT,
2765 }, 2764 },
2766 NULL 2765 NULL
2767 }, 2766 },
2768 2767
2769 { 2768 {
2770 "xx1", "Unknown $2000 format (unpacked)", 0x2000, 10242, DM_FMT_RDWR, 2769 "xx1", "Unknown $2000 format (unpacked)", 0x2000, 10242, 0, DM_FMT_RDWR,
2771 NULL, 2770 NULL,
2772 NULL, NULL, 2771 NULL, NULL,
2773 { 2772 {
2774 D64_FMT_MC, 2773 D64_FMT_MC,
2775 D64_SCR_WIDTH / 2, D64_SCR_HEIGHT, 2774 D64_SCR_WIDTH / 2, D64_SCR_HEIGHT,
2787 }, 2786 },
2788 NULL 2787 NULL
2789 }, 2788 },
2790 2789
2791 { 2790 {
2792 "xx2", "Unknown $2000 format (unpacked)", 0x2000, 0, DM_FMT_RDWR, 2791 "xx2", "Unknown $2000 format (unpacked)", 0x2000, 0, 0, DM_FMT_RDWR,
2793 fmtProbeFormatXX2, 2792 fmtProbeFormatXX2,
2794 fmtDecodeFormatXX2, NULL, 2793 fmtDecodeFormatXX2, NULL,
2795 { 2794 {
2796 D64_FMT_MC, 2795 D64_FMT_MC,
2797 XX2_WIDTH_CH * 4, XX2_HEIGHT_CH * 8, 2796 XX2_WIDTH_CH * 4, XX2_HEIGHT_CH * 8,
2809 }, 2808 },
2810 NULL 2809 NULL
2811 }, 2810 },
2812 2811
2813 { 2812 {
2814 "fp2", "FunPaint II (unpacked)", 0x3ff0, 33694, DM_FMT_RDWR, 2813 "fp2", "FunPaint II (unpacked)", 0x3ff0, 33694, 0, DM_FMT_RDWR,
2815 fmtProbeFunPaint2, 2814 fmtProbeFunPaint2,
2816 fmtDecodeFunPaint2, fmtEncodeFunPaint2Unpacked, 2815 fmtDecodeFunPaint2, fmtEncodeFunPaint2Unpacked,
2817 { }, &dmC64CommonFormats[3] 2816 { }, &dmC64CommonFormats[3]
2818 }, 2817 },
2819 2818
2820 { 2819 {
2821 "fp2p", "FunPaint II (packed)", 0x3ff0, 0, DM_FMT_RDWR, 2820 "fp2p", "FunPaint II (packed)", 0x3ff0, 0, 0, DM_FMT_RDWR,
2822 fmtProbeFunPaint2, 2821 fmtProbeFunPaint2,
2823 fmtDecodeFunPaint2, fmtEncodeFunPaint2Packed, 2822 fmtDecodeFunPaint2, fmtEncodeFunPaint2Packed,
2824 { }, &dmC64CommonFormats[3] 2823 { }, &dmC64CommonFormats[3]
2825 }, 2824 },
2826 2825
2827 { 2826 {
2828 "gun", "GunPaint 1.1 (unpacked)", 0x4000, 33603, DM_FMT_RDWR, 2827 "gun", "GunPaint 1.1 (unpacked)", 0x4000, 33603, 0, DM_FMT_RDWR,
2829 fmtProbeGunPaint, 2828 fmtProbeGunPaint,
2830 NULL, NULL, 2829 NULL, NULL,
2831 { 2830 {
2832 D64_FMT_MC | D64_FMT_FLI | D64_FMT_ILACE, 2831 D64_FMT_MC | D64_FMT_FLI | D64_FMT_ILACE,
2833 D64_SCR_WIDTH, D64_SCR_HEIGHT, 2832 D64_SCR_WIDTH, D64_SCR_HEIGHT,
2853 }, 2852 },
2854 NULL 2853 NULL
2855 }, 2854 },
2856 2855
2857 { 2856 {
2858 "hcb", "Half Char Bitmap (unpacked)", 0x5000, 12148, DM_FMT_RDWR, 2857 "hcb", "Half Char Bitmap (unpacked)", 0x5000, 12148, 0, DM_FMT_RDWR,
2859 NULL, 2858 NULL,
2860 NULL, NULL, 2859 NULL, NULL,
2861 { 2860 {
2862 D64_FMT_MC | D64_FMT_FLI, 2861 D64_FMT_MC | D64_FMT_FLI,
2863 D64_SCR_WIDTH / 2, D64_SCR_HEIGHT, 2862 D64_SCR_WIDTH / 2, D64_SCR_HEIGHT,
2878 }, 2877 },
2879 NULL 2878 NULL
2880 }, 2879 },
2881 2880
2882 { 2881 {
2883 "pen", "Pentel Paint (unpacked)", 0x4800, 19845, DM_FMT_RD | DM_FMT_BROKEN, 2882 "pen", "Pentel Paint (unpacked)", 0x4800, 19845, 0, DM_FMT_RD | DM_FMT_BROKEN,
2884 NULL, 2883 NULL,
2885 NULL, NULL, 2884 NULL, NULL,
2886 { 2885 {
2887 D64_FMT_HIRES | D64_FMT_FLI | D64_FMT_SPRITES, 2886 D64_FMT_HIRES | D64_FMT_FLI | D64_FMT_SPRITES,
2888 192, D64_SCR_HEIGHT, 2887 192, D64_SCR_HEIGHT,
2903 }, 2902 },
2904 NULL 2903 NULL
2905 }, 2904 },
2906 2905
2907 { 2906 {
2908 "chfd", "Crest Hires FLI Designer (unpacked)", 0x4000, 16386, DM_FMT_RDWR, 2907 "chfd", "Crest Hires FLI Designer (unpacked)", 0x4000, 16386, 0, DM_FMT_RDWR,
2909 NULL, 2908 NULL,
2910 NULL, NULL, 2909 NULL, NULL,
2911 { 2910 {
2912 D64_FMT_HIRES | D64_FMT_FLI, 2911 D64_FMT_HIRES | D64_FMT_FLI,
2913 D64_SCR_WIDTH, D64_SCR_HEIGHT, // Actually 296 x 112 (=14*8) 2912 D64_SCR_WIDTH, D64_SCR_HEIGHT, // Actually 296 x 112 (=14*8)
2924 }, 2923 },
2925 NULL 2924 NULL
2926 }, 2925 },
2927 2926
2928 { 2927 {
2929 "cshf", "Crest Super Hires FLI Editor v1.0 (unpacked)", 0x4000, 15874, DM_FMT_RDWR, 2928 "cshf", "Crest Super Hires FLI Editor v1.0 (unpacked)", 0x4000, 15874, 0, DM_FMT_RDWR,
2930 fmtProbeCrestSHFLI, 2929 fmtProbeCrestSHFLI,
2931 NULL, NULL, 2930 NULL, NULL,
2932 { }, &dmC64CommonFormats[11] 2931 { }, &dmC64CommonFormats[11]
2933 }, 2932 },
2934 2933
2935 { 2934 {
2936 "cshfp", "Crest Super Hires FLI Editor v1.0 (packed)", 0xa000, 0, DM_FMT_RD, 2935 "cshfp", "Crest Super Hires FLI Editor v1.0 (packed)", 0xa000, 0, 0, DM_FMT_RD,
2937 fmtProbeCrestSHFLI, 2936 fmtProbeCrestSHFLI,
2938 fmtDecodeCrestSHFLIPacked, NULL, 2937 fmtDecodeCrestSHFLIPacked, NULL,
2939 { }, &dmC64CommonFormats[11] 2938 { }, &dmC64CommonFormats[11]
2940 }, 2939 },
2941 2940
2942 { 2941 {
2943 "cdhm", "Cosmos Designs Hires Manager (unpacked)", 0x4000, 16385, DM_FMT_RDWR, 2942 "cdhm", "Cosmos Designs Hires Manager (unpacked)", 0x4000, 16385, 0, DM_FMT_RDWR,
2944 fmtProbeCosmosDesignsHiresManager, 2943 fmtProbeCosmosDesignsHiresManager,
2945 NULL, NULL, 2944 NULL, NULL,
2946 { }, &dmC64CommonFormats[8] 2945 { }, &dmC64CommonFormats[8]
2947 }, 2946 },
2948 2947
2949 { 2948 {
2950 "cdhp", "Cosmos Designs Hires Manager (packed)", 0x4000, 0, DM_FMT_RD, 2949 "cdhp", "Cosmos Designs Hires Manager (packed)", 0x4000, 0, 0, DM_FMT_RD,
2951 fmtProbeCosmosDesignsHiresManager, 2950 fmtProbeCosmosDesignsHiresManager,
2952 fmtDecodeCosmosDesignsHiresManagerPacked, NULL, 2951 fmtDecodeCosmosDesignsHiresManagerPacked, NULL,
2953 { }, &dmC64CommonFormats[8] 2952 { }, &dmC64CommonFormats[8]
2954 }, 2953 },
2955 2954
2956 { 2955 {
2957 "mrqp", "Marq's PETSCII editor (new format) (unpacked)", 0x0801, 0, DM_FMT_RDWR, 2956 "mrqp", "Marq's PETSCII editor (new format) (unpacked)", 0x0801, 0, 0, DM_FMT_RDWR,
2958 fmtProbeMarqPETSCII, 2957 fmtProbeMarqPETSCII,
2959 NULL, NULL, 2958 NULL, NULL,
2960 { 2959 {
2961 D64_FMT_HIRES | D64_FMT_CHAR, 2960 D64_FMT_HIRES | D64_FMT_CHAR,
2962 D64_SCR_WIDTH , D64_SCR_HEIGHT, 2961 D64_SCR_WIDTH , D64_SCR_HEIGHT,
2978 }, 2977 },
2979 NULL 2978 NULL
2980 }, 2979 },
2981 2980
2982 { 2981 {
2983 "mqpo", "Marq's PETSCII editor (old format) (unpacked)", 0x0801, 2499, DM_FMT_RD, 2982 "mqpo", "Marq's PETSCII editor (old format) (unpacked)", 0x0801, 2499, 0, DM_FMT_RD,
2984 NULL, 2983 NULL,
2985 NULL, NULL, 2984 NULL, NULL,
2986 { 2985 {
2987 D64_FMT_HIRES | D64_FMT_CHAR, 2986 D64_FMT_HIRES | D64_FMT_CHAR,
2988 D64_SCR_WIDTH , D64_SCR_HEIGHT, 2987 D64_SCR_WIDTH , D64_SCR_HEIGHT,
3003 }, 3002 },
3004 NULL 3003 NULL
3005 }, 3004 },
3006 3005
3007 { 3006 {
3008 "pkhu", "petscii.krissz.hu editor (unpacked)", 0x0801, 0, DM_FMT_RD, 3007 "pkhu", "petscii.krissz.hu editor (unpacked)", 0x0801, 0, 0, DM_FMT_RD,
3009 fmtProbePetsciiKrisszHu, 3008 fmtProbePetsciiKrisszHu,
3010 NULL, NULL, 3009 NULL, NULL,
3011 { 3010 {
3012 D64_FMT_CHAR, 3011 D64_FMT_CHAR,
3013 D64_SCR_WIDTH , D64_SCR_HEIGHT, 3012 D64_SCR_WIDTH , D64_SCR_HEIGHT,
3028 }, 3027 },
3029 NULL 3028 NULL
3030 }, 3029 },
3031 3030
3032 { 3031 {
3033 "poca", "Petscii Coca editor (unpacked)", 0x0801, 0, DM_FMT_RDWR, 3032 "poca", "Petscii Coca editor (unpacked)", 0x0801, 0, 0, DM_FMT_RDWR,
3034 fmtProbeCocaPETSCII, 3033 fmtProbeCocaPETSCII,
3035 NULL, NULL, 3034 NULL, NULL,
3036 { 3035 {
3037 D64_FMT_HIRES | D64_FMT_CHAR, 3036 D64_FMT_HIRES | D64_FMT_CHAR,
3038 D64_SCR_WIDTH , D64_SCR_HEIGHT, 3037 D64_SCR_WIDTH , D64_SCR_HEIGHT,
3054 }, 3053 },
3055 NULL 3054 NULL
3056 }, 3055 },
3057 3056
3058 { 3057 {
3059 "acpe", "Abyss Connection PETSCII-Editor 4.61 (unpacked)", 0x3000, 2026, DM_FMT_RDWR, 3058 "acpe", "Abyss Connection PETSCII-Editor 4.61 (unpacked)", 0x3000, 2026, 0, DM_FMT_RDWR,
3060 NULL, 3059 NULL,
3061 NULL, NULL, 3060 NULL, NULL,
3062 { 3061 {
3063 D64_FMT_HIRES | D64_FMT_CHAR, 3062 D64_FMT_HIRES | D64_FMT_CHAR,
3064 D64_SCR_WIDTH , D64_SCR_HEIGHT, 3063 D64_SCR_WIDTH , D64_SCR_HEIGHT,
3080 }, 3079 },
3081 NULL 3080 NULL
3082 }, 3081 },
3083 3082
3084 { 3083 {
3085 "suphi1", "SupeRes hires [clear] (packed)", -1, 0x23, DM_FMT_RD, 3084 "suphi1", "SupeRes hires [clear] (packed)", -1, 0, 0x23, DM_FMT_RD,
3086 fmtProbeSupeRes, 3085 fmtProbeSupeRes,
3087 fmtDecodeSupeRes, NULL, 3086 fmtDecodeSupeRes, NULL,
3088 { }, &dmC64CommonFormats[10] 3087 { }, &dmC64CommonFormats[10]
3089 }, 3088 },
3090 3089
3091 { 3090 {
3092 "suphi2", "SupeRes hires [no-clear] (packed)", -1, 0x25, DM_FMT_RD, 3091 "suphi2", "SupeRes hires [no-clear] (packed)", -1, 0, 0x25, DM_FMT_RD,
3093 fmtProbeSupeRes, 3092 fmtProbeSupeRes,
3094 fmtDecodeSupeRes, NULL, 3093 fmtDecodeSupeRes, NULL,
3095 { }, &dmC64CommonFormats[10] 3094 { }, &dmC64CommonFormats[10]
3096 }, 3095 },
3097 3096
3098 { 3097 {
3099 "supmc1", "SupeRes multicolor [clear] (packed)", -1, 0x24, DM_FMT_RD, 3098 "supmc1", "SupeRes multicolor [clear] (packed)", -1, 0, 0x24, DM_FMT_RD,
3100 fmtProbeSupeRes, 3099 fmtProbeSupeRes,
3101 fmtDecodeSupeRes, NULL, 3100 fmtDecodeSupeRes, NULL,
3102 { }, &dmC64CommonFormats[0] 3101 { }, &dmC64CommonFormats[0]
3103 }, 3102 },
3104 3103
3105 { 3104 {
3106 "supmc2", "SupeRes multicolor [no-clear] (packed)", -1, 0x26, DM_FMT_RD, 3105 "supmc2", "SupeRes multicolor [no-clear] (packed)", -1, 0, 0x26, DM_FMT_RD,
3107 fmtProbeSupeRes, 3106 fmtProbeSupeRes,
3108 fmtDecodeSupeRes, NULL, 3107 fmtDecodeSupeRes, NULL,
3109 { }, &dmC64CommonFormats[0] 3108 { }, &dmC64CommonFormats[0]
3110 }, 3109 },
3111 }; 3110 };