Home » Personal collection » Acorn ADFS disks » Electron » EUG_submission_3.ADF » SaveProt/text

SaveProt/text

This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.

Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.

Tape/disk: Home » Personal collection » Acorn ADFS disks » Electron » EUG_submission_3.ADF
Filename: SaveProt/text
Read OK:
File size: 1953 bytes
Load address: 74206576
Exec address: D747865
Duplicates

There is 1 duplicate copy of this file in the archive:

File contents
�.........*.......*.......*.......*.......*.......*.......*.......*.......*.<
                  Yet another save protection program

       In EUG 20, Ross Little presented a new version of his save
protection program, which intercepted most filing system operations, and
checked, using an OSFIND call, to see if a file existed before overwriting
it. I wrote a similar program several months ago, when Gus Donnachaidh
suggested the idea, but didn't get around to sending it in until now. The
program works in a similar manner to Ross Little's version, except that it
uses a slightly different method to test for the existence of a file. It
calls the OSFILE routine with the accumulator set to 5 - the file type is
returned in the accumulator (see page 97 of the Advanced User Guide, or
page 84 of the Acorn Plus 3 User Guide if you're interested). An advantage
of this approach is that the program can tell whether the file in question
is locked, or if it is a directory. In these cases, the ADFS will not
allow another file to be saved with the same name - it returns with a
"Locked" or "Already exists" error message. Hence it would only waste time
in these cases for the Save Protection program to ask whether or not to
overwrite the file.
       Another feature of my program is that it intercepts the OSFIND
vector, as well as the OSFILE vector. This means that it can protect
againt OPENOUT commands overwriting existing files, as well as SAVE and
*SAVE. I thought that this would make it impossible to unwittingly
overwrite a file, but I was wrong - it would seem that the ADFS commands
*COPY and *RENAME do not use OSFILE or OSFIND, so they will still
overwrite existing files. 
       After reading Ross Little's program, I copied his idea of including
a facility to disable the program, and incorporated this into my program
by intercepting the OSCLI vector, and testng all star commands. When the
command *DISABLE is entered, the vectors are all reset to their original
values, so files can be overwritten as usual. It is advisable to do this
before executing any machine code program, unless you are sure it will not
corrupt the Save Protection program.
       Remember also, that page &B will be corrupted by any *KEY commands,
and that page &C will be corrupted by any VDU 23 (character definition)
commands. This area of memory is also likely to be used by any ADT
commands you use, and page 9 is used by the E00 ADFS. To avoid all these
pitfalls, it is probably better to reduce the value of HIMEM to (say)
&5C00 and store the code between HIMEM and screen memory. This will keep
the code safe until the Mode is next changed, which is not often if you
are typing in listings, etc. To store the code here, you must remember to
change HIMEM before assembling the source code AND before running the code
each time you use it.
       Even better would be to store the code permanently in
battery-backed RAM, as a service ROM. This would be set up automatically
every time you switch the machine on, and would be almost immune to
corruption by other programs. It would need to utilise the extended vector
system (see Advanced User Guide, pages 171 and 189). I have to admit that
despite writing the program, I have no intention of using it on a regular
basis. I have already got into the habit of locking all programs
that are of any value when I am not working on them, and in any case, if I
was in a sufficiently absent-minded mood to overwrite a file by mistake,
I would probably have forgotten to load the protection program as well!
However, if the program could be made to work permanently in sideways RAM,
it would be far more useful. I will investigate this possibility
further... 
       Note that when the program asks whether a file should be
overwritten, you must answer with the word "YES" (upper or lower case) in
full - any other key will give the error message "Aborted". This is the
standard procedure used by the ADFS when asking for confirmation for the
*DESTROY command. Remember that the "Aborted" error may cause a BASIC
program to stop if it has inadequate error trapping. However, it is always
unwise to use the protection program from inside another program, in case
of corrupting the code, so this should not be a major problem.
       As with Ross Little's program I have included a check to make sure
that the setup routine is not executed twice, though you will still run
into trouble if you run a second copy which was asembled at a different
address. If the code becomes corrupted for any reason, press CTRL-BREAK,
save your work if it is still intact, then re-install the protection
program. Ross Little mentioned in EUG20 that this feature did not work
properly in his DFS version of the program. The problem was that the
contents of the OSFILE vector were copied into the "return" vector (used
to carry out the OSFILE call at the end of the routine), before the check
was made to find out if the program had already been installed. This means
that after the program is run the second time, both the real vector and
the return vector point to the start of the Protection program. This
explains why it enters an endless loop when run. The solution of course,
is to swap around the first few lines of the code, so the check is made
before any changes are made:
               160.init  LDAfilev+1
               170       CMP#newv DIV 256
               180       BEQend  
               190       STAretv+1
               200       LDAfilev
               210       STAretv
             etc....
       However, this is not the end of the story, because if the SAFE
program has been run a second time using *SAFE (as opposed to CALL&900),
the return vectors will have been overwritten with zeros, and the original
contents of the vectors lost. They cannot be restored using the default
vector table in the OS ROM, since this will point to the tape filing
system. The solution here is to put the return vectors at the end of the
program, and not to include them in the saved file. This means that they
will not be overwritten when the SAFE program is re-loaded. This is how I
avoided the problem in my program.
       My program is designed to work on both ADFS and DFS, since it only
uses "legal" operating system calls, which are common to both. However, I
do not have a DFS ROM to test this, so I would be interested to hear if it
is not compatible, or if there are any bugs.
                                                  Matthew Ford
00000000  81 2e 2e 2e 2e 2e 2e 2e  2e 2e 2a 2e 2e 2e 2e 2e  |..........*.....|
00000010  2e 2e 2a 2e 2e 2e 2e 2e  2e 2e 2a 2e 2e 2e 2e 2e  |..*.......*.....|
*
00000040  2e 2e 2a 2e 2e 2e 2e 2e  2e 2e 2a 2e 3c 0d 20 20  |..*.......*.<.  |
00000050  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000060  59 65 74 20 61 6e 6f 74  68 65 72 20 73 61 76 65  |Yet another save|
00000070  20 70 72 6f 74 65 63 74  69 6f 6e 20 70 72 6f 67  | protection prog|
00000080  72 61 6d 0d 0d 20 20 20  20 20 20 20 49 6e 20 45  |ram..       In E|
00000090  55 47 20 32 30 2c 20 52  6f 73 73 20 4c 69 74 74  |UG 20, Ross Litt|
000000a0  6c 65 20 70 72 65 73 65  6e 74 65 64 20 61 20 6e  |le presented a n|
000000b0  65 77 20 76 65 72 73 69  6f 6e 20 6f 66 20 68 69  |ew version of hi|
000000c0  73 20 73 61 76 65 0d 70  72 6f 74 65 63 74 69 6f  |s save.protectio|
000000d0  6e 20 70 72 6f 67 72 61  6d 2c 20 77 68 69 63 68  |n program, which|
000000e0  20 69 6e 74 65 72 63 65  70 74 65 64 20 6d 6f 73  | intercepted mos|
000000f0  74 20 66 69 6c 69 6e 67  20 73 79 73 74 65 6d 20  |t filing system |
00000100  6f 70 65 72 61 74 69 6f  6e 73 2c 20 61 6e 64 0d  |operations, and.|
00000110  63 68 65 63 6b 65 64 2c  20 75 73 69 6e 67 20 61  |checked, using a|
00000120  6e 20 4f 53 46 49 4e 44  20 63 61 6c 6c 2c 20 74  |n OSFIND call, t|
00000130  6f 20 73 65 65 20 69 66  20 61 20 66 69 6c 65 20  |o see if a file |
00000140  65 78 69 73 74 65 64 20  62 65 66 6f 72 65 20 6f  |existed before o|
00000150  76 65 72 77 72 69 74 69  6e 67 0d 69 74 2e 20 49  |verwriting.it. I|
00000160  20 77 72 6f 74 65 20 61  20 73 69 6d 69 6c 61 72  | wrote a similar|
00000170  20 70 72 6f 67 72 61 6d  20 73 65 76 65 72 61 6c  | program several|
00000180  20 6d 6f 6e 74 68 73 20  61 67 6f 2c 20 77 68 65  | months ago, whe|
00000190  6e 20 47 75 73 20 44 6f  6e 6e 61 63 68 61 69 64  |n Gus Donnachaid|
000001a0  68 0d 73 75 67 67 65 73  74 65 64 20 74 68 65 20  |h.suggested the |
000001b0  69 64 65 61 2c 20 62 75  74 20 64 69 64 6e 27 74  |idea, but didn't|
000001c0  20 67 65 74 20 61 72 6f  75 6e 64 20 74 6f 20 73  | get around to s|
000001d0  65 6e 64 69 6e 67 20 69  74 20 69 6e 20 75 6e 74  |ending it in unt|
000001e0  69 6c 20 6e 6f 77 2e 20  54 68 65 0d 70 72 6f 67  |il now. The.prog|
000001f0  72 61 6d 20 77 6f 72 6b  73 20 69 6e 20 61 20 73  |ram works in a s|
00000200  69 6d 69 6c 61 72 20 6d  61 6e 6e 65 72 20 74 6f  |imilar manner to|
00000210  20 52 6f 73 73 20 4c 69  74 74 6c 65 27 73 20 76  | Ross Little's v|
00000220  65 72 73 69 6f 6e 2c 20  65 78 63 65 70 74 20 74  |ersion, except t|
00000230  68 61 74 20 69 74 0d 75  73 65 73 20 61 20 73 6c  |hat it.uses a sl|
00000240  69 67 68 74 6c 79 20 64  69 66 66 65 72 65 6e 74  |ightly different|
00000250  20 6d 65 74 68 6f 64 20  74 6f 20 74 65 73 74 20  | method to test |
00000260  66 6f 72 20 74 68 65 20  65 78 69 73 74 65 6e 63  |for the existenc|
00000270  65 20 6f 66 20 61 20 66  69 6c 65 2e 20 49 74 0d  |e of a file. It.|
00000280  63 61 6c 6c 73 20 74 68  65 20 4f 53 46 49 4c 45  |calls the OSFILE|
00000290  20 72 6f 75 74 69 6e 65  20 77 69 74 68 20 74 68  | routine with th|
000002a0  65 20 61 63 63 75 6d 75  6c 61 74 6f 72 20 73 65  |e accumulator se|
000002b0  74 20 74 6f 20 35 20 2d  20 74 68 65 20 66 69 6c  |t to 5 - the fil|
000002c0  65 20 74 79 70 65 20 69  73 0d 72 65 74 75 72 6e  |e type is.return|
000002d0  65 64 20 69 6e 20 74 68  65 20 61 63 63 75 6d 75  |ed in the accumu|
000002e0  6c 61 74 6f 72 20 28 73  65 65 20 70 61 67 65 20  |lator (see page |
000002f0  39 37 20 6f 66 20 74 68  65 20 41 64 76 61 6e 63  |97 of the Advanc|
00000300  65 64 20 55 73 65 72 20  47 75 69 64 65 2c 20 6f  |ed User Guide, o|
00000310  72 0d 70 61 67 65 20 38  34 20 6f 66 20 74 68 65  |r.page 84 of the|
00000320  20 41 63 6f 72 6e 20 50  6c 75 73 20 33 20 55 73  | Acorn Plus 3 Us|
00000330  65 72 20 47 75 69 64 65  20 69 66 20 79 6f 75 27  |er Guide if you'|
00000340  72 65 20 69 6e 74 65 72  65 73 74 65 64 29 2e 20  |re interested). |
00000350  41 6e 20 61 64 76 61 6e  74 61 67 65 0d 6f 66 20  |An advantage.of |
00000360  74 68 69 73 20 61 70 70  72 6f 61 63 68 20 69 73  |this approach is|
00000370  20 74 68 61 74 20 74 68  65 20 70 72 6f 67 72 61  | that the progra|
00000380  6d 20 63 61 6e 20 74 65  6c 6c 20 77 68 65 74 68  |m can tell wheth|
00000390  65 72 20 74 68 65 20 66  69 6c 65 20 69 6e 20 71  |er the file in q|
000003a0  75 65 73 74 69 6f 6e 0d  69 73 20 6c 6f 63 6b 65  |uestion.is locke|
000003b0  64 2c 20 6f 72 20 69 66  20 69 74 20 69 73 20 61  |d, or if it is a|
000003c0  20 64 69 72 65 63 74 6f  72 79 2e 20 49 6e 20 74  | directory. In t|
000003d0  68 65 73 65 20 63 61 73  65 73 2c 20 74 68 65 20  |hese cases, the |
000003e0  41 44 46 53 20 77 69 6c  6c 20 6e 6f 74 0d 61 6c  |ADFS will not.al|
000003f0  6c 6f 77 20 61 6e 6f 74  68 65 72 20 66 69 6c 65  |low another file|
00000400  20 74 6f 20 62 65 20 73  61 76 65 64 20 77 69 74  | to be saved wit|
00000410  68 20 74 68 65 20 73 61  6d 65 20 6e 61 6d 65 20  |h the same name |
00000420  2d 20 69 74 20 72 65 74  75 72 6e 73 20 77 69 74  |- it returns wit|
00000430  68 20 61 0d 22 4c 6f 63  6b 65 64 22 20 6f 72 20  |h a."Locked" or |
00000440  22 41 6c 72 65 61 64 79  20 65 78 69 73 74 73 22  |"Already exists"|
00000450  20 65 72 72 6f 72 20 6d  65 73 73 61 67 65 2e 20  | error message. |
00000460  48 65 6e 63 65 20 69 74  20 77 6f 75 6c 64 20 6f  |Hence it would o|
00000470  6e 6c 79 20 77 61 73 74  65 20 74 69 6d 65 0d 69  |nly waste time.i|
00000480  6e 20 74 68 65 73 65 20  63 61 73 65 73 20 66 6f  |n these cases fo|
00000490  72 20 74 68 65 20 53 61  76 65 20 50 72 6f 74 65  |r the Save Prote|
000004a0  63 74 69 6f 6e 20 70 72  6f 67 72 61 6d 20 74 6f  |ction program to|
000004b0  20 61 73 6b 20 77 68 65  74 68 65 72 20 6f 72 20  | ask whether or |
000004c0  6e 6f 74 20 74 6f 0d 6f  76 65 72 77 72 69 74 65  |not to.overwrite|
000004d0  20 74 68 65 20 66 69 6c  65 2e 0d 20 20 20 20 20  | the file..     |
000004e0  20 20 41 6e 6f 74 68 65  72 20 66 65 61 74 75 72  |  Another featur|
000004f0  65 20 6f 66 20 6d 79 20  70 72 6f 67 72 61 6d 20  |e of my program |
00000500  69 73 20 74 68 61 74 20  69 74 20 69 6e 74 65 72  |is that it inter|
00000510  63 65 70 74 73 20 74 68  65 20 4f 53 46 49 4e 44  |cepts the OSFIND|
00000520  0d 76 65 63 74 6f 72 2c  20 61 73 20 77 65 6c 6c  |.vector, as well|
00000530  20 61 73 20 74 68 65 20  4f 53 46 49 4c 45 20 76  | as the OSFILE v|
00000540  65 63 74 6f 72 2e 20 54  68 69 73 20 6d 65 61 6e  |ector. This mean|
00000550  73 20 74 68 61 74 20 69  74 20 63 61 6e 20 70 72  |s that it can pr|
00000560  6f 74 65 63 74 0d 61 67  61 69 6e 74 20 4f 50 45  |otect.againt OPE|
00000570  4e 4f 55 54 20 63 6f 6d  6d 61 6e 64 73 20 6f 76  |NOUT commands ov|
00000580  65 72 77 72 69 74 69 6e  67 20 65 78 69 73 74 69  |erwriting existi|
00000590  6e 67 20 66 69 6c 65 73  2c 20 61 73 20 77 65 6c  |ng files, as wel|
000005a0  6c 20 61 73 20 53 41 56  45 20 61 6e 64 0d 2a 53  |l as SAVE and.*S|
000005b0  41 56 45 2e 20 49 20 74  68 6f 75 67 68 74 20 74  |AVE. I thought t|
000005c0  68 61 74 20 74 68 69 73  20 77 6f 75 6c 64 20 6d  |hat this would m|
000005d0  61 6b 65 20 69 74 20 69  6d 70 6f 73 73 69 62 6c  |ake it impossibl|
000005e0  65 20 74 6f 20 75 6e 77  69 74 74 69 6e 67 6c 79  |e to unwittingly|
000005f0  0d 6f 76 65 72 77 72 69  74 65 20 61 20 66 69 6c  |.overwrite a fil|
00000600  65 2c 20 62 75 74 20 49  20 77 61 73 20 77 72 6f  |e, but I was wro|
00000610  6e 67 20 2d 20 69 74 20  77 6f 75 6c 64 20 73 65  |ng - it would se|
00000620  65 6d 20 74 68 61 74 20  74 68 65 20 41 44 46 53  |em that the ADFS|
00000630  20 63 6f 6d 6d 61 6e 64  73 0d 2a 43 4f 50 59 20  | commands.*COPY |
00000640  61 6e 64 20 2a 52 45 4e  41 4d 45 20 64 6f 20 6e  |and *RENAME do n|
00000650  6f 74 20 75 73 65 20 4f  53 46 49 4c 45 20 6f 72  |ot use OSFILE or|
00000660  20 4f 53 46 49 4e 44 2c  20 73 6f 20 74 68 65 79  | OSFIND, so they|
00000670  20 77 69 6c 6c 20 73 74  69 6c 6c 0d 6f 76 65 72  | will still.over|
00000680  77 72 69 74 65 20 65 78  69 73 74 69 6e 67 20 66  |write existing f|
00000690  69 6c 65 73 2e 20 0d 20  20 20 20 20 20 20 41 66  |iles. .       Af|
000006a0  74 65 72 20 72 65 61 64  69 6e 67 20 52 6f 73 73  |ter reading Ross|
000006b0  20 4c 69 74 74 6c 65 27  73 20 70 72 6f 67 72 61  | Little's progra|
000006c0  6d 2c 20 49 20 63 6f 70  69 65 64 20 68 69 73 20  |m, I copied his |
000006d0  69 64 65 61 20 6f 66 20  69 6e 63 6c 75 64 69 6e  |idea of includin|
000006e0  67 0d 61 20 66 61 63 69  6c 69 74 79 20 74 6f 20  |g.a facility to |
000006f0  64 69 73 61 62 6c 65 20  74 68 65 20 70 72 6f 67  |disable the prog|
00000700  72 61 6d 2c 20 61 6e 64  20 69 6e 63 6f 72 70 6f  |ram, and incorpo|
00000710  72 61 74 65 64 20 74 68  69 73 20 69 6e 74 6f 20  |rated this into |
00000720  6d 79 20 70 72 6f 67 72  61 6d 0d 62 79 20 69 6e  |my program.by in|
00000730  74 65 72 63 65 70 74 69  6e 67 20 74 68 65 20 4f  |tercepting the O|
00000740  53 43 4c 49 20 76 65 63  74 6f 72 2c 20 61 6e 64  |SCLI vector, and|
00000750  20 74 65 73 74 6e 67 20  61 6c 6c 20 73 74 61 72  | testng all star|
00000760  20 63 6f 6d 6d 61 6e 64  73 2e 20 57 68 65 6e 20  | commands. When |
00000770  74 68 65 0d 63 6f 6d 6d  61 6e 64 20 2a 44 49 53  |the.command *DIS|
00000780  41 42 4c 45 20 69 73 20  65 6e 74 65 72 65 64 2c  |ABLE is entered,|
00000790  20 74 68 65 20 76 65 63  74 6f 72 73 20 61 72 65  | the vectors are|
000007a0  20 61 6c 6c 20 72 65 73  65 74 20 74 6f 20 74 68  | all reset to th|
000007b0  65 69 72 20 6f 72 69 67  69 6e 61 6c 0d 76 61 6c  |eir original.val|
000007c0  75 65 73 2c 20 73 6f 20  66 69 6c 65 73 20 63 61  |ues, so files ca|
000007d0  6e 20 62 65 20 6f 76 65  72 77 72 69 74 74 65 6e  |n be overwritten|
000007e0  20 61 73 20 75 73 75 61  6c 2e 20 49 74 20 69 73  | as usual. It is|
000007f0  20 61 64 76 69 73 61 62  6c 65 20 74 6f 20 64 6f  | advisable to do|
00000800  20 74 68 69 73 0d 62 65  66 6f 72 65 20 65 78 65  | this.before exe|
00000810  63 75 74 69 6e 67 20 61  6e 79 20 6d 61 63 68 69  |cuting any machi|
00000820  6e 65 20 63 6f 64 65 20  70 72 6f 67 72 61 6d 2c  |ne code program,|
00000830  20 75 6e 6c 65 73 73 20  79 6f 75 20 61 72 65 20  | unless you are |
00000840  73 75 72 65 20 69 74 20  77 69 6c 6c 20 6e 6f 74  |sure it will not|
00000850  0d 63 6f 72 72 75 70 74  20 74 68 65 20 53 61 76  |.corrupt the Sav|
00000860  65 20 50 72 6f 74 65 63  74 69 6f 6e 20 70 72 6f  |e Protection pro|
00000870  67 72 61 6d 2e 0d 20 20  20 20 20 20 20 52 65 6d  |gram..       Rem|
00000880  65 6d 62 65 72 20 61 6c  73 6f 2c 20 74 68 61 74  |ember also, that|
00000890  20 70 61 67 65 20 26 42  20 77 69 6c 6c 20 62 65  | page &B will be|
000008a0  20 63 6f 72 72 75 70 74  65 64 20 62 79 20 61 6e  | corrupted by an|
000008b0  79 20 2a 4b 45 59 20 63  6f 6d 6d 61 6e 64 73 2c  |y *KEY commands,|
000008c0  0d 61 6e 64 20 74 68 61  74 20 70 61 67 65 20 26  |.and that page &|
000008d0  43 20 77 69 6c 6c 20 62  65 20 63 6f 72 72 75 70  |C will be corrup|
000008e0  74 65 64 20 62 79 20 61  6e 79 20 56 44 55 20 32  |ted by any VDU 2|
000008f0  33 20 28 63 68 61 72 61  63 74 65 72 20 64 65 66  |3 (character def|
00000900  69 6e 69 74 69 6f 6e 29  0d 63 6f 6d 6d 61 6e 64  |inition).command|
00000910  73 2e 20 54 68 69 73 20  61 72 65 61 20 6f 66 20  |s. This area of |
00000920  6d 65 6d 6f 72 79 20 69  73 20 61 6c 73 6f 20 6c  |memory is also l|
00000930  69 6b 65 6c 79 20 74 6f  20 62 65 20 75 73 65 64  |ikely to be used|
00000940  20 62 79 20 61 6e 79 20  41 44 54 0d 63 6f 6d 6d  | by any ADT.comm|
00000950  61 6e 64 73 20 79 6f 75  20 75 73 65 2c 20 61 6e  |ands you use, an|
00000960  64 20 70 61 67 65 20 39  20 69 73 20 75 73 65 64  |d page 9 is used|
00000970  20 62 79 20 74 68 65 20  45 30 30 20 41 44 46 53  | by the E00 ADFS|
00000980  2e 20 54 6f 20 61 76 6f  69 64 20 61 6c 6c 20 74  |. To avoid all t|
00000990  68 65 73 65 0d 70 69 74  66 61 6c 6c 73 2c 20 69  |hese.pitfalls, i|
000009a0  74 20 69 73 20 70 72 6f  62 61 62 6c 79 20 62 65  |t is probably be|
000009b0  74 74 65 72 20 74 6f 20  72 65 64 75 63 65 20 74  |tter to reduce t|
000009c0  68 65 20 76 61 6c 75 65  20 6f 66 20 48 49 4d 45  |he value of HIME|
000009d0  4d 20 74 6f 20 28 73 61  79 29 0d 26 35 43 30 30  |M to (say).&5C00|
000009e0  20 61 6e 64 20 73 74 6f  72 65 20 74 68 65 20 63  | and store the c|
000009f0  6f 64 65 20 62 65 74 77  65 65 6e 20 48 49 4d 45  |ode between HIME|
00000a00  4d 20 61 6e 64 20 73 63  72 65 65 6e 20 6d 65 6d  |M and screen mem|
00000a10  6f 72 79 2e 20 54 68 69  73 20 77 69 6c 6c 20 6b  |ory. This will k|
00000a20  65 65 70 0d 74 68 65 20  63 6f 64 65 20 73 61 66  |eep.the code saf|
00000a30  65 20 75 6e 74 69 6c 20  74 68 65 20 4d 6f 64 65  |e until the Mode|
00000a40  20 69 73 20 6e 65 78 74  20 63 68 61 6e 67 65 64  | is next changed|
00000a50  2c 20 77 68 69 63 68 20  69 73 20 6e 6f 74 20 6f  |, which is not o|
00000a60  66 74 65 6e 20 69 66 20  79 6f 75 0d 61 72 65 20  |ften if you.are |
00000a70  74 79 70 69 6e 67 20 69  6e 20 6c 69 73 74 69 6e  |typing in listin|
00000a80  67 73 2c 20 65 74 63 2e  20 54 6f 20 73 74 6f 72  |gs, etc. To stor|
00000a90  65 20 74 68 65 20 63 6f  64 65 20 68 65 72 65 2c  |e the code here,|
00000aa0  20 79 6f 75 20 6d 75 73  74 20 72 65 6d 65 6d 62  | you must rememb|
00000ab0  65 72 20 74 6f 0d 63 68  61 6e 67 65 20 48 49 4d  |er to.change HIM|
00000ac0  45 4d 20 62 65 66 6f 72  65 20 61 73 73 65 6d 62  |EM before assemb|
00000ad0  6c 69 6e 67 20 74 68 65  20 73 6f 75 72 63 65 20  |ling the source |
00000ae0  63 6f 64 65 20 41 4e 44  20 62 65 66 6f 72 65 20  |code AND before |
00000af0  72 75 6e 6e 69 6e 67 20  74 68 65 20 63 6f 64 65  |running the code|
00000b00  0d 65 61 63 68 20 74 69  6d 65 20 79 6f 75 20 75  |.each time you u|
00000b10  73 65 20 69 74 2e 0d 20  20 20 20 20 20 20 45 76  |se it..       Ev|
00000b20  65 6e 20 62 65 74 74 65  72 20 77 6f 75 6c 64 20  |en better would |
00000b30  62 65 20 74 6f 20 73 74  6f 72 65 20 74 68 65 20  |be to store the |
00000b40  63 6f 64 65 20 70 65 72  6d 61 6e 65 6e 74 6c 79  |code permanently|
00000b50  20 69 6e 0d 62 61 74 74  65 72 79 2d 62 61 63 6b  | in.battery-back|
00000b60  65 64 20 52 41 4d 2c 20  61 73 20 61 20 73 65 72  |ed RAM, as a ser|
00000b70  76 69 63 65 20 52 4f 4d  2e 20 54 68 69 73 20 77  |vice ROM. This w|
00000b80  6f 75 6c 64 20 62 65 20  73 65 74 20 75 70 20 61  |ould be set up a|
00000b90  75 74 6f 6d 61 74 69 63  61 6c 6c 79 0d 65 76 65  |utomatically.eve|
00000ba0  72 79 20 74 69 6d 65 20  79 6f 75 20 73 77 69 74  |ry time you swit|
00000bb0  63 68 20 74 68 65 20 6d  61 63 68 69 6e 65 20 6f  |ch the machine o|
00000bc0  6e 2c 20 61 6e 64 20 77  6f 75 6c 64 20 62 65 20  |n, and would be |
00000bd0  61 6c 6d 6f 73 74 20 69  6d 6d 75 6e 65 20 74 6f  |almost immune to|
00000be0  0d 63 6f 72 72 75 70 74  69 6f 6e 20 62 79 20 6f  |.corruption by o|
00000bf0  74 68 65 72 20 70 72 6f  67 72 61 6d 73 2e 20 49  |ther programs. I|
00000c00  74 20 77 6f 75 6c 64 20  6e 65 65 64 20 74 6f 20  |t would need to |
00000c10  75 74 69 6c 69 73 65 20  74 68 65 20 65 78 74 65  |utilise the exte|
00000c20  6e 64 65 64 20 76 65 63  74 6f 72 0d 73 79 73 74  |nded vector.syst|
00000c30  65 6d 20 28 73 65 65 20  41 64 76 61 6e 63 65 64  |em (see Advanced|
00000c40  20 55 73 65 72 20 47 75  69 64 65 2c 20 70 61 67  | User Guide, pag|
00000c50  65 73 20 31 37 31 20 61  6e 64 20 31 38 39 29 2e  |es 171 and 189).|
00000c60  20 49 20 68 61 76 65 20  74 6f 20 61 64 6d 69 74  | I have to admit|
00000c70  20 74 68 61 74 0d 64 65  73 70 69 74 65 20 77 72  | that.despite wr|
00000c80  69 74 69 6e 67 20 74 68  65 20 70 72 6f 67 72 61  |iting the progra|
00000c90  6d 2c 20 49 20 68 61 76  65 20 6e 6f 20 69 6e 74  |m, I have no int|
00000ca0  65 6e 74 69 6f 6e 20 6f  66 20 75 73 69 6e 67 20  |ention of using |
00000cb0  69 74 20 6f 6e 20 61 20  72 65 67 75 6c 61 72 0d  |it on a regular.|
00000cc0  62 61 73 69 73 2e 20 49  20 68 61 76 65 20 61 6c  |basis. I have al|
00000cd0  72 65 61 64 79 20 67 6f  74 20 69 6e 74 6f 20 74  |ready got into t|
00000ce0  68 65 20 68 61 62 69 74  20 6f 66 20 6c 6f 63 6b  |he habit of lock|
00000cf0  69 6e 67 20 61 6c 6c 20  70 72 6f 67 72 61 6d 73  |ing all programs|
00000d00  0d 74 68 61 74 20 61 72  65 20 6f 66 20 61 6e 79  |.that are of any|
00000d10  20 76 61 6c 75 65 20 77  68 65 6e 20 49 20 61 6d  | value when I am|
00000d20  20 6e 6f 74 20 77 6f 72  6b 69 6e 67 20 6f 6e 20  | not working on |
00000d30  74 68 65 6d 2c 20 61 6e  64 20 69 6e 20 61 6e 79  |them, and in any|
00000d40  20 63 61 73 65 2c 20 69  66 20 49 0d 77 61 73 20  | case, if I.was |
00000d50  69 6e 20 61 20 73 75 66  66 69 63 69 65 6e 74 6c  |in a sufficientl|
00000d60  79 20 61 62 73 65 6e 74  2d 6d 69 6e 64 65 64 20  |y absent-minded |
00000d70  6d 6f 6f 64 20 74 6f 20  6f 76 65 72 77 72 69 74  |mood to overwrit|
00000d80  65 20 61 20 66 69 6c 65  20 62 79 20 6d 69 73 74  |e a file by mist|
00000d90  61 6b 65 2c 0d 49 20 77  6f 75 6c 64 20 70 72 6f  |ake,.I would pro|
00000da0  62 61 62 6c 79 20 68 61  76 65 20 66 6f 72 67 6f  |bably have forgo|
00000db0  74 74 65 6e 20 74 6f 20  6c 6f 61 64 20 74 68 65  |tten to load the|
00000dc0  20 70 72 6f 74 65 63 74  69 6f 6e 20 70 72 6f 67  | protection prog|
00000dd0  72 61 6d 20 61 73 20 77  65 6c 6c 21 0d 48 6f 77  |ram as well!.How|
00000de0  65 76 65 72 2c 20 69 66  20 74 68 65 20 70 72 6f  |ever, if the pro|
00000df0  67 72 61 6d 20 63 6f 75  6c 64 20 62 65 20 6d 61  |gram could be ma|
00000e00  64 65 20 74 6f 20 77 6f  72 6b 20 70 65 72 6d 61  |de to work perma|
00000e10  6e 65 6e 74 6c 79 20 69  6e 20 73 69 64 65 77 61  |nently in sidewa|
00000e20  79 73 20 52 41 4d 2c 0d  69 74 20 77 6f 75 6c 64  |ys RAM,.it would|
00000e30  20 62 65 20 66 61 72 20  6d 6f 72 65 20 75 73 65  | be far more use|
00000e40  66 75 6c 2e 20 49 20 77  69 6c 6c 20 69 6e 76 65  |ful. I will inve|
00000e50  73 74 69 67 61 74 65 20  74 68 69 73 20 70 6f 73  |stigate this pos|
00000e60  73 69 62 69 6c 69 74 79  0d 66 75 72 74 68 65 72  |sibility.further|
00000e70  2e 2e 2e 20 0d 20 20 20  20 20 20 20 4e 6f 74 65  |... .       Note|
00000e80  20 74 68 61 74 20 77 68  65 6e 20 74 68 65 20 70  | that when the p|
00000e90  72 6f 67 72 61 6d 20 61  73 6b 73 20 77 68 65 74  |rogram asks whet|
00000ea0  68 65 72 20 61 20 66 69  6c 65 20 73 68 6f 75 6c  |her a file shoul|
00000eb0  64 20 62 65 0d 6f 76 65  72 77 72 69 74 74 65 6e  |d be.overwritten|
00000ec0  2c 20 79 6f 75 20 6d 75  73 74 20 61 6e 73 77 65  |, you must answe|
00000ed0  72 20 77 69 74 68 20 74  68 65 20 77 6f 72 64 20  |r with the word |
00000ee0  22 59 45 53 22 20 28 75  70 70 65 72 20 6f 72 20  |"YES" (upper or |
00000ef0  6c 6f 77 65 72 20 63 61  73 65 29 20 69 6e 0d 66  |lower case) in.f|
00000f00  75 6c 6c 20 2d 20 61 6e  79 20 6f 74 68 65 72 20  |ull - any other |
00000f10  6b 65 79 20 77 69 6c 6c  20 67 69 76 65 20 74 68  |key will give th|
00000f20  65 20 65 72 72 6f 72 20  6d 65 73 73 61 67 65 20  |e error message |
00000f30  22 41 62 6f 72 74 65 64  22 2e 20 54 68 69 73 20  |"Aborted". This |
00000f40  69 73 20 74 68 65 0d 73  74 61 6e 64 61 72 64 20  |is the.standard |
00000f50  70 72 6f 63 65 64 75 72  65 20 75 73 65 64 20 62  |procedure used b|
00000f60  79 20 74 68 65 20 41 44  46 53 20 77 68 65 6e 20  |y the ADFS when |
00000f70  61 73 6b 69 6e 67 20 66  6f 72 20 63 6f 6e 66 69  |asking for confi|
00000f80  72 6d 61 74 69 6f 6e 20  66 6f 72 20 74 68 65 0d  |rmation for the.|
00000f90  2a 44 45 53 54 52 4f 59  20 63 6f 6d 6d 61 6e 64  |*DESTROY command|
00000fa0  2e 20 52 65 6d 65 6d 62  65 72 20 74 68 61 74 20  |. Remember that |
00000fb0  74 68 65 20 22 41 62 6f  72 74 65 64 22 20 65 72  |the "Aborted" er|
00000fc0  72 6f 72 20 6d 61 79 20  63 61 75 73 65 20 61 20  |ror may cause a |
00000fd0  42 41 53 49 43 0d 70 72  6f 67 72 61 6d 20 74 6f  |BASIC.program to|
00000fe0  20 73 74 6f 70 20 69 66  20 69 74 20 68 61 73 20  | stop if it has |
00000ff0  69 6e 61 64 65 71 75 61  74 65 20 65 72 72 6f 72  |inadequate error|
00001000  20 74 72 61 70 70 69 6e  67 2e 20 48 6f 77 65 76  | trapping. Howev|
00001010  65 72 2c 20 69 74 20 69  73 20 61 6c 77 61 79 73  |er, it is always|
00001020  0d 75 6e 77 69 73 65 20  74 6f 20 75 73 65 20 74  |.unwise to use t|
00001030  68 65 20 70 72 6f 74 65  63 74 69 6f 6e 20 70 72  |he protection pr|
00001040  6f 67 72 61 6d 20 66 72  6f 6d 20 69 6e 73 69 64  |ogram from insid|
00001050  65 20 61 6e 6f 74 68 65  72 20 70 72 6f 67 72 61  |e another progra|
00001060  6d 2c 20 69 6e 20 63 61  73 65 0d 6f 66 20 63 6f  |m, in case.of co|
00001070  72 72 75 70 74 69 6e 67  20 74 68 65 20 63 6f 64  |rrupting the cod|
00001080  65 2c 20 73 6f 20 74 68  69 73 20 73 68 6f 75 6c  |e, so this shoul|
00001090  64 20 6e 6f 74 20 62 65  20 61 20 6d 61 6a 6f 72  |d not be a major|
000010a0  20 70 72 6f 62 6c 65 6d  2e 0d 20 20 20 20 20 20  | problem..      |
000010b0  20 41 73 20 77 69 74 68  20 52 6f 73 73 20 4c 69  | As with Ross Li|
000010c0  74 74 6c 65 27 73 20 70  72 6f 67 72 61 6d 20 49  |ttle's program I|
000010d0  20 68 61 76 65 20 69 6e  63 6c 75 64 65 64 20 61  | have included a|
000010e0  20 63 68 65 63 6b 20 74  6f 20 6d 61 6b 65 20 73  | check to make s|
000010f0  75 72 65 0d 74 68 61 74  20 74 68 65 20 73 65 74  |ure.that the set|
00001100  75 70 20 72 6f 75 74 69  6e 65 20 69 73 20 6e 6f  |up routine is no|
00001110  74 20 65 78 65 63 75 74  65 64 20 74 77 69 63 65  |t executed twice|
00001120  2c 20 74 68 6f 75 67 68  20 79 6f 75 20 77 69 6c  |, though you wil|
00001130  6c 20 73 74 69 6c 6c 20  72 75 6e 0d 69 6e 74 6f  |l still run.into|
00001140  20 74 72 6f 75 62 6c 65  20 69 66 20 79 6f 75 20  | trouble if you |
00001150  72 75 6e 20 61 20 73 65  63 6f 6e 64 20 63 6f 70  |run a second cop|
00001160  79 20 77 68 69 63 68 20  77 61 73 20 61 73 65 6d  |y which was asem|
00001170  62 6c 65 64 20 61 74 20  61 20 64 69 66 66 65 72  |bled at a differ|
00001180  65 6e 74 0d 61 64 64 72  65 73 73 2e 20 49 66 20  |ent.address. If |
00001190  74 68 65 20 63 6f 64 65  20 62 65 63 6f 6d 65 73  |the code becomes|
000011a0  20 63 6f 72 72 75 70 74  65 64 20 66 6f 72 20 61  | corrupted for a|
000011b0  6e 79 20 72 65 61 73 6f  6e 2c 20 70 72 65 73 73  |ny reason, press|
000011c0  20 43 54 52 4c 2d 42 52  45 41 4b 2c 0d 73 61 76  | CTRL-BREAK,.sav|
000011d0  65 20 79 6f 75 72 20 77  6f 72 6b 20 69 66 20 69  |e your work if i|
000011e0  74 20 69 73 20 73 74 69  6c 6c 20 69 6e 74 61 63  |t is still intac|
000011f0  74 2c 20 74 68 65 6e 20  72 65 2d 69 6e 73 74 61  |t, then re-insta|
00001200  6c 6c 20 74 68 65 20 70  72 6f 74 65 63 74 69 6f  |ll the protectio|
00001210  6e 0d 70 72 6f 67 72 61  6d 2e 20 52 6f 73 73 20  |n.program. Ross |
00001220  4c 69 74 74 6c 65 20 6d  65 6e 74 69 6f 6e 65 64  |Little mentioned|
00001230  20 69 6e 20 45 55 47 32  30 20 74 68 61 74 20 74  | in EUG20 that t|
00001240  68 69 73 20 66 65 61 74  75 72 65 20 64 69 64 20  |his feature did |
00001250  6e 6f 74 20 77 6f 72 6b  0d 70 72 6f 70 65 72 6c  |not work.properl|
00001260  79 20 69 6e 20 68 69 73  20 44 46 53 20 76 65 72  |y in his DFS ver|
00001270  73 69 6f 6e 20 6f 66 20  74 68 65 20 70 72 6f 67  |sion of the prog|
00001280  72 61 6d 2e 20 54 68 65  20 70 72 6f 62 6c 65 6d  |ram. The problem|
00001290  20 77 61 73 20 74 68 61  74 20 74 68 65 0d 63 6f  | was that the.co|
000012a0  6e 74 65 6e 74 73 20 6f  66 20 74 68 65 20 4f 53  |ntents of the OS|
000012b0  46 49 4c 45 20 76 65 63  74 6f 72 20 77 65 72 65  |FILE vector were|
000012c0  20 63 6f 70 69 65 64 20  69 6e 74 6f 20 74 68 65  | copied into the|
000012d0  20 22 72 65 74 75 72 6e  22 20 76 65 63 74 6f 72  | "return" vector|
000012e0  20 28 75 73 65 64 0d 74  6f 20 63 61 72 72 79 20  | (used.to carry |
000012f0  6f 75 74 20 74 68 65 20  4f 53 46 49 4c 45 20 63  |out the OSFILE c|
00001300  61 6c 6c 20 61 74 20 74  68 65 20 65 6e 64 20 6f  |all at the end o|
00001310  66 20 74 68 65 20 72 6f  75 74 69 6e 65 29 2c 20  |f the routine), |
00001320  62 65 66 6f 72 65 20 74  68 65 20 63 68 65 63 6b  |before the check|
00001330  0d 77 61 73 20 6d 61 64  65 20 74 6f 20 66 69 6e  |.was made to fin|
00001340  64 20 6f 75 74 20 69 66  20 74 68 65 20 70 72 6f  |d out if the pro|
00001350  67 72 61 6d 20 68 61 64  20 61 6c 72 65 61 64 79  |gram had already|
00001360  20 62 65 65 6e 20 69 6e  73 74 61 6c 6c 65 64 2e  | been installed.|
00001370  20 54 68 69 73 20 6d 65  61 6e 73 0d 74 68 61 74  | This means.that|
00001380  20 61 66 74 65 72 20 74  68 65 20 70 72 6f 67 72  | after the progr|
00001390  61 6d 20 69 73 20 72 75  6e 20 74 68 65 20 73 65  |am is run the se|
000013a0  63 6f 6e 64 20 74 69 6d  65 2c 20 62 6f 74 68 20  |cond time, both |
000013b0  74 68 65 20 72 65 61 6c  20 76 65 63 74 6f 72 20  |the real vector |
000013c0  61 6e 64 0d 74 68 65 20  72 65 74 75 72 6e 20 76  |and.the return v|
000013d0  65 63 74 6f 72 20 70 6f  69 6e 74 20 74 6f 20 74  |ector point to t|
000013e0  68 65 20 73 74 61 72 74  20 6f 66 20 74 68 65 20  |he start of the |
000013f0  50 72 6f 74 65 63 74 69  6f 6e 20 70 72 6f 67 72  |Protection progr|
00001400  61 6d 2e 20 54 68 69 73  0d 65 78 70 6c 61 69 6e  |am. This.explain|
00001410  73 20 77 68 79 20 69 74  20 65 6e 74 65 72 73 20  |s why it enters |
00001420  61 6e 20 65 6e 64 6c 65  73 73 20 6c 6f 6f 70 20  |an endless loop |
00001430  77 68 65 6e 20 72 75 6e  2e 20 54 68 65 20 73 6f  |when run. The so|
00001440  6c 75 74 69 6f 6e 20 6f  66 20 63 6f 75 72 73 65  |lution of course|
00001450  2c 0d 69 73 20 74 6f 20  73 77 61 70 20 61 72 6f  |,.is to swap aro|
00001460  75 6e 64 20 74 68 65 20  66 69 72 73 74 20 66 65  |und the first fe|
00001470  77 20 6c 69 6e 65 73 20  6f 66 20 74 68 65 20 63  |w lines of the c|
00001480  6f 64 65 2c 20 73 6f 20  74 68 65 20 63 68 65 63  |ode, so the chec|
00001490  6b 20 69 73 20 6d 61 64  65 0d 62 65 66 6f 72 65  |k is made.before|
000014a0  20 61 6e 79 20 63 68 61  6e 67 65 73 20 61 72 65  | any changes are|
000014b0  20 6d 61 64 65 3a 0d 20  20 20 20 20 20 20 20 20  | made:.         |
000014c0  20 20 20 20 20 20 31 36  30 2e 69 6e 69 74 20 20  |      160.init  |
000014d0  4c 44 41 66 69 6c 65 76  2b 31 0d 20 20 20 20 20  |LDAfilev+1.     |
000014e0  20 20 20 20 20 20 20 20  20 20 31 37 30 20 20 20  |          170   |
000014f0  20 20 20 20 43 4d 50 23  6e 65 77 76 20 44 49 56  |    CMP#newv DIV|
00001500  20 32 35 36 0d 20 20 20  20 20 20 20 20 20 20 20  | 256.           |
00001510  20 20 20 20 31 38 30 20  20 20 20 20 20 20 42 45  |    180       BE|
00001520  51 65 6e 64 20 20 0d 20  20 20 20 20 20 20 20 20  |Qend  .         |
00001530  20 20 20 20 20 20 31 39  30 20 20 20 20 20 20 20  |      190       |
00001540  53 54 41 72 65 74 76 2b  31 0d 20 20 20 20 20 20  |STAretv+1.      |
00001550  20 20 20 20 20 20 20 20  20 32 30 30 20 20 20 20  |         200    |
00001560  20 20 20 4c 44 41 66 69  6c 65 76 0d 20 20 20 20  |   LDAfilev.    |
00001570  20 20 20 20 20 20 20 20  20 20 20 32 31 30 20 20  |           210  |
00001580  20 20 20 20 20 53 54 41  72 65 74 76 0d 20 20 20  |     STAretv.   |
00001590  20 20 20 20 20 20 20 20  20 20 65 74 63 2e 2e 2e  |          etc...|
000015a0  2e 0d 20 20 20 20 20 20  20 48 6f 77 65 76 65 72  |..       However|
000015b0  2c 20 74 68 69 73 20 69  73 20 6e 6f 74 20 74 68  |, this is not th|
000015c0  65 20 65 6e 64 20 6f 66  20 74 68 65 20 73 74 6f  |e end of the sto|
000015d0  72 79 2c 20 62 65 63 61  75 73 65 20 69 66 20 74  |ry, because if t|
000015e0  68 65 20 53 41 46 45 0d  70 72 6f 67 72 61 6d 20  |he SAFE.program |
000015f0  68 61 73 20 62 65 65 6e  20 72 75 6e 20 61 20 73  |has been run a s|
00001600  65 63 6f 6e 64 20 74 69  6d 65 20 75 73 69 6e 67  |econd time using|
00001610  20 2a 53 41 46 45 20 28  61 73 20 6f 70 70 6f 73  | *SAFE (as oppos|
00001620  65 64 20 74 6f 20 43 41  4c 4c 26 39 30 30 29 2c  |ed to CALL&900),|
00001630  0d 74 68 65 20 72 65 74  75 72 6e 20 76 65 63 74  |.the return vect|
00001640  6f 72 73 20 77 69 6c 6c  20 68 61 76 65 20 62 65  |ors will have be|
00001650  65 6e 20 6f 76 65 72 77  72 69 74 74 65 6e 20 77  |en overwritten w|
00001660  69 74 68 20 7a 65 72 6f  73 2c 20 61 6e 64 20 74  |ith zeros, and t|
00001670  68 65 20 6f 72 69 67 69  6e 61 6c 0d 63 6f 6e 74  |he original.cont|
00001680  65 6e 74 73 20 6f 66 20  74 68 65 20 76 65 63 74  |ents of the vect|
00001690  6f 72 73 20 6c 6f 73 74  2e 20 54 68 65 79 20 63  |ors lost. They c|
000016a0  61 6e 6e 6f 74 20 62 65  20 72 65 73 74 6f 72 65  |annot be restore|
000016b0  64 20 75 73 69 6e 67 20  74 68 65 20 64 65 66 61  |d using the defa|
000016c0  75 6c 74 0d 76 65 63 74  6f 72 20 74 61 62 6c 65  |ult.vector table|
000016d0  20 69 6e 20 74 68 65 20  4f 53 20 52 4f 4d 2c 20  | in the OS ROM, |
000016e0  73 69 6e 63 65 20 74 68  69 73 20 77 69 6c 6c 20  |since this will |
000016f0  70 6f 69 6e 74 20 74 6f  20 74 68 65 20 74 61 70  |point to the tap|
00001700  65 20 66 69 6c 69 6e 67  0d 73 79 73 74 65 6d 2e  |e filing.system.|
00001710  20 54 68 65 20 73 6f 6c  75 74 69 6f 6e 20 68 65  | The solution he|
00001720  72 65 20 69 73 20 74 6f  20 70 75 74 20 74 68 65  |re is to put the|
00001730  20 72 65 74 75 72 6e 20  76 65 63 74 6f 72 73 20  | return vectors |
00001740  61 74 20 74 68 65 20 65  6e 64 20 6f 66 20 74 68  |at the end of th|
00001750  65 0d 70 72 6f 67 72 61  6d 2c 20 61 6e 64 20 6e  |e.program, and n|
00001760  6f 74 20 74 6f 20 69 6e  63 6c 75 64 65 20 74 68  |ot to include th|
00001770  65 6d 20 69 6e 20 74 68  65 20 73 61 76 65 64 20  |em in the saved |
00001780  66 69 6c 65 2e 20 54 68  69 73 20 6d 65 61 6e 73  |file. This means|
00001790  20 74 68 61 74 20 74 68  65 79 0d 77 69 6c 6c 20  | that they.will |
000017a0  6e 6f 74 20 62 65 20 6f  76 65 72 77 72 69 74 74  |not be overwritt|
000017b0  65 6e 20 77 68 65 6e 20  74 68 65 20 53 41 46 45  |en when the SAFE|
000017c0  20 70 72 6f 67 72 61 6d  20 69 73 20 72 65 2d 6c  | program is re-l|
000017d0  6f 61 64 65 64 2e 20 54  68 69 73 20 69 73 20 68  |oaded. This is h|
000017e0  6f 77 20 49 0d 61 76 6f  69 64 65 64 20 74 68 65  |ow I.avoided the|
000017f0  20 70 72 6f 62 6c 65 6d  20 69 6e 20 6d 79 20 70  | problem in my p|
00001800  72 6f 67 72 61 6d 2e 0d  20 20 20 20 20 20 20 4d  |rogram..       M|
00001810  79 20 70 72 6f 67 72 61  6d 20 69 73 20 64 65 73  |y program is des|
00001820  69 67 6e 65 64 20 74 6f  20 77 6f 72 6b 20 6f 6e  |igned to work on|
00001830  20 62 6f 74 68 20 41 44  46 53 20 61 6e 64 20 44  | both ADFS and D|
00001840  46 53 2c 20 73 69 6e 63  65 20 69 74 20 6f 6e 6c  |FS, since it onl|
00001850  79 0d 75 73 65 73 20 22  6c 65 67 61 6c 22 20 6f  |y.uses "legal" o|
00001860  70 65 72 61 74 69 6e 67  20 73 79 73 74 65 6d 20  |perating system |
00001870  63 61 6c 6c 73 2c 20 77  68 69 63 68 20 61 72 65  |calls, which are|
00001880  20 63 6f 6d 6d 6f 6e 20  74 6f 20 62 6f 74 68 2e  | common to both.|
00001890  20 48 6f 77 65 76 65 72  2c 20 49 0d 64 6f 20 6e  | However, I.do n|
000018a0  6f 74 20 68 61 76 65 20  61 20 44 46 53 20 52 4f  |ot have a DFS RO|
000018b0  4d 20 74 6f 20 74 65 73  74 20 74 68 69 73 2c 20  |M to test this, |
000018c0  73 6f 20 49 20 77 6f 75  6c 64 20 62 65 20 69 6e  |so I would be in|
000018d0  74 65 72 65 73 74 65 64  20 74 6f 20 68 65 61 72  |terested to hear|
000018e0  20 69 66 20 69 74 0d 69  73 20 6e 6f 74 20 63 6f  | if it.is not co|
000018f0  6d 70 61 74 69 62 6c 65  2c 20 6f 72 20 69 66 20  |mpatible, or if |
00001900  74 68 65 72 65 20 61 72  65 20 61 6e 79 20 62 75  |there are any bu|
00001910  67 73 2e 0d 20 20 20 20  20 20 20 20 20 20 20 20  |gs..            |
00001920  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
*
00001940  20 20 20 20 20 20 4d 61  74 74 68 65 77 20 46 6f  |      Matthew Fo|
00001950  72 64 0d                                          |rd.|
00001953
SaveProt/text.m0
SaveProt/text.m1
SaveProt/text.m2
SaveProt/text.m4
SaveProt/text.m5