TriOS-alt/zubehör/sphinx/spinx100225-ori/sphinx1/copy.spn

68 lines
1.6 KiB
Plaintext
Raw Normal View History

2010-11-26 23:58:06 +01:00
SXTVRENDEZVOUS = $8000 - 4
SXKBRENDEZVOUS = SXTVRENDEZVOUS - 4
SDSPIRENDEZVOUS = SXKBRENDEZVOUS - 3 * 4
SXFS2RENDEZVOUS = SDSPIRENDEZVOUS - 4 * 4 ' four rendezvous variables
SXFSRENDEZVOUS = SXFS2RENDEZVOUS - 4 * 4 ' four rendezvous variables
METADATABUFFER = SXFSRENDEZVOUS - 512
_free = ($8000 - METADATABUFFER) / 4
obj
term: "isxtv"
kb: "isxkb"
f[2]: "sxfile"
pub main | err
err := \try
if err > 0
term.str( err )
term.out( 13 )
elseif err < 0
term.str( string("error ") )
term.dec( err )
term.out( 13 )
f[0].Close
f[0].Open( string("sphinx.bin"), "R" )
f[0].Execute( 0 )
con
FILENAMELENGTH = 12 ' 8 + . + 3
var
byte srcfilename[FILENAMELENGTH + 1] ' + null
byte dstfilename[FILENAMELENGTH + 1] ' + null
byte optionstring[3]
byte needConfirmation
pri try | length, ch
needConfirmation~~
f[0].Open( string("args.d8a"), "R" )
if f[0].ReadByte <> 2
abort string("usage: source destination")
f[0].ReadString( @srcfilename, FILENAMELENGTH )
f[0].ReadString( @dstfilename, FILENAMELENGTH )
f[0].Close
if f[0].Open( @srcfilename, "R" )
term.str( @srcfilename )
abort string(" -- not found" )
length := f[0].Length
if f[1].Open( @dstfilename, "R" ) == 0
term.str( @dstfilename )
term.str( string(" -- overwrite? ") )
ch := kb.getkey
term.out( ch )
term.out( 13 )
ifnot ch == "y" or ch == "Y"
return
f[1].Close
f[1].Open( @dstfilename, "W" )
repeat length
f[1].WriteByte( f[0].ReadByte ) ' Could probably improve on this
f[1].Close