/***************************************************************************
                            toc.c  -  description
                             -------------------
    begin                : Sun Nov 16 2003
    copyright            : (C) 2003 by Pete Bernert
    email                : BlackDove@addcom.de
 ***************************************************************************/

/***************************************************************************
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version. See also the license.txt file for *
 *   additional informations.                                              *
 *                                                                         *
 ***************************************************************************/

//*************************************************************************//
// History of changes:
//
// 2003/11/16 - Pete
// - generic cleanup for the Peops release
//
//*************************************************************************//

/////////////////////////////////////////////////////////

#include "stdafx.h"
#define _IN_TOC
#include "externals.h"

/////////////////////////////////////////////////////////

TOC sTOC;

/////////////////////////////////////////////////////////
// read toc


void ReadTOC(void)
{
 unsigned char xbuffer[4];DWORD dwStatus;

 LockGenCDAccess();

 memset(&(sTOC),0,sizeof(sTOC));                       // init toc infos

 dwStatus=GetSCSITOC((LPTOC)&sTOC);                    // get toc by scsi... may change that for ioctrl in xp/2k?

 UnlockGenCDAccess();

 if(dwStatus!=SS_COMP) return;

#ifdef DBGOUT  	 
 auxprintf("TOC Last %d, max %08x,%08x\n",sTOC.cLastTrack,sTOC.tracks[sTOC.cLastTrack].lAddr,reOrder(sTOC.tracks[sTOC.cLastTrack].lAddr));
#endif 
                                                      // re-order it to psemu pro standards
 addr2time(reOrder(sTOC.tracks[sTOC.cLastTrack].lAddr),xbuffer);

#ifdef DBGOUT  	
 auxprintf("TOC %d, %d, %d, %d\n",
           xbuffer[0],xbuffer[1],xbuffer[2],xbuffer[3]  );
#endif
           
 xbuffer[0]=itob(xbuffer[0]);
 xbuffer[1]=itob(xbuffer[1]);
 xbuffer[2]=itob(xbuffer[2]);
 xbuffer[3]=itob(xbuffer[3]);
 lMaxAddr=time2addrB(xbuffer);                         // get max data adr
}

/////////////////////////////////////////////////////////
// get the highest address of first (=data) track

unsigned long GetLastTrack1Addr(void)
{
 unsigned char xbuffer[4];DWORD dwStatus;
 unsigned long lmax;
 TOC xTOC;

 LockGenCDAccess();

 memset(&(xTOC),0,sizeof(xTOC));

 dwStatus=GetSCSITOC((LPTOC)&xTOC);

 UnlockGenCDAccess();

 if(dwStatus!=SS_COMP) return 0;

 addr2time(reOrder(xTOC.tracks[1].lAddr),xbuffer);

 xbuffer[0]=itob(xbuffer[0]);
 xbuffer[1]=itob(xbuffer[1]);
 xbuffer[2]=itob(xbuffer[2]);
 xbuffer[3]=itob(xbuffer[3]);

 lmax=time2addrB(xbuffer);
 if(lmax<150) return 0;

 return lmax-150;
}

/////////////////////////////////////////////////////////