0001: / init -- process control initialization
0002:
0003: mount = 21.
0004:
0005: sys intr; 0 / turn off interrupts
0006: sys quit; 0
0007: cmp csw,$73700 / single user?
0008: bne 1f / no
0009: help:
0010: clr r0 / yes
0011: sys close / close current read
0012: mov $1,r0 / and write
0013: sys close / files
0014: sys open; ctty; 0 / open control tty
0015: sys open; ctty; 1 / for read and write
0016: sys exec; shell; shellp / execute shell
0017: br help / keep trying
0018: 1:
0019: mov $'0,r1 / prepare to change
0020: 1 :
0021: movb r1,tapx+8 / mode of dec tape drive x, where
0022: sys chmod; tapx; 17 / x=0 to 7, to read/write by owner or
0023: inc r1 / non-owner mode
0024: cmp r1,$'8 / finished?
0025: blo 1b / no
0026: sys mount; rk0; usr / yes, root file on mounted rko5
0027: / disk ls /usr
0028: sys creat; utmp; 16 / truncate /tmp/utmp
0029: sys close / close it
0030: movb $'x,zero+8. / put identifier in output buffer
0031: jsr pc,wtmprec / go to write accting info
0032: mov $itab,r1 / address of table to r1
0033:
0034: / create shell processes
0035:
0036: 1:
0037: mov (r1)+,r0 / 'x, x=0, 1... to r0
0038: beq 1f / branch if table end
0039: movb r0,ttyx+8 / put symbol in ttyx
0040: jsr pc,dfork / go to make new init for this ttyx
0041: mov r0,(r1)+ / save child id in word offer '0, '1,...etc.
0042: br 1b / set up next child
0043:
0044: / wait for process to die
0045:
0046: 1:
0047: sys wait / wait for user to terminate process
0048: mov $itab,r1 / initialize for search
0049:
0050: / search for process id
0051:
0052: 2:
0053: tst (r1)+ / bump r1 to child id location
0054: beq 1b / ? something silly
0055: cmp r0,(r1)+ / which process has terminated
0056: bne 2b / not this one
0057:
0058: / take name out of utmp
0059:
0060: sub $4, r1 / process is found, point x' to 'x
0061: / for it
0062: mov r1,-(sp) / save address on stack
0063: mov (r1),r1 / move 'x to r1
0064: sub $'0,r1 / remove zone bits from character
0065: asl r1 / generate proper
0066: asl r1 / offset
0067: asl r1 / for
0068: asl r1 / seek
0069: mov r1,0f / move it to offset loc for seek
0070: mov $zero,r1
0071: 2:
0072: clr (r1)+ / ccear-
0073: cmp r1,$zero+16. / output buffer
0074: blo 2b / area
0075: sys open; utmp; 1 / open file for writing
0076: bes 2f / if can't open, create user anyway
0077: mov r0,r1 / save file desc
0078: sys seek; 0:..; 0 / move to proper pointer position
0079: mov r1,r0 / not required
0080: sys write; zero; 16. / zero this position in
0081: mov r1,r0 / restore file descriptor
0082: sys close / close file
0083:
0084: / re-create user process
0085:
0086: 2:
0087: mov (sp)+,r1 / restore 'x to r1
0088: mov (r1)+,r0 / move it to r0
0089: movb r0,ttyx+8 / get correct ttyx
0090: movb r0,zero+8 / move identifier to output buffer
0091: jsr pc,wtmprec / go to write accting into
0092: jsr pc,dfork / fork
0093: mov r0,(r1)+ / save id of child
0094: br 1b / go to wait for next process end
0095:
0096: dfork:
0097: mov r1,r2
0098: sub $itab+2,r2 / left over
0099: asl r2 / from previous
0100: asl r2 / version of code
0101: mov r2,offset
0102: sys fork
0103: br 1f / to new copy of init
0104: bes dfork / try again
0105: rts pc / return
0106: 1 :
0107: sys quit; 0 / new init turns off
0108: sys intr; 0 / interrupts
0109: sys chown; ttyx; 0 / change owner to super user
0110: sys chmod; ttyx; 15 / changemode to read/write owner,
0111: / write non-owner
0112: sys open; ttyx; 0 / open this ttyx for reading
0113: / and wait until someone calls
0114: bes help1 / branch if trouble
0115: sys open; ttyx; 1 / open this ttyx for writing after
0116: / user call
0117: bes help1 / branch if trouble
0118: sys exec; getty; gettyp / getty types <login> and
0119: / executes login which logs user
0120: / in and executes sh-
0121: sys exit / HELP!
0122:
0123: help1:
0124: jmp help / trouble
0125:
0126: wtmprec:
0127: sys time / get time
0128: mov ac,zero+10. / more to output
0129: mov mq,zero+12. / buffer
0130: sys open; wtmp; 1 / open accounting file
0131: bes 2f
0132: mov r0,r2 / save file descriptor
0133: sys seek; 0; 2 / move pointer to end of file
0134: mov r2,r0 / not required
0135: sys write; zero; 16. / write accting info
0136: mov r2,r0 / restore file descriptor
0137: sys close / close file
0138: 2:
0139: rts pc
0140:
0141: ctty: </dev/tty\0>
0142: shell: </bin/sh\0>
0143: shellm: <-\0>
0144: tapx: </dev/tapx\0>
0145: rk0: </dev/rk0\0>
0146: utmp: </tmp/utmp\0>
0147: wtmp: </tmp/wtmp\0>
0148: ttyx: </dev/ttyx\0>
0149: getty: </etc/getty\0>
0150: usr: </usr\0>
0151: .even
0152:
0153: shellp: shellm
0154: 0
0155: gettyp: getty
0156: 0
0157: itab:
0158: '0; ..
0159: '1; ..
0160: '2; ..
0161: '3; ..
0162: '4; ..
0163: '5; ..
0164: '6; ..
0165: '7; ..
0166: 0
0167:
0168: offset: .=.+2
0169: zero: .=.+8; .=.+6; .=.+2
0001: / init -- process control initialization
0002:
0003:
0004:
0005: sys intr; 0
0006: sys quit; 0
0007: sys 38. / get console switches
0008: cmp r0,$173030
0009: bne 1f
0010: help:
0011: clr r0
0012: sys close
0013: mov $1,r0
0014: sys close
0015: sys open; ctty; 0
0016: sys open; ctty; 1
0017: sys exec; shell; shellp
0018: br help
0019: 1:
0020: sys mount; rk1; usr
0021: sys mount; rk2; ssys
0022: sys mount; rk3; crp
0023: mov $'0,r1
0024: 1:
0025: movb r1,tapx+8
0026: sys chmod; tapx; 17
0027: inc r1
0028: cmp r1,$'8
0029: blo 1b
0030: sys creat; utmp; 16
0031: sys close
0032: sys unlink; dpdlock
0033: sys fork
0034: br daemon
0035: sys fork
0036: br dirass
0037: sys fork
0038: br dds
0039: movb $'x,zero+8.
0040: jsr pc,wtmprec
0041: mov $itab,r1
0042: br 1f
0043:
0044: daemon:
0045: sys exec; etcdpd; etcdpdp
0046: sys exit
0047:
0048: dirass:
0049: sys chdir; usrmel
0050: sys exec; melda; meldap
0051: sys exit
0052:
0053: dds:
0054: sys exec; usrdd; usrddp
0055: sys exit
0056:
0057: / create shell processes
0058:
0059: 1:
0060: mov (r1)+,r0
0061: beq pwait
0062: movb r0,ttyx+8
0063: jsr pc,dfork
0064: mov r0,(r1)+
0065: br 1b
0066:
0067: / wait for process to die
0068:
0069: pwait:
0070: sys wait
0071: mov $itab,r1
0072:
0073: / search for process id
0074:
0075: 2:
0076: tst (r1)+
0077: beq pwait
0078: cmp r0,(r1)+
0079: bne 2b
0080:
0081: / take name out of utmp
0082:
0083: sub $4,r1
0084: mov r1,-(sp)
0085: mov (r1),r1
0086: sub $'0,r1
0087: cmp r1,$'a-'0
0088: blo 2f
0089: sub $'a-'0-10.,r1 / map a-z into 10. on
0090: 2:
0091: asl r1
0092: asl r1
0093: asl r1
0094: asl r1
0095: mov r1,0f
0096: mov $zero,r1
0097: 2:
0098: clr (r1)+
0099: cmp r1,$zero+16.
0100: blo 2b
0101: sys open; utmp; 1
0102: bes 2f
0103: mov r0,r1
0104: sys seek; 0:..; 0
0105: mov r1,r0
0106: sys write; zero; 16.
0107: mov r1,r0
0108: sys close
0109:
0110: / re-create user process
0111:
0112: 2:
0113: mov (sp)+,r1
0114: mov (r1)+,r0
0115: movb r0,ttyx+8
0116: movb r0,zero+8.
0117: jsr pc,wtmprec
0118: jsr pc,dfork
0119: mov r0,(r1)+
0120: br pwait
0121:
0122: dfork:
0123: sys fork
0124: br 1f
0125: bes dfork
0126: rts pc
0127: 1:
0128: sys quit; 0
0129: sys intr; 0
0130: sys chown; ttyx; 0
0131: sys chmod; ttyx; 15
0132: sys open; ttyx; 0
0133: bes help1
0134: sys open; ttyx; 1
0135: bes help1
0136: sys exec; getty; gettyp
0137: sys exit / HELP!
0138:
0139: help1:
0140: jmp help
0141:
0142: wtmprec:
0143: mov r1,-(sp)
0144: sys time
0145: mov r0,zero+10.
0146: mov r1,zero+12.
0147: sys open; wtmp; 1
0148: bes 2f
0149: mov r0,r2
0150: sys seek; 0; 2
0151: mov r2,r0
0152: sys write; zero; 16.
0153: mov r2,r0
0154: sys close
0155: 2:
0156: mov (sp)+,r1
0157: rts pc
0158:
0159: etcdpdp:
0160: etcdpd; 0
0161: meldap:
0162: melda; 0
0163: usrddp:
0164: usrdd; 0
0165: usrdd: </usr/demo/dds\0>
0166: melda: </usr/mel/da\0>
0167: usrmel: </usr/mel\0>
0168: rk1: </dev/rk1\0>
0169: rk2: </dev/rk2\0>
0170: rk3: </dev/rk3\0>
0171: usr: </usr\0>
0172: ssys: </sys\0>
0173: crp: </crp\0>
0174: ctty: </dev/tty\0>
0175: shell: </bin/sh\0>
0176: shellm: <-\0>
0177: dpdlock:
0178: </usr/dpd/lock\0>
0179: etcdpd:
0180: </etc/dpd\0>
0181: tapx: </dev/tapx\0>
0182: utmp: </tmp/utmp\0>
0183: wtmp: </tmp/wtmp\0>
0184: ttyx: </dev/ttyx\0>
0185: getty: </etc/getty\0>
0186: .even
0187:
0188: shellp: shellm
0189: 0
0190: gettyp: getty
0191: 0
0192: itab:
0193: '0; ..
0194: '1; ..
0195: '2; ..
0196: '3; ..
0197: '4; ..
0198: '5; ..
0199: '6; ..
0200: '7; ..
0201: '8; ..
0202: 'a; ..
0203: 'b; ..
0204: 0
0205:
0206: .bss
0207: offset: .=.+2
0208: zero: .=.+8.; .=.+6; .=.+2.