#!/bin/sh
#
# Carsten Stupka, 2008

WAVFILE="CDImage.wav"
FREEDBFILE="$1"
APPSTRING="freedb2cue 0.1"

if [ ! -r $1 ]
then
 echo "Error: File \"$1\" not found" > /dev/stderr
 exit 1
fi

awk 'BEGIN { i=0; j=0; FS = " +|=" }

 function zero_pad(x) {
  if (x<10) x=0x
  return x
 }

# get frame offsets
 /^#( +|\t+)[1-9]/ {
  ++i
  split($0, line_offset, "( +|\t+)")
  frame_offset[i] = line_offset[2]
  max_a = i
 }

 /^DYEAR/ {
  year=$2
 }

# get artist, cd title
 /^DTITLE/ {
  split($0, line_cdtitle, "=|( / )")
  artist = line_cdtitle[2]
  cdtitle = line_cdtitle[3]
 }

# get track titles
 /^TTITLE/ {
  ++j
  split($0, line_trtitle, "=")
  track_title[j] = line_trtitle[2]
  max_b=j
 }

 END {
# if (max_a !~ max_b) print "Error" > "/dev/stderr"
  pregap=frame_offset[1]

# print cd information
  print "PERFORMER \"" artist "\""
  print "TITLE \"" cdtitle "\""
  print "REM Generated by " app_string
  print "FILE \"" wav_file "\" WAVE"

  for (i=1; i<=max_a; ++i) {
   if (i!= 1) frame_offset[i]-=pregap
   min = int(frame_offset[i] / 4500)
   sec = int((frame_offset[i] - min * 4500) / 75)
   frames = frame_offset[i]%75

# now print the track information
   print "  TRACK", zero_pad(i), "AUDIO"
   print "    TITLE \"" track_title[i] "\""
   print "    PERFORMER \"" artist "\""
   if (i == 1) { 
    if (pregap > 0) print "    PREGAP 00:" zero_pad(sec) ":00"
    print "    INDEX 01 00:00:00"
   }
   if (i != 1) print "    INDEX 01 " zero_pad(min) ":" zero_pad(sec) ":" zero_pad(frames)
  }

# add empty line
  print "" } ' wav_file="$WAVFILE" app_string="$APPSTRING" "$FREEDBFILE"

if [ "$?" -ne "0" ]; then
 exit 1
fi

exit 0