(use goo) (dc <midi-patch> (<any>)) (dp patch-num (<midi-patch> => <int>)) (dp patch-name (<midi-patch> => <str>)) (dm midipatch (user-num|<int> name|<str> => <midi-patch>) (def patch (new <midi-patch>)) (set (patch-num patch) (- user-num 1)) (set (patch-name patch) name) patch ) (dc <midi-patch-group> (<any>)) (dp group-name (<midi-patch-group> => <str>)) (dp group-children (<midi-patch-group> => <str-tab>) (fab <str-tab> 0)) (dm midigroup (name|<str> children|... => <midi-patch-group>) (def group (new <midi-patch-group>)) (set (group-name group) name) (do (fun (kid) (if (isa? kid <midi-patch>) (set (elt (group-children group) (patch-name kid)) kid) (set (elt (group-children group) (group-name kid)) kid) ) ) children) group ) (export <midi-patch> patch-num patch-num-setter patch-name patch-name-setter midipatch ) (export <midi-patch-group> group-name group-name-setter group-children group-children-setter midigroup )