

#include<stdio.h>
#include"cd.h"

int cdr_tseek(int, char *);
int cdr_mtplay(int, char *, char *);
int cdr_pause(int);
int cdr_continue(int);
int cdr_mstop(int);
int cdr_cdinfo(int deviceno,int *cdtype
	,int *starttrack,int *endtrack
	,char *tracktime,char *disktime);

#define DATAMAX 100
#define CDTIME(a, b, c) ((a * 60 + b) * 75 + c)


struct cdtime {
    char min;
    char sec;
    char frame;
} time1, time2;

int toc_flag = 0;
int cdtype;
int starttrack;
int endtrack;
struct cdtime tracktime[100];
struct cdtime disktime;

int cdtoc()
{
    if (cdr_cdinfo(0, &cdtype, &starttrack, &endtrack,
               (char *)tracktime, (char *)&disktime)){
        return 1;
    }
    tracktime[endtrack] = disktime;
    if ((cdtype & 1) == 0) return 1;
    toc_flag = 1;
    return 0;
}

int cdplay_track(int track)
{
    int t2;
    if (toc_flag == 0) return 1;
    time1.frame = tracktime[track].frame;
    time1.sec   = tracktime[track].sec;
    time1.min   = tracktime[track].min;
    if (time1.min < 0) return 2;                /* data track */
    t2 = CDTIME(tracktime[track+1].min, 
                tracktime[track+1].sec, 
                tracktime[track+1].frame) -1;
    time2.frame = t2 % 75;
    t2 /= 75;
    time2.sec = t2 % 60;
    t2 /= 60;
    time2.min = t2;
    return cdr_mtplay(0, (char *) &time1, (char *) &time2);
}

int cdpause()
{
    return cdr_pause(0);
}

int cdcont()
{
    return cdr_continue(0);
}

int cdstop()
{
    return cdr_mstop(0);
}

int cdseek(int t1)
{
    time1.frame = t1 % 75;
    t1 /= 75;
    time1.sec = t1 % 60;
    t1 /= 60;
    time1.min = t1;

    return cdr_tseek(0, (char *) &time1);
}

int cdplay(int t1, int t2)
{
    time1.frame = t1 % 75;
    t1 /= 75;
    time1.sec = t1 % 60;
    t1 /= 60;
    time1.min = t1;

    time2.frame = t2 % 75;
    t2 /= 75;
    time2.sec = t2 % 60;
    t2 /= 60;
    time2.min = t2;

    return cdr_mtplay(0, (char *) &time1, (char *) &time2);
}

