--- np2/fdd/sxsicd.c 2005/04/05 09:12:24 1.4 +++ np2/fdd/sxsicd.c 2005/04/05 13:48:09 1.5 @@ -18,7 +18,6 @@ typedef struct { typedef struct { FILEH fh; UINT type; - UINT32 lastpos; CDTRK trk[99]; OEMCHAR path[MAX_PATH]; } _CDINFO, *CDINFO; @@ -199,6 +198,8 @@ static BRESULT openimg(SXSIDEV sxsi, con UINT type; long totals; CDINFO cdinfo; + UINT mediatype; + UINT i; fh = file_open_rb(path); if (fh == FILEH_INVALID) { @@ -220,14 +221,23 @@ static BRESULT openimg(SXSIDEV sxsi, con ZeroMemory(cdinfo, sizeof(_CDINFO)); cdinfo->fh = fh; cdinfo->type = type; - cdinfo->lastpos = totals; if ((trk != NULL) && (trks != 0)) { trks = min(trks, NELEMENTS(cdinfo->trk)); + mediatype = 0; + for (i=0; itrk, trk, trks * sizeof(CDTRK)); } else { cdinfo->trk[0].type = 0x14; // cdinfo->trk[0].pos = 0; + mediatype = SXSIMEDIA_DATA; } file_cpyname(cdinfo->path, path, NELEMENTS(cdinfo->path)); @@ -247,7 +257,7 @@ static BRESULT openimg(SXSIDEV sxsi, con sxsi->sectors = 1; sxsi->surfaces = 1; sxsi->headersize = 0; - sxsi->mediatype = SXSIMEDIA_DATA; + sxsi->mediatype = mediatype; return(SUCCESS); sxsiope_err2: @@ -307,7 +317,9 @@ static BRESULT opencue(SXSIDEV sxsi, con while(textfile_read(tfh, buf, NELEMENTS(buf)) == SUCCESS) { argc = milstr_getarg(buf, argv, NELEMENTS(argv)); if ((argc >= 3) && (!milstr_cmp(argv[0], str_file))) { - file_cpyname(path, argv[1], NELEMENTS(path)); + file_cpyname(path, fname, NELEMENTS(path)); + file_cutname(path); + file_catname(path, argv[1], NELEMENTS(path)); } else if ((argc >= 3) && (!milstr_cmp(argv[0], str_track))) { curtrk = milstr_solveINT(argv[1]) - 1; @@ -329,16 +341,6 @@ static BRESULT opencue(SXSIDEV sxsi, con } } textfile_close(tfh); -#if 0 -{ - UINT i; - for (i=0; ihdl; + ptr = buf + 2; + trks = 0; + for (i=0; itrk); i++) { + type = cdinfo->trk[i].type; + if (type) { + ptr[0] = (UINT8)(type >> 8); + ptr[1] = (UINT8)(type >> 0); + ptr[2] = (UINT8)(i + 1); + ptr[3] = 0; + storepos(ptr + 4, cdinfo->trk[i].pos); + ptr += 8; + trks++; + } + } + buf[0] = 1; + buf[1] = (UINT8)trks; + ptr[0] = 0x00; + ptr[1] = 0x10; + ptr[2] = 0xaa; + ptr[3] = 0; + storepos(ptr + 4, sxsi->totals); + return(trks * 8 + 10); +} +