yet another fix, hopefully the last now

seems that the read function should not return < 0 as the decode routines screw up, but
the id3 routine required it on error. make them return 0 and trap for it in id3 as an error