1
0
mirror of https://github.com/livingcomputermuseum/pdp7-unix.git synced 2026-02-11 10:45:26 +00:00
Files
livingcomputermuseum.pdp7-unix/bin/cp
2016-03-04 13:41:16 +10:00

106 lines
4.1 KiB
Plaintext

010000: 217777 lac 017777 " Skip past argc and save
010001: 350137 tad d1 " argv[0] (our name) into name2
010002: 050026 dac name2 " We will skip past it later
010003: 237777 lac 017777 i " Any arguments left?
010004: 550142 sad d4
010005: 020016 sys exit " 4 words = no args left, exit
010006: 550143 sad d8 " Do we have 2 args?
010007: 610123 jmp unbal " No, an unbalanced set of arguments
010010: 350145 tad dm8 " Subtract 8 (two args) from the argc
010011: 077777 dac 017777 i " and save it
010012: 210026 lac name2
010013: 350142 tad d4
010014: 050020 dac name1 " Skipping pairs of filenames? not sure
010015: 350142 tad d4
010016: 050026 dac name2
010017: 020003 sys open; name1: 0; 0 " Open the input file
010020: 000000
010021: 000000
010022: 741100 spa
010023: 610074 jmp error " File open error
010024: 210144 lac o17 " Why load 15 (017) into AC?
010025: 020006 sys creat; name2: 0 " Create the output file
010026: 000000
010027: 741100 spa
010030: 610074 jmp error " File create error
010031: 150147 dzm nin " Set the number of input words to zero
010032: 210150 lac bufp " Set up the base of the upcoming read
010033: 350147 tad nin " to be the buffer + nin so we skip
010034: 050044 dac 0f " the existing words in the buffer
010035: 777777 -1
010036: 350147 tad nin " Calculate 1024 - nin, i.e. the number
010037: 740001 cma " of empty words yet to be filled in the
010040: 350146 tad d1024 " buffer, and use it as the read count
010041: 050045 dac 0f+1
010042: 210140 lac d2 " Read from fd 2: hard-wired in fd!
010043: 020004 sys read; 0:..;..
010044: 010000
010045: 010000
010046: 741200 sna
010047: 610055 jmp 2f " No words were read in, go to 2f
010050: 350147 tad nin " Add the number of words read in
010051: 050147 dac nin " to the existing number of words
010052: 550146 sad d1024
010053: 610055 jmp 2f " We do have 1,024 words, go to 2f
010054: 610032 jmp 1b " Loop back if we don't have 1,024 words
010055: 210147 lac nin " Load the number of words in the input buffer
010056: 050062 dac 2f " Save in the write word count argument
010057: 210141 lac d3 " Write to fd 3: hard-wired out fd!
010060: 020005 sys write; buf; 2:0
010061: 010151
010062: 000000
010063: 150147 dzm nin " Set nin back to zero
010064: 210062 lac 2b " Get the write count (updated by sys write)
010065: 550146 sad d1024 " Did we write the buffer out?
010066: 610032 jmp 1b " Yes, we wrote 1,024 words, so loop back
010067: 210140 lac d2
010070: 020011 sys close " Close fd 2 and fd 3
010071: 210141 lac d3
010072: 020011 sys close
010073: 610003 jmp loop " Loop back to deal with the next arguments
010074: 210020 lac name1 " standard output, fd 1 followed by " ?\n"
010075: 050100 dac 1f
010076: 210137 lac d1
010077: 020005 sys write; 1:0; 4
010100: 000000
010101: 000004
010102: 210137 lac d1
010103: 020005 sys write; mes; 1
010104: 010121
010105: 000001
010106: 210026 lac name2 " Then do the same with name 2
010107: 050112 dac 1f
010110: 210137 lac d1
010111: 020005 sys write; 1: 0; 4
010112: 000000
010113: 000004
010114: 210137 lac d1
010115: 020005 sys write; mes; 2
010116: 010121
010117: 000002
010120: 610003 jmp loop " Loop back to deal with the next arguments
010121: 040000 040000;077012 " String literal: " ?\n"
010122: 077012
010123: 210026 lac name2 " so print out the name after name2
010124: 350142 tad d4 " on standard output followed by " ?\n"
010125: 050130 dac 1f
010126: 210137 lac d1
010127: 020005 sys write; 1: 0; 4
010130: 000000
010131: 000004
010132: 210137 lac d1
010133: 020005 sys write; mes; 2
010134: 010121
010135: 000002
010136: 020016 sys exit
010137: 000001 d1: 1 " Numeric constants
010140: 000002 d2: 2
010141: 000003 d3: 3
010142: 000004 d4: 4
010143: 000010 d8: 8
010144: 000017 o17: 017
010145: 777770 dm8: -8
010146: 002000 d1024: 1024
010147: 000000 nin: 0 " Number of words in the input buffer
010150: 010151 bufp: buf " Pointer to the buffer