8.7. Search and replace string
Length: 85
Number of variables: 3
Checksum: 8518
Purpose: The program searches
character string in the BASIC program and makes the replacement
of each found string thong to the next line the same length.
Variables:
Name: old data start
Length: 2
Cell: 23296
Comment: The address of the first
byte replacement string.
Name: string length
Length: 1
Cell: 23298
Comment: The length of the replacement string.
Name: new data start
Length: 2
Cell: 23299
Comment: The address of the first
byte replacement string.
Subroutine call:
RANDOMIZE USR address
Error control: if the length
line is 0 or BASIC program in memory is not, then the procedure
returns immediately in BASIC.
Comment: time
This program depends on the length
line and the length of the BASIC program.
LISTING machine code
Assembly label number to VVODA147.
LD IX, (23296) 221 42 0 91
LD HL, (23635) 42 83 92
LD A, (23 298) 58 February 1991
LD E, A 95
CP 0254 0
RET Z 200
DEC HL 1943
NEWLIN INC HL 35
INC HL 35
INC HL 35
INC HL 35
JR RESET 24 23
CHECK INC HL 35
PUSH DE 213
LD DE, (23627) 237 91 75 92
AND A 167
SBC HL, DE 237 82
ADD HL, DE 25
POP DE 209
RET NC 208
LD A, (HL) 126
CP 13254 1913
JR Z, NEWLIN 40233
CALL 6326 205 182 1924
JR NZ, COMPAR 32 8
DEC HL 1943
RESET PUSH IX 221229
POP BC 193
LD D, 0 22 0
JR CHECK 24226
COMPAR LD A, (BC) 10
CP (HL) 190
JR NZ, RESET 32 245
INC BC 3
INC D 20
LD A, L 122
CP E 187
JR NZ, CHECK 32216
PUSH HL 229
LD D, 0 22 0
AND A 167
SBC HL, DE 237 82
LD D, E 83
LD BC, (23299) 237 75 March 1991
INC D 20
NEXT_CHINC HL 1935
DEC D 21
JR Z, FINISH 40 5
LD A, (BC) 10
LD (HL), A 119
INC BC 3
JR NEXT_C 24247
FINISH POP HL 225
JR RESET 24 215
2
How it works:
In IX load address of the replacement string. This value
should be higher RAMTOP. In HL load address of the beginning of
program area, and the battery loaded length of the string is
copied to the E-register for further use in
program. If the string
is equal to 0, the program returns
in BASIC.
Fits HL, indicating
at the next byte pointer BASIC-line, and done
transition to the RESET.
The procedure CHECK HL increases, pointing to the next
symbol. DE stored in the stack and
loads the address of the variables. If HL is not less than
DE, program end is reached, and
after the restoration of DE from the stack the program returns
to BASIC.
In the battery symbol is loaded at the address in HL. If this
value is a sign of ENTER,
the program returns to NEWLIN.
If the battery does not contain
sign of NUMBER (character 14), made the transition to COMPAR,
otherwise HL increases by 5, so that the HL
indicates the fifth byte of the found.
The procedure for the RESET BC loaded the address for search
strings. Register D is set to 0
to store the number of characters per line, found to
time. The program then returns to the CHECK.
In the procedure COMPARE in the battery loaded character of
the string pointed to a pair of registers, BC. If this value
differs from the byte at the address in HL, program jumps to
the RESET. BC increases, pointing to the next character in the
string register D, the counter increases. If
This value is not equal to the length
line, the program returns to
CHECK.
If the string is found, HL stored on the stack, so the
program starts searching for the next case from this address.
In DE load string length and this
value is subtracted from HL, giving meaning to one less
than the starting address. Length of the string and then loaded
into the D to use it as a counter. In BC loads the starting
address of the replacement string, and register D is increased.
Register HL increases, pointing to the next cell and the
counter decreases.
If the counter is 0, HL recovered from the stack and made the
transition to the RESET for the next case. In battery loaded
symbol, which indicates BC, and this value is placed in a cell
at a HL. BC increases, indicating
the next character, and the program returns to NEXT_CHAR.