src/cmd/cat.s: More comments added, but still more to add.

This commit is contained in:
Warren Toomey
2016-02-27 15:30:38 +10:00
parent 8a8611c590
commit da58308ae4
+31 -27
View File
@@ -1,17 +1,18 @@
" cat " cat: cat [arg1 arg2 ...]
lac 017777 i " exit if four argument words only? " Load the pointer pointer in 017777 to see if we have any arguments
sad d4 lac 017777 i
jmp nofiles sad d4 " Skip if we have more than four argument words
lac 017777 jmp nofiles " Only four argument words, so no arguments
tad d1 " why not tad d5 (add 5)? lac 017777 " Move five words past the argument word count
tad d4 tad d1 " so that AC points at the first argument
dac name " name = *(017777) + 5 tad d4 " and save the pointer in name
dac name
loop: loop:
sys open; name; 0; 0 " open file, get fd back sys open; name; 0; 0 " Open file, get fd back
spa " exit if fd == -1 spa
jmp badfile jmp badfile " Negative fd, exit with an error message
dac fi " save file descriptor in fi dac fi " save file descriptor in fi
1: 1:
@@ -22,33 +23,35 @@ loop:
jmp 1b jmp 1b
1: 1:
lac fi lac fi " Close the file descriptor in fi
sys close sys close
loop1: loop1:
-4 -4
tad 017777 i tad 017777 i " Subtract 4 from the count of argument words
dac 017777 i dac 017777 i
sad d4 sad d4 " Is the value 4, i.e. no args left?
jmp done jmp done " Yes, so exit
lac name
tad d4 lac name " Still an argument, so move up
tad d4 " to the next filename argument
dac name dac name
jmp loop jmp loop " and loop back to cat this file
badfile: badfile:
lac name lac name " Get the pointer to the filename
dac 1f dac 1f " Store it in 1f below
lac d8 " Load fd 8 which is stderr
sys write; 1:0; 4 " Write the four words of the filename
lac d8 lac d8
sys write; 1:0; 4 sys write; 1f; 2 " and then write " ?\n"
lac d8 jmp loop1 " Now try doing the next argument
sys write; 1f; 2
jmp loop1 1: 040;077012 " String literal: " ?\n"
1: 040;077012
nofiles: nofiles:
lac d8 lac d8
sys write; 1f; 5 " write 5 words to fd 8? sys write; 1f; 5 " Write "No files\n" to stderr
sys exit " and exit sys exit " and exit
1: <no>; 040; <fi>;<le>;<s 012 1: <no>; 040; <fi>;<le>;<s 012
@@ -66,7 +69,7 @@ done:
lac noc lac noc
rcr rcr
dac 1f dac 1f
lac fo " load fd 1, stdout lac fo " Load fd 1, stdout
sys write; iopt+1; 1:.. sys write; iopt+1; 1:..
sys exit sys exit
@@ -127,6 +130,7 @@ putc: 0
dac opt dac opt
dzm noc dzm noc
jmp putc i jmp putc i
2: 0;0 2: 0;0
ipt: 0 ipt: 0
eipt: 0 eipt: 0