1
0
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:
Lars Brinkhoff 2019-11-27 14:36:32 +01:00
parent 6b3f2a2188
commit 9973308d07
3 changed files with 202 additions and 0 deletions

View File

@ -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"

View File

@ -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
View 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