|
|
| version 1.4, 2005/04/05 09:12:24 | version 1.5, 2005/04/05 13:48:09 |
|---|---|
| Line 18 typedef struct { | Line 18 typedef struct { |
| typedef struct { | typedef struct { |
| FILEH fh; | FILEH fh; |
| UINT type; | UINT type; |
| UINT32 lastpos; | |
| CDTRK trk[99]; | CDTRK trk[99]; |
| OEMCHAR path[MAX_PATH]; | OEMCHAR path[MAX_PATH]; |
| } _CDINFO, *CDINFO; | } _CDINFO, *CDINFO; |
| Line 199 static BRESULT openimg(SXSIDEV sxsi, con | Line 198 static BRESULT openimg(SXSIDEV sxsi, con |
| UINT type; | UINT type; |
| long totals; | long totals; |
| CDINFO cdinfo; | CDINFO cdinfo; |
| UINT mediatype; | |
| UINT i; | |
| fh = file_open_rb(path); | fh = file_open_rb(path); |
| if (fh == FILEH_INVALID) { | if (fh == FILEH_INVALID) { |
| Line 220 static BRESULT openimg(SXSIDEV sxsi, con | Line 221 static BRESULT openimg(SXSIDEV sxsi, con |
| ZeroMemory(cdinfo, sizeof(_CDINFO)); | ZeroMemory(cdinfo, sizeof(_CDINFO)); |
| cdinfo->fh = fh; | cdinfo->fh = fh; |
| cdinfo->type = type; | cdinfo->type = type; |
| cdinfo->lastpos = totals; | |
| if ((trk != NULL) && (trks != 0)) { | if ((trk != NULL) && (trks != 0)) { |
| trks = min(trks, NELEMENTS(cdinfo->trk)); | trks = min(trks, NELEMENTS(cdinfo->trk)); |
| mediatype = 0; | |
| for (i=0; i<trks; i++) { | |
| if (trk[i].type == 0x14) { | |
| mediatype |= SXSIMEDIA_DATA; | |
| } | |
| else if (trk[i].type == 0x10) { | |
| mediatype |= SXSIMEDIA_AUDIO; | |
| } | |
| } | |
| CopyMemory(cdinfo->trk, trk, trks * sizeof(CDTRK)); | CopyMemory(cdinfo->trk, trk, trks * sizeof(CDTRK)); |
| } | } |
| else { | else { |
| cdinfo->trk[0].type = 0x14; | cdinfo->trk[0].type = 0x14; |
| // cdinfo->trk[0].pos = 0; | // cdinfo->trk[0].pos = 0; |
| mediatype = SXSIMEDIA_DATA; | |
| } | } |
| file_cpyname(cdinfo->path, path, NELEMENTS(cdinfo->path)); | file_cpyname(cdinfo->path, path, NELEMENTS(cdinfo->path)); |
| Line 247 static BRESULT openimg(SXSIDEV sxsi, con | Line 257 static BRESULT openimg(SXSIDEV sxsi, con |
| sxsi->sectors = 1; | sxsi->sectors = 1; |
| sxsi->surfaces = 1; | sxsi->surfaces = 1; |
| sxsi->headersize = 0; | sxsi->headersize = 0; |
| sxsi->mediatype = SXSIMEDIA_DATA; | sxsi->mediatype = mediatype; |
| return(SUCCESS); | return(SUCCESS); |
| sxsiope_err2: | sxsiope_err2: |
| Line 307 static BRESULT opencue(SXSIDEV sxsi, con | Line 317 static BRESULT opencue(SXSIDEV sxsi, con |
| while(textfile_read(tfh, buf, NELEMENTS(buf)) == SUCCESS) { | while(textfile_read(tfh, buf, NELEMENTS(buf)) == SUCCESS) { |
| argc = milstr_getarg(buf, argv, NELEMENTS(argv)); | argc = milstr_getarg(buf, argv, NELEMENTS(argv)); |
| if ((argc >= 3) && (!milstr_cmp(argv[0], str_file))) { | 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))) { | else if ((argc >= 3) && (!milstr_cmp(argv[0], str_track))) { |
| curtrk = milstr_solveINT(argv[1]) - 1; | curtrk = milstr_solveINT(argv[1]) - 1; |
| Line 329 static BRESULT opencue(SXSIDEV sxsi, con | Line 341 static BRESULT opencue(SXSIDEV sxsi, con |
| } | } |
| } | } |
| textfile_close(tfh); | textfile_close(tfh); |
| #if 0 | |
| { | |
| UINT i; | |
| for (i=0; i<NELEMENTS(trk); i++) { | |
| if (trk[i].type) { | |
| TRACEOUT(("%.2d: %.4x %d", i+1, trk[i].type, trk[i].pos)); | |
| } | |
| } | |
| } | |
| #endif | |
| return(openimg(sxsi, path, trk, NELEMENTS(trk))); | return(openimg(sxsi, path, trk, NELEMENTS(trk))); |
| } | } |
| Line 353 const OEMCHAR *ext; | Line 355 const OEMCHAR *ext; |
| return(openimg(sxsi, fname, NULL, 0)); | return(openimg(sxsi, fname, NULL, 0)); |
| } | } |
| static void storepos(UINT8 *ptr, UINT32 pos) { | |
| UINT f; | |
| UINT m; | |
| pos += 150; | |
| f = pos % 75; | |
| pos = pos / 75; | |
| m = pos % 60; | |
| pos = pos / 60; | |
| ptr[0] = 0; | |
| ptr[1] = (UINT8)pos; | |
| ptr[2] = (UINT8)m; | |
| ptr[3] = (UINT8)f; | |
| } | |
| UINT sxsicd_gettocinfo(SXSIDEV sxsi, UINT8 *buf) { | |
| CDINFO cdinfo; | |
| UINT8 *ptr; | |
| UINT trks; | |
| UINT i; | |
| UINT type; | |
| cdinfo = (CDINFO)sxsi->hdl; | |
| ptr = buf + 2; | |
| trks = 0; | |
| for (i=0; i<NELEMENTS(cdinfo->trk); 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); | |
| } | |