*+*+*› BASICCOPY.BAS›› This 9 Sector program is on this› OL' HACKERS NEWSLETTER DISK.›› ANOTHER COPY PROGRAM?›› First, we're NOT talking › DUPLICATE FILE here..this is a clone› of Option C in the DUP.SYS menu, so› disk swaps aren't supported. I wrote› it specifically for loading external› files to D8 (and back.) But thanks to› the Wonders Of CIO it does all the› other stuff too.›› WHAT WE GOT HERE?›› First, there's The String. LIST› lines 20-40 out for later use in your› Basic programs. NEVER, EVER try› running string based ML outside of a› program! However, THIS program POKES› the ML to Page Six, so you can› experiment. Not incidentally, this› also means that you have a Resident› Utility that you can use in Immediate› Mode. If you have 151 spare, protected› bytes somewhere else, change the 1536› in line 90 to wherever you'd like the› ML to live.›› HOW TO:›› Press a key at the prompt, and› you'll see the Test Module listed on› the screen. (Once the code is POKEd,› you can LIST 100,160 to disk, NEW,› then ENTER it back in as an› independent program.) Use the cursor› keys to edit the Basic lines for› different filenames, channels, etc.› Then scoot the cursor down to the› 'GOTO 120', and hit RETURN to run the› routine. Once you've done this a few› times, you should have a pretty good› idea of what you can do with your New› Utility.›› PROTECTION›› PLEASE: Write Protect tabs are› NEVER a bad idea for valuable files,› so use them, specially when trying new› files!›› SO, HOW DOES IT WORK?›› The first thing you need to do is› OPEN the channels that will be used› for READ and WRITE. You DO have to do› this from Basic. (Sorry, no miracles› in Small Routines.) ANY available› channel (1 to 7) is OK. The READ will› probably be something dull like:› OPEN #1,4,0,"D:FILE"›› Things get slightly more› interesting with the WRITE options.› For instance:› OPEN #2,8,0,"D8:NEWFILE"› will do a simple copy. Want to APPEND?› Try:› OPEN #2,9,0,"D:OLDFILE"› which will tack the READ file to the› end of OLDFILE. And then there's the› dumps:› OPEN #2,8,0,"P:"› for typing a file on the printer,›› For a dump to the screen. Right handy› for DOC files.› OPEN #2,8,0,"E:"›› HOW ABOUT POKE'ing A CHANGE?›› (If you're fussy like me, POKEs› to 709 and 710 will zap that tired› GR.0 blue.) Again, you can use any› available I/O channel for the OPENs.›› THE USR ROUTINE›› Once the files are set, call the› USR routine. 3 parameters are› required. (Ugh!) First, the channel› numbers that have been OPENed for READ› and WRITE, respectively. Then FRE(0).› Why? Free Memory is the file buffer,› and the routine needs to know just how› much RAM it has to work with. Don't› worry about running short. It'll work› in chunks if it has to. The format› is:›› X=USR(ADR(COPY$),READ CHANNEL,› WRITE CHANNEL, FRE(0))›› WANT MORE?›› Error Checking? Okay, check the› value returned to the USR function. 1› is the All Clear, indicating a› successful Copy. 255 indicates that› the wrong number of parameters were› passed. (I have a Serious Typo› Problem.) In the event of a regular› I/O error (say 162 for a Full Disk or› 133 'cause you tried to WRITE to #79),› the regular number will be returned.› Errors of course, terminate the› routine.›› A FINAL NOTE:›› In ALL cases, BOTH channels that› were OPENed will be CLOSEd before the› program returns to Basic, so you'll› need to OPEN them again if needed.› ** End **››