( source dest -- ) { value| source dest size buffer | { { [ "W" file.open to dest ] is open-dest [ "R" file.open to source ] is open-source [ open-dest open-source ] } is open-files { [ source file.size to size ] is obtain-size [ size malloc to buffer ] is allocate-buffer [ obtain-size allocate-buffer ] } is create-buffer [ source dest and 0 <> ] is check [ open-files create-buffer check ] } is prepare [ source buffer size file.read drop ] is read-source [ dest buffer size file.write drop ] is write-dest [ source file.close dest file.close ] is close-files [ prepare [ read-source write-dest close-files ] ifTrue ] } is copy-file