mirror of
https://github.com/PDP-10/its.git
synced 2026-01-11 23:53:12 +00:00
MBXLOC - lock a mailbox.
This commit is contained in:
parent
6b3f2a2188
commit
9973308d07
@ -247,6 +247,10 @@ respond "*" ":midas digest; ts digest_digest\r"
|
||||
expect ":KILL"
|
||||
respond "*" ":link dragon; hourly digest, digest; ts digest\r"
|
||||
|
||||
# MBXLOC
|
||||
respond "*" ":midas digest; ts mbxloc_mbxloc\r"
|
||||
expect ":KILL"
|
||||
|
||||
# TIME
|
||||
respond "*" ":midas sys1;ts time_sysen2;time\r"
|
||||
expect ":KILL"
|
||||
|
||||
@ -192,6 +192,7 @@
|
||||
- LSRDMP, dump the user database.
|
||||
- LSRPRT, print information about user groups.
|
||||
- LUSER, request help from registered list of logged-in users.
|
||||
- MBXLOC, lock a mailbox.
|
||||
- MACN80, Z80 cross assembler.
|
||||
- MACRO-10, DEC assembler.
|
||||
- MACSYMA, symbolic manipulation system.
|
||||
|
||||
197
src/digest/mbxloc.4
Executable file
197
src/digest/mbxloc.4
Executable file
@ -0,0 +1,197 @@
|
||||
; -*- Midas -*-
|
||||
|
||||
title MBXLOCK - Lock a mailbox
|
||||
|
||||
a=:1
|
||||
b=:2
|
||||
c=:3
|
||||
d=:4
|
||||
e=:5
|
||||
t=:6
|
||||
tt=:7
|
||||
x=:10
|
||||
y=:11
|
||||
z=:12
|
||||
|
||||
p=:17
|
||||
|
||||
..bch==:0,,-1
|
||||
chttyo==:1
|
||||
chprobe==:2
|
||||
chlock==:3
|
||||
|
||||
%fr==:0,,525252
|
||||
%fl==:1,,525252
|
||||
|
||||
call=:pushj p,
|
||||
return=:popj p,
|
||||
save==:push p,
|
||||
rest==:pop p,
|
||||
flose=:.lose %lsfil
|
||||
slose=:.lose %lssys
|
||||
pause=:.break 16,100000
|
||||
|
||||
quit=:call .
|
||||
$quit: skipe debug
|
||||
pause
|
||||
.logout 1,
|
||||
|
||||
define bltdup org,len
|
||||
move tt,[<org>,,<org>+1]
|
||||
blt tt,<org>+<len>-1
|
||||
termin
|
||||
|
||||
define syscall name,args
|
||||
.call [setz ? .1stwd sixbit /name/ ? args(400000)]
|
||||
termin
|
||||
|
||||
define conc foo,bar
|
||||
foo!bar!termin
|
||||
|
||||
; JSP T,LOSE is like .LOSE %LSSYS(TT) or SLOSE (TT)
|
||||
lose: syscall lose,[movei %lssys(tt) ? movei -2(t)]
|
||||
slose
|
||||
|
||||
popj1: aos (p)
|
||||
cpopj: return
|
||||
|
||||
rfn"$$rfn==:1
|
||||
rfn"rsixtp==:cpopj
|
||||
rfn"$$pfn==:1
|
||||
rfn"psixtp==:cpopj
|
||||
.insrt dsk:syseng;rfn >
|
||||
|
||||
format"$$pcode==:1
|
||||
format"$$pfn==:1
|
||||
format"pfn==:rfn"pfn
|
||||
.insrt dsk:syseng;format >
|
||||
|
||||
outstr: syscall siot,[movei chttyo ? a ? b]
|
||||
slose
|
||||
return
|
||||
|
||||
define format &string&,args
|
||||
call [
|
||||
call $format
|
||||
.zzz.==-1
|
||||
irp arg,,[args]
|
||||
save arg
|
||||
.zzz.==.irpcnt
|
||||
termin
|
||||
hrroi a,[ascii string]
|
||||
movei b,.length string
|
||||
movni c,.zzz.+1
|
||||
jrst format"format]
|
||||
termin
|
||||
|
||||
$forma: save a
|
||||
save b
|
||||
save c
|
||||
call @-3(p)
|
||||
rest c
|
||||
rest b
|
||||
rest a
|
||||
rest (p)
|
||||
return
|
||||
|
||||
.vector pdl(lpdl==:100.)
|
||||
.vector cmdbuf(lcmdbuf==:100.)
|
||||
.vector mbx(4)
|
||||
.scalar mname
|
||||
|
||||
usrvar: sixbit /OPTION/ ? tlo %opint\%opopc
|
||||
sixbit /MASK/ ? move [%pipdl]
|
||||
sixbit /XUNAME/ ? movem mbx+1
|
||||
sixbit /HSNAME/ ? movem mbx+3
|
||||
sixbit /OPTION/ ? movem a
|
||||
lusrvar==:.-usrvar
|
||||
|
||||
go: move p,[-lpdl,,pdl-1]
|
||||
.open chttyo,[.uao\%tjdis,,'tty ? setz ? setz]
|
||||
slose
|
||||
syscall sstatu,[repeat 6,[ ? movem mname]]
|
||||
slose
|
||||
move t,[-lusrvar,,usrvar]
|
||||
syscall usrvar,[movei %jself ? move t]
|
||||
slose
|
||||
movsi t,(sixbit /DSK/)
|
||||
movem t,mbx+0
|
||||
move t,[sixbit /MAIL/]
|
||||
movem t,mbx+2
|
||||
movei b,mbx
|
||||
tlnn a,%opcmd
|
||||
jrst nojcl
|
||||
setzm cmdbuf
|
||||
bltdup cmdbuf,lcmdbuf
|
||||
setom cmdbuf+lcmdbuf-1
|
||||
.break 12,[..rjcl,,cmdbuf]
|
||||
skipe cmdbuf+lcmdbuf-2
|
||||
.lose
|
||||
move d,[440700,,cmdbuf]
|
||||
call rfn"rfn
|
||||
nojcl: move a,mbx+0
|
||||
came a,[sixbit /DSK/]
|
||||
camn a,mname
|
||||
jrst golock
|
||||
format "~&Can't lock non-local inbox ~F~&",b
|
||||
quit
|
||||
|
||||
golock: format "~&Locking inbox ~F",b
|
||||
syscall open,[moves tt ? movsi .uai\%donrf ? movei chprobe
|
||||
move mbx+0 ? move mbx+1 ? move mbx+2 ? move mbx+3]
|
||||
jsp t,[caie tt,%ensfl
|
||||
jrst lose
|
||||
format " (which does not currently exist)"
|
||||
jrst .+1 ]
|
||||
move a,mbx+1
|
||||
rot a,1
|
||||
add a,mbx+2
|
||||
rot a,1
|
||||
add a,mbx+3
|
||||
idivi a,777773 ; largest prime < 1,,0
|
||||
hrli b,(sixbit /MBX/) ; result in b = a + 1
|
||||
syscall open,[movsi .uao ? movei chlock ? [sixbit /LOCK/] ? move b]
|
||||
flose
|
||||
format "~&Locked.~&"
|
||||
pause
|
||||
.close chlock,
|
||||
format "~&Unlocked.~&"
|
||||
quit
|
||||
|
||||
intsv0==:t ; Save T
|
||||
intsv9==:z ; Through Z
|
||||
intsvn==:intsv9+1-intsv0
|
||||
|
||||
intctl==:400000+intsv0_6+intsvn ; control bits
|
||||
intpc==:-<3+intsvn> ; INTPC(P) is PC before interrupt.
|
||||
intdf1==:intpc-2 ; INTDF1(P) is .DF1 before interrupt.
|
||||
intdf2==:intpc-1 ; INTDF2(P) is .DF2 before interrupt.
|
||||
intrq1==:intpc-4 ; INTRQ1(P) are first word bits.
|
||||
intrq2==:intpc-3 ; INTRQ2(P) are second word bits.
|
||||
intac0==:intpc+1-intsv0 ; INTAC0+C(P) is C before interrupt.
|
||||
|
||||
tsint:
|
||||
loc 42
|
||||
-ltsint,,tsint
|
||||
loc tsint
|
||||
intctl,,p
|
||||
ltsint==:.-tsint
|
||||
|
||||
dismis: setz ? sixbit /DISMIS/ ? movsi intctl ? setz p
|
||||
|
||||
cnst0:
|
||||
constants
|
||||
repeat <.-cnst0+77>/100, conc cnst,\.rpcnt,=:cnst0+.rpcnt*100
|
||||
|
||||
variables
|
||||
|
||||
debug: 0
|
||||
|
||||
patch::
|
||||
pat: block 100.
|
||||
epatch: -1 ; Make memory exist, end of patch area
|
||||
|
||||
ffaddr:
|
||||
ffpage==:<ffaddr+1777>_-12
|
||||
|
||||
end go
|
||||
Loading…
x
Reference in New Issue
Block a user