From 73ea3c665be617d8c7f4d3175d7cb87dfd903ab3 Mon Sep 17 00:00:00 2001 From: Warren Toomey Date: Thu, 25 Feb 2016 06:56:04 +1000 Subject: [PATCH] Hand-typed version of the cat source code with my own comments to explain what it is doing. --- src/cmd/cat.s | 146 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100644 src/cmd/cat.s diff --git a/src/cmd/cat.s b/src/cmd/cat.s new file mode 100644 index 0000000..d93ac58 --- /dev/null +++ b/src/cmd/cat.s @@ -0,0 +1,146 @@ +" cat + + lac 017777 i " exit if four argument words only? + sad d4 + jmp nofiles + lac 017777 + tad d1 " why not tad d5 (add 5)? + tad d4 + dac name " name = *(017777) + 5 + +loop: + sys open; name; 0; 0 " open file, get fd back + spa " exit if fd == -1 + jmp badfile + dac fi " save file descriptor in fi + +1: + jms getc " get a character in AC + sad o4 + jmp 1f + jms putc " write the character on stdout + jmp 1b + +1: + lac fi + sys close + +loop1: + -4 + tad 017777 i + dac 017777 i + sad d4 + jmp done + lac name + tad d4 + dac name + jmp loop + +badfile: + lac name + dac 1f + lac d8 + sys write; 1:0; 4 + lac d8 + sys write; 1f; 2 + jmp loop1 + +1: 040;077012 +nofiles: + lac d8 + sys write; 1f; 5 " write 5 words to fd 8? + sys exit " and exit + +1: ; 040; ;;