#! /usr/bin/wish


set FILES [lsort [glob -nocomplain *.wav]]

foreach F $FILES {
        set "FVAR(t $F)" [string range "$F" 0 end-4]
}


set num 0

proc newline {F} {
        global num FVAR
        set f .f$num
        incr num
        frame $f
        label $f.l -text $F
        entry $f.a -textvariable "FVAR(a $F)"
        entry $f.t -textvariable "FVAR(t $F)" -width 60
        pack $f.l $f.a $f.t -side left
        pack $f
}

frame .ta
label .ta.l -text Album:
entry .ta.e -textvariable ALBUM
pack .ta.l -side left
pack .ta.e -side right -fill x -expand on
pack .ta -fill x

set MODE nat
frame .tm
frame .tm.a
frame .tm.b
radiobutton .tm.a.at -text "Author - Title" -variable MODE -value at -anchor w
radiobutton .tm.a.t -text "Title" -variable MODE -value t -anchor w
radiobutton .tm.a.lat -text "Album - Author - Title" -variable MODE -value lat -anchor w
radiobutton .tm.a.alt -text "Author - Album - Title" -variable MODE -value alt -anchor w
radiobutton .tm.b.at -text "NN Author - Title" -variable MODE -value nat -anchor w
radiobutton .tm.b.t -text "NN Title" -variable MODE -value nt -anchor w
radiobutton .tm.b.lat -text "NN Album - Author - Title" -variable MODE -value nlat -anchor w
radiobutton .tm.b.alt -text "NN Author - Album - Title" -variable MODE -value nalt -anchor w
pack .tm.a .tm.b -side left -fill x -expand on
pack .tm.a.at .tm.a.t .tm.a.lat .tm.a.alt -fill x 
pack .tm.b.at .tm.b.t .tm.b.lat .tm.b.alt -fill x 
pack .tm -fill x -expand on


#read toc:

proc tocat {f a t} {
        global FVAR
        set "FVAR(a $f)" $a
        set "FVAR(t $f)" $t
}

proc tocl {l} {
        global ALBUM
        set ALBUM $l
}

proc tocm {m} {
        global MODE
        set MODE $m
}

set d [catch {set toc [open toc.tcl r]}]
if {!$d} {
        while {[gets $toc line] > 0} {
                eval $line
        }
        close $toc
}

#create widget:
foreach F $FILES {
        newline $F
}


tkwait window .

############################################

proc escsh {str} {
        set ret "'"
        foreach l [split $str {}] {
                if {"$l" == "'"} {
                        append ret {'\''}
                } else {
                        append ret $l
                }
        }
        append ret "'"
        return $ret
}

set PAT {}
set PATN 0

foreach p [split $MODE {}] {
        if {"$p" == "n"} {
                set PATN 1
        } else {
                if {"$PAT" != ""} {append PAT " - "}
                append PAT "%$p"
        }
}

proc unpat {p l a t} {
	return [string map [list %l $l %a $a %t $t] $p]
}

#create toc:
proc pad {n} {
        if {[string length $n] < 2} {return "0$n"} {return $n}
}

set num 0
set n {}
set toc [open Makefile w]
puts $toc {# Auto-generated Ogg and MP3 cooking oven}
puts $toc {O = oggenc -Q}
puts $toc {L = lame -h}
puts $toc {F = $(shell echo *.wav)}
if {"$ALBUM" != ""} {
        puts $toc "AO = -l [escsh $ALBUM]"
        puts $toc "AL = --tl [escsh $ALBUM]"
} {
	puts $toc {AO =}
	puts $toc {AL =}
}
foreach F $FILES {
        incr num
	#Ogg building:
        if {$PATN} {set n "[pad $num] "}
        set line "O_$F = -n \'$n$PAT.ogg\' -t [escsh $FVAR(t $F)] "
        set a $FVAR(a $F)
        if {"$a" != ""} {
                append line "-a [escsh $a] "
        }
        append line $F
        puts $toc $line
	#MP3 Building:
        set line "M_$F = --tt [escsh $FVAR(t $F)] "
        set a $FVAR(a $F)
        if {"$a" != ""} {
                append line "--ta [escsh $a] "
        }
        append line $F
        puts $toc $line
	puts $toc "MF_$F = [escsh $n[unpat $PAT $ALBUM $FVAR(a $F) $FVAR(t $F)].mp3]"
}
puts $toc {}
puts $toc {all:}
puts $toc {	@echo Please call \"nice make [-j 2..x] ogg\".}
puts $toc {	@echo You can add parameters to oggenc/lame/mp3info by modifying the Makefile.}
puts $toc {}
puts $toc {ogg: $(F:.wav=.done)}
puts $toc {	rm -f $^}
puts $toc {	@echo}
puts $toc {	@echo Ready: Ogg.}
puts $toc {	@echo I\'ve done all I can. Don\'t restart make, unless you have better Wav-Files!!}
puts $toc {}
puts $toc {mp3: $(F:.wav=.done3)}
puts $toc {	rm -f $^}
puts $toc {	@echo}
puts $toc {	@echo Ready: MP3.}
puts $toc {	@echo I\'ve done all I can. Don\'t restart make, unless you have better Wav-Files!!}
puts $toc {}
puts $toc {%.done: %.wav}
puts $toc {	@echo Making $@}
puts $toc {	$O $(AO) $(O_$<)}
puts $toc {	touch $@}
puts $toc {}
puts $toc {%.done3: %.wav}
puts $toc {	@echo Making $@}
puts $toc {	$L $(AL) $(M_$<) $(MF_$<)}
puts $toc {	touch $@}
close $toc

set toc [open toc.tcl w]
puts $toc "[list tocl "$ALBUM"]"
puts $toc "[list tocm "$MODE"]"
foreach F $FILES {
        puts $toc "[list tocat "$F" "$FVAR(a $F)" "$FVAR(t $F)"]"
}
close $toc