| 1569 | |
| 1570 | #ifdef WITH_CHD |
| 1571 | static int parsechd (struct cdunit *cdu, struct zfile *zcue, const TCHAR *img, const TCHAR *curdir, const TCHAR *ocurdir) |
| 1572 | { |
| 1573 | if (curdir) |
| 1574 | my_setcurrentdir(ocurdir, NULL); |
| 1575 | |
| 1576 | struct cdrom_file *cdf; |
| 1577 | struct zfile *f = zfile_dup (zcue); |
| 1578 | if (!f) |
| 1579 | return 0; |
| 1580 | chd_file *cf = new chd_file(); |
| 1581 | auto err = cf->open(f->name, false, NULL); |
| 1582 | if (err != std::error_condition()) { |
| 1583 | write_log (_T("CHD '%s' err=%d\n"), zfile_getname (zcue), err); |
| 1584 | zfile_fclose (f); |
| 1585 | return 0; |
| 1586 | } |
| 1587 | if (!(cdf = cdrom_open (cf))) { |
| 1588 | write_log (_T("Couldn't open CHD '%s' as CD\n"), zfile_getname (zcue)); |
| 1589 | cf->close (); |
| 1590 | zfile_fclose (f); |
| 1591 | return 0; |
| 1592 | } |
| 1593 | cdu->chd_f = cf; |
| 1594 | cdu->chd_cdf = cdf; |
| 1595 | |
| 1596 | const cdrom_toc *stoc = cdrom_get_toc (cdf); |
| 1597 | cdu->tracks = stoc->numtrks; |
| 1598 | uae_u32 hunkcnt = cf->hunk_count (); |
| 1599 | uae_u32 hunksize = cf->hunk_bytes (); |
| 1600 | uae_u32 cbytes; |
| 1601 | chd_codec_type compr; |
| 1602 | |
| 1603 | for (int i = 0; i <cdu->tracks; i++) { |
| 1604 | int size; |
| 1605 | const cdrom_track_info *strack = &stoc->tracks[i]; |
| 1606 | struct cdtoc *dtrack = &cdu->toc[i]; |
| 1607 | dtrack->address = strack->logframeofs; |
| 1608 | dtrack->offset = strack->logframeofs; |
| 1609 | dtrack->adr = cdrom_get_adr_control (cdf, i) >> 4; |
| 1610 | dtrack->ctrl = cdrom_get_adr_control (cdf, i) & 15; |
| 1611 | switch (strack->trktype) |
| 1612 | { |
| 1613 | case CD_TRACK_MODE1: |
| 1614 | case CD_TRACK_MODE2_FORM1: |
| 1615 | size = 2048; |
| 1616 | break; |
| 1617 | case CD_TRACK_MODE1_RAW: |
| 1618 | case CD_TRACK_MODE2_RAW: |
| 1619 | case CD_TRACK_AUDIO: |
| 1620 | default: |
| 1621 | size = 2352; |
| 1622 | break; |
| 1623 | case CD_TRACK_MODE2: |
| 1624 | case CD_TRACK_MODE2_FORM_MIX: |
| 1625 | size = 2336; |
| 1626 | break; |
| 1627 | case CD_TRACK_MODE2_FORM2: |
| 1628 | size = 2324; |
no test coverage detected