Research PDP7 development
[unix-history] / s2.s
diff --git a/s2.s b/s2.s
new file mode 100644 (file)
index 0000000..4ee69ea
--- /dev/null
+++ b/s2.s
@@ -0,0 +1,328 @@
+" s2
+
+.status:
+   jms arg
+   dac .+5
+   jms arg
+   dac .+6
+   lac u.cdir
+   jms namei; ..
+      jms error
+   jms namei; ..
+      jms error
+   jms iget
+   lac u.ac
+   and o17777
+   jms betwen; o10000; o17762
+      jms error
+   dac .+3
+   jms copy; inode; ..; 12
+   lac d.i
+   dac 9 i
+   jmp okexit
+
+.capt:
+   lac u.ac
+   dac u.dspbuf
+   jms movdsp
+   jmp sysexit
+
+.rele:
+   dzm u.dspbuf
+   law dspbuf
+   jms movdsp
+   jmp sysexit
+
+.chmod:
+   jms isown
+   lac u.ac
+   and o17
+   lmq
+   lac i.flags
+   and o777760
+   omq
+   dac i.flags
+   jms iput
+   jmp okexit
+
+.chown:
+   jms isown
+   lac u.ac
+   dac i.uid
+   jms iput
+   jmp okexit
+
+.getuid:
+   lac u.uid
+   dac u.ac
+   jmp sysexit
+
+.seek:
+   jms seektell
+   tad u.base
+   spa
+   jms error
+   lmq
+   lac f.flags
+   and d1
+   sna
+   jmp 1f
+   lacq
+   jms betwen; d0; i.size
+      jms dacisize
+   jmp 2f
+1:
+   lacq
+   jms betwen; d0; i.size
+      lac i.size
+2:
+   dac f.badd
+   dac u.ac
+   jms fput
+   jmp sysexit
+
+.tell:
+   jms seektell
+   cma
+   tad d1
+   tad u.base
+   dac u.ac
+   jmp sysexit
+
+.link:
+   jms arg
+   dac 0f
+   jms arg
+   dac 1f
+   jms arg
+   dac 2f
+   lac d4
+   jms namei; 0:0
+      jms error
+   jms namei; 1:0
+      jms error
+   dac u.base
+   jms copy; 2:0; name; 4
+   lac u.cdir
+   jms namei; name
+      skp
+   jms error
+   lac d1
+   dac mode
+   jms access
+   jms dslot
+   lac u.base
+   jms iget
+   lac ii
+   dzm d.i
+   jms copy; name; d.name; 4
+   lac i.uniq
+   dac d.uniq
+   -1
+   tad i.nlks
+   dac i.nlks
+   jms iput
+   jms dput
+   jmp okexit
+
+.unlink:
+   jms argname
+   dac u.base
+   lac d1
+   dac mode
+   jms access
+   dac d.i
+   jms dput
+   lac u.base
+   jms iget
+   isz i.nlks
+   jmp 1f
+   jms itrunc
+   dzm i.flags
+1:
+   jms iput
+   jmp sysexit
+
+.setuid:
+   lac u.uid
+   sma
+   jms error
+   lac u.ac
+   dac u.uid
+   jmp sysexit
+
+.rename:
+   jms arg
+   dac 0f
+   jms arg
+   dac 1f
+   lac u.cdir
+   jms namei; 0:0
+      jms error
+   lac d1
+   dac mode
+   jms access
+   jms copy; 1:0; d.name; 4
+   jmp okexit
+
+.time:
+   lac s.tim
+   dac u.ac
+   lac s.tim+1
+   dac u.mq
+   jmp sysexit
+
+.chdir:
+   jms argname
+   jms iget
+   lac i.flags
+   and o20
+   sna
+   jms error
+   lac ii
+   dac u.cdir
+   jmp okexit
+
+.open:
+   jms arg
+   dac 0f
+   jms arg
+   sza
+   lac d1
+   sna
+   lac d2
+   dac mode
+   lac u.cdir
+   jms namei; 0:0
+      jms error
+   jms iget
+   jms access
+   lac i.flags
+   and o20
+   sna
+   jmp open1
+   lac mode
+   and d1
+   sna
+   jmp open1
+   lac u.uid
+   sma
+   jms error
+   jmp open1
+
+.creat:
+   lac d1
+   dac mode
+   jms arg
+   dac .+2
+   jms copy; ..; name; 4
+   lac u.cdir
+   jms namei; name
+      jmp 1f
+   jms iget
+   jms access
+   lac i.flags
+   and o20
+   sna
+   jmp .+4
+   lac u.uid
+   sma
+   jms error
+   jms itrunc
+   cla
+   jms dacisize
+   jmp open1
+1:
+   jms access
+   lac u.ac
+   and o17
+   jms icreat
+open1:
+   jms fassign
+      jms error
+   jmp sysexit
+
+.close:
+   jms finac
+   dzm f.flags
+   jms fput
+   jmp sysexit
+
+.read:
+   jms arg
+   and o17777
+   dac u.base
+   jms arg
+   dac u.count
+   lac u.base
+   jms betwen; o10000; o17777
+      jms error
+   tad u.count
+   jms betwen; u.base; o17777
+      jms error
+   dac u.limit
+1:
+   jms finac
+   lac f.flags
+   and d1
+   sza
+   jms error
+   lac i.flags
+   and o40
+   sna
+   jmp 1f
+   iof
+   lac ii
+   tad swr
+   dac .+1
+   jmp .. i
+1:
+   lac u.base
+   dac 1f+1
+   lac u.count
+   dac 1f+2
+   lac f.badd
+1:
+   jms iread; ..; ..
+   jmp exitrw
+
+.write:
+   jms arg
+   and o17777
+   dac u.base
+   jms arg
+   dac u.count
+   tad u.base
+   jms betwen; u.base; o17777
+      jms error
+   dac u.limit
+   jms finac
+   lac f.flags
+   and d1
+   sna
+   jms error
+   lac i.flags
+   and o40
+   sna
+   jmp 1f
+   iof
+   lac ii
+   tad sww
+   dac .+1
+   jmp .. i
+1:
+   lac u.base
+   dac 1f+1
+   lac u.count
+   dac 1f+2
+   lac f.badd
+1:
+   jms iwrite; ..; ..
+
+exitrw:
+   dac u.ac
+   tad f.badd
+   dac f.badd
+   jms iput
+   jms fput
+   jmp sysexit