Add multiple argument support and make list ignore non-existent lines

This commit is contained in:
CrazyEttin 2022-08-14 15:06:59 +03:00
parent d78deb4616
commit 1c2c501d09
2 changed files with 121 additions and 27 deletions

View File

@ -34,11 +34,7 @@ cmdp: load r0, prompt
store arg2, r0
store arg2 + 1, r0
;Temporary
load r0, const1
store count, r0
;Parse the command and its argument if any
;Parse the command and its first argument
;Command
load r0, buffer
store cmd, r0
@ -53,24 +49,48 @@ cmdp: load r0, prompt
load r3, const1
store argf1, r3
breq r0, r2, hsharg
load r3, arg1d2 + 1
store arg2d1 + 1, r3
load r3, arg1d2 + 2
store arg2d1 + 2, r3
load r3, comma
breq r0, r3, 2ndarg
store arg1 + 3, r0
;Second digit
load r0, buffer + 2
arg1d2: load r0, buffer + 2
breq r0, r1, getarg
load r3, arg1d3 + 1
store arg2d1 + 1, r3
load r3, arg1d3 + 2
store arg2d1 + 2, r3
load r3, comma
breq r0, r3, 2ndarg
load r2, arg1 + 3
store arg1 + 2, r2
store arg1 + 3, r0
;Third digit
load r0, buffer + 3
arg1d3: load r0, buffer + 3
breq r0, r1, getarg
load r3, arg1d4 + 1
store arg2d1 + 1, r3
load r3, arg1d4 + 2
store arg2d1 + 2, r3
load r3, comma
breq r0, r3, 2ndarg
load r2, arg1 + 2
store arg1 + 1, r2
load r2, arg1 + 3
store arg1 + 2, r2
store arg1 + 3, r0
;Fourth digit
load r0, buffer + 4
arg1d4: load r0, buffer + 4
breq r0, r1, getarg
load r3, arg1d5 + 1
store arg2d1 + 1, r3
load r3, arg1d5 + 2
store arg2d1 + 2, r3
load r3, comma
breq r0, r3, 2ndarg
load r2, arg1 + 1
store arg1, r2
load r2, arg1 + 2
@ -79,7 +99,44 @@ cmdp: load r0, prompt
store arg1 + 2, r2
store arg1 + 3, r0
;Check for command end
load r0, buffer + 5
load r0, arg1d5 + 1
load r1, arg1d5 + 2
cleq r0, r0, incdw
store arg2d1 + 1, r0
store arg2d1 + 2, r1
load r1, cr
arg1d5: load r0, buffer + 5
breq r0, r1, getarg
load r3, comma
breq r0, r3, 2ndarg
breq r0, r0, cmderr
;Parse the second argument
;Set the addresses
2ndarg: load r0, arg2d1 + 1
load r1, arg2d1 + 2
cleq r0, r0, incdw
store arg2d2 + 1, r0
store arg2d2 + 2, r1
cleq r0, r0, incdw
store arg2d3 + 1, r0
store arg2d3 + 2, r1
;Load carriage return
load r1, cr
;First digit
arg2d1: load r0, 0
breq r0, r1, chkcmd
load r3, const1
store argf2, r3
store arg2 + 1, r0
;Second digit
arg2d2: load r0, 0
breq r0, r1, getarg
load r2, arg2 + 1
store arg2, r2
store arg2 + 1, r0
;Check for command end
arg2d3: load r0, 0
breq r0, r1, getarg
breq r0, r0, cmderr
@ -134,6 +191,27 @@ getarg: load r0, arg1
or r0, r2
store line + 1, r0
;Get the value of the second argument
;First digit
load r0, arg2
cleq r0, r0, hex2n
load r1, qmark
breq r0, r1, cmderr
xor r2, r2
xor r2, r0
shl r2
shl r2
shl r2
shl r2
;Second digit
load r0, arg2 + 1
cleq r0, r0, hex2n
load r1, qmark
breq r0, r1, cmderr
;Combine and store the first and second digits
or r0, r2
store count, r0
;Check for commands
;Load the command
chkcmd: load r0, cmd
@ -141,11 +219,10 @@ chkcmd: load r0, cmd
load r2, argf1
xor r3, r3
breq r2, r3, cnarg
;Insert
load r1, uci
breq r0, r1, insln
load r1, lci
breq r0, r1, insln
;Check for single argument
load r2, argf2
xor r3, r3
breq r2, r3, onearg
;Delete
load r1, ucd
breq r0, r1, delete
@ -158,6 +235,13 @@ chkcmd: load r0, cmd
breq r0, r1, list
;Branch to error
breq r0, r0, cmderr
;Insert
onearg: load r1, uci
breq r0, r1, insln
load r1, lci
breq r0, r1, insln
;Branch to error
breq r0, r0, cmderr
;Print
cnarg: load r1, ucp
breq r0, r1, print
@ -368,16 +452,16 @@ delete: xor r0, r0
;High byte
load r0, sublod + 1
store stomov + 1, r0
store chsend + 1, r0
store dchend + 1, r0
;Low byte
load r0, sublod + 2
store stomov + 2, r0
store chsend + 2, r0
store dchend + 2, r0
;Check for the save end
chsend: load r0, 0
dchend: load r0, 0
load r1, sub
breq r0, r1, delend
breq r0, r1, cmdp
;Increment the line number
;Load the number
@ -458,16 +542,23 @@ list: xor r0, r0
;Find the argument line in the save and store its number
cleq r0, r0, fend
;Print a line number prompt
cleq r0, r0, prnln
;Get the save address of the line
;High byte
load r0, sublod + 1
store chlist + 1, r0
store lchend + 1, r0
;Low byte
load r0, sublod + 2
store chlist + 2, r0
store lchend + 2, r0
;Check for the save end
lchend: load r0, 0
load r1, sub
breq r0, r1, cmdp
;Print a line number prompt
cleq r0, r0, prnln
;Load a character from the save
chlist: load r1, 0

View File

@ -17,14 +17,17 @@ differs from this you may have to modify the code yourself.
Usage
-----
The commands are individual letters that depending on the command can be
followed by an argument. The argument can be either a hexadecimal line
number between 0 and FFFF or a hash (#), a shortcut for line FFFF. An
argument to a non-existent line will be interpreted as referring to the
line number after the last line.
The commands are individual letters that can be followed by one or two
arguments separated by a comma. The first argument is a target line
number between 0 and FFFF and the second the range of lines between 0
and FF the command affects. Inserting lines to a target that does not
exist or the shortcut hash (#) appends them to the text; otherwise
targets or parts of ranges that do not exist are ignored.
Commands with an argument:
Commands with a single argument:
* I: Insert a line or lines
Commands with two arguments:
* D: Delete a line
* L: List a line