1 #include "cd.h"
2 
3 //---- Conversion functions --------------------------------------------------
4 unsigned
Time2Frame(int min,int sec,int frame)5 Time2Frame (int min, int sec, int frame)
6 {
7   return (unsigned)(min * 60 * 75 + sec * 75 + frame);
8 }
9 
10 unsigned
Time2HSG(int min,int sec,int frame)11 Time2HSG (int min, int sec, int frame)
12 {
13   return Time2Frame (min, sec, frame) - 150;
14 }
15 
16 unsigned
Time2Redbook(int min,int sec,int frame)17 Time2Redbook (int min, int sec, int frame)
18 {
19   return (unsigned)((min << 16) | (sec << 8) | (frame));
20 }
21 
22 void
Frame2Time(unsigned frame,int * Min,int * Sec,int * Fra)23 Frame2Time (unsigned frame, int *Min, int *Sec, int *Fra)
24 {
25   *Min = (int)(frame / (60 * 75));
26   frame -= *Min * 60 * 75;
27   *Sec = (int)(frame / 75);
28   frame -= *Sec * 75;
29   *Fra = (int)frame;
30 }
31 
32 void
Redbook2Time(unsigned redbook,int * Min,int * Sec,int * Fra)33 Redbook2Time (unsigned redbook, int *Min, int *Sec, int *Fra)
34 {
35   *Fra = (int)(redbook & 0xff);
36   *Sec = (int)((redbook >> 8) & 0xff);
37   *Min = (int)((redbook >> 16) & 0xff);
38 }
39 
40 void
HSG2Time(unsigned hsg,int * Min,int * Sec,int * Fra)41 HSG2Time (unsigned hsg, int *Min, int *Sec, int *Fra)
42 {
43   Frame2Time (hsg + 150, Min, Sec, Fra);
44 }
45 
46 unsigned
Redbook2HSG(unsigned redbook)47 Redbook2HSG (unsigned redbook)
48 {
49   int Min, Sec, Fra;
50   Redbook2Time (redbook, &Min, &Sec, &Fra);
51   return Time2HSG (Min, Sec, Fra);
52 }
53 
54 unsigned
HSG2Redbook(unsigned HSG)55 HSG2Redbook (unsigned HSG)
56 {
57   int Min, Sec, Fra;
58   HSG2Time (HSG, &Min, &Sec, &Fra);
59   return Time2Redbook (Min, Sec, Fra);
60 }
61