The main thing that I think you are forgetting is to put an END command between your main code and your sub-routines. If the computer ever finishes your main loop, (which if well written, it shouldn't), it will move on to the next commands - your sub-routines. And since it has not go-subbed to them, it will ignore (or perhaps crash at?) any RETURNs it runs into.
So corrected:
{main loop here, that calls subroutines}
end
print "Blah,Blah"
return
file_save:
input "File?",name$
OPEN TO WRITE 1,"y\a\a\a\"+name$
return
"You get what everyone gets, you get a lifetime!" - Death, The Sandman Library
First you Dream, then you ... - Neil Gaiman, 2001