LINE RENUMBER

by Kenneth Baker

from ZX Computing April 1987





A programming utility from Kenneth Baker.





A good Line Renumber program is, without doubt, one of the most useful

programs that anyone could wish to add to their collection. However, the

problem with most utilities is that they demand a fixed position in

memory, and usually require a small BASIC program to operate them. This

is not the case with this program - because it can be loaded to any

convenient position in memory at any time: it also contains routines to

tell itself where it is located in memory, and to renumber its own

variables accordingly. It also has its own input routines, dispensing

with the need for a BASIC control program.



The routines in the main part of the program have been designed to cater

for every imaginable situation: all forms of GOTO, GOSUB, RUN, RESTORE

and SAVE ... LINE statements can be renumbered (including microdrive),

even when in complex conditional form.



Add to this the data for various captions, and the original renumber

routine, which is a mere thirty-three bytes in length, grows into a

somewhat larger 1140 bytes!



[The next three paragraphs are supposed to describe the hex loader program]

[but, as they bear no relation to the actual hex loader printed in the    ]

[magazine, I haven't bothered to include them.                        JimG]



You can now experiment with the program by renumbering the HEX LOADER

program. Use RANDOMIZE USR 60000 (or whatever address you have chosen)

and, if everything is in order, a prompt will appear in the lower part

of the screen requesting you to: ENTER STARTING LINE, STEP SIZE



This requires you to enter two values separated by a comma, followed by

ENTER. The values entered must be such that the STEP SIZE is not greater

than the STARTING LINE, although the two can be equal. Otherwise you can

enter any values you like - 1,1 - 999,99 - 9000,2 etc. If you type in

rubbish, illegal values, or ENTER with no values at all, the system will

automatically use the values 10,10.



Directly the renumbering process has been completed (in a fraction of a

second with an average program) the program title will appear on the

screen, where it will remain until a key is pressed. The only

restrictions concerning the use of the program are that the first line

of a program to be renumbered must contain a REM statement, and

corresponding addresses must exist for any commands involving line

numbers: a statement like GOTO 100 would be ignored if Line 100 does not

exist.



Normally, assuming that the program is safely stored on cassette, it can

be loaded to any position in memory by using the following sequence:



1. Choose a suitable address.

2. CLEAR address.

3. LOAD "" CODE address.

4. Make sure that first line of program is a REM.

5. RANDOMIZE USR address.

6. ENTER STARTING LINE, STEP SIZE



Machine code buffs will detect instantly that the same address has been

used for all three commands: this is permissible in this case because

the first instruction In the program has the same code as the RAMTOP

marker, LD A,N. RAMTOP can of course be set at any address you desire,

provided that it is somewhere below the [address] concerned.





Display file



It was mentioned earlier that this program could be entered anywhere -

it can also be stored in the Display File (at address 19000) in cases

where renumbering is an afterthought, or where you only intend to use

the program once. You will not need to use the CLEAR command with this

method, but you must use CLS first, so try:



CLS

LOAD "" CODE 19000

RANDOMIZE USR 19000



and the program will execute in the normal way. You will have to reload

the program each time you use this method, as the program will vanish

directly you enter a command, but the method does have many advantages -

principally that, because CLEAR is not used, all of the variables are

left intact, and you are not left with the unwanted renumber program in

the computer once it has performed its brief task.



If you do ever wish to remove the code from the computer, the following

command is suggested:



FOR n=address TO address+1140: POKE n,0: NEXT n





--

Another Fine Product transcribed by:

Jim Grimwood, Weardale, England (http://www.users.globalnet.co.uk/~jimg/)

--

