movb r3,u.fp(r2) / move entry number into next available slot / in u.fp list mov r2,*u.r0 / move index to u.fp list into r0 loc on stack br sysret2 error2: jmp error / see 'error' routine sysret2: jmp sysret / see 'sysret' routine syscreat: / name; mode jsr r0,arg2 / put file name in u.namep put mode on stack jsr r0,namei / get the i-number br 2f / if file doesn't exist 2f neg r1 / if file already exists make i-number negative / (open for writing) jsr r0,iopen / jsr r0,itrunc / truncate to 0 length br op0 2: / file doesn't exist mov (sp)+,r1 / put the mode in r1 bic $!377,r1 / clear upper byte jsr r0,maknod / make an i-node for this file mov u.dirbuf,r1 / put i-number for this new file in r1 br op0 / open the file sysmkdir: / make a directory jsr r0,arg2 / point u.namep to the file name jsr r0,namei / get the i-number br .+4 / if file not found branch around error br error2 / directory already exists (error) tstb u.uid / is user the super user bne error2 / no, not allowed mov (sp)+,r1 / put the mode in r1 bic $!317,r1 / all but su and ex bis $40000,r1 / directory flag jsr r0,maknod / make the i-node for the directory br sysret2 / sysclose: / close the file mov *u.r0,r1 / move index to u.fp list into r1 jsr r0,fclose / close the file br error2 / unknown file descriptor br sysret2 sysemt: jsr r0,arg; 30 / put the argument of the sysemt call in loc 30 cmp 30,$core / was the argument a lower address than core blo 1f / yes, rtssym cmp 30,$ecore / no, was it higher than "core" and less than / "ecore" blo 2f / yes, sysret2 1: mov $rtssym,30 2: br sysret2