mirror of
https://github.com/DoctorWkt/unix-jun72.git
synced 2026-02-02 15:01:52 +00:00
54 lines
2.0 KiB
Plaintext
54 lines
2.0 KiB
Plaintext
jsr r0,arg2 / get arguments special and name
|
|
tst mnti / is the i-number of the cross device file zero?
|
|
bne errora / no, error
|
|
jsr r0,getspl / get special files device number in r1
|
|
mov (sp)+,u.namep / put the name of file to be placed on the
|
|
/ device
|
|
mov r1,-(sp) / save the device number
|
|
jsr r0,namei / get the i-number of the file
|
|
br errora
|
|
mov r1,mnti / put it in mnti
|
|
1:
|
|
tstb sb1+1 / is 15th bit of I/O queue entry for dismountable
|
|
/ device set?
|
|
bne 1b / (inhibit bit) yes, skip writing
|
|
mov (sp),mntd / no, put the device number in mntd
|
|
movb (sp),sb1 / put the device number in the lower byte of the
|
|
/ I/O queue entry
|
|
mov (sp)+,cdev / put device number in cdev
|
|
bis $2000,sb1 / set the read bit
|
|
jsr r0,ppoke / read in entire file system
|
|
1:
|
|
tstb sb1+1 / done reading?
|
|
bne 1b / no, wait
|
|
br sysreta / yes
|
|
|
|
sysumount: / special dismount file system
|
|
jsr r0,arg; u.namep / point u.namep to special
|
|
jsr r0,getspl / get the device number in r1
|
|
cmp r1,mntd / is it equal to the last device mounted?
|
|
bne errora / no error
|
|
1:
|
|
tstb sb1+1 / yes, is the device still doing I/O (inhibit
|
|
/ bit set)?
|
|
bne 1b / yes, wait
|
|
clr mntd / no, clear these
|
|
clr mnti
|
|
br sysreta / return
|
|
|
|
getspl: / get device number from a special file name
|
|
jsr r0,namei / get the i-number of the special file
|
|
br errora / no such file
|
|
sub $4,r1 / i-number-4 rk=1,tap=2+n
|
|
ble errora / less than 0? yes, error
|
|
cmp r1,$9. / greater than 9 tap 7
|
|
bgt errora / yes, error
|
|
rts r0 / return with device number in r1
|
|
|
|
errora:
|
|
jmp error / see 'error' routine
|
|
|
|
sysreta:
|
|
jmp sysret / see 'sysret' routine
|
|
|