.
. PROCS FOR SCHEDULER CALLING SEQUENCES
.
.
. (C) Copyright 1972-1978 John Walker
.
. This software is in the public domain
.
Q PROC 1
P* NAME 0
V* NAME 1
INSERT* NAME 2
REMOVE* NAME 3
PUT* NAME 4
GET* NAME 5
PMAY* NAME 6
PUSH* NAME 7
DO Q(1)>0 , LA,14*(Q(1)<3) 12,Q(1,1),Q(1,2),Q(1,3)
DO Q(0,0)=0 , LMJ 11,P
DO Q(0,0)=1 , LMJ 11,V
DO Q(0,0)=2 , LMJ 11,INSERT
DO Q(0,0)=3 , LMJ 11,REMOVE
DO Q(0,0)=4 , LMJ 15,PUT
DO Q(0,0)=5 , LMJ 15,GET
DO Q(0,0)=6 , LMJ 11,PMAY
DO Q(0,0)=7 , LMJ 11,PUSH
END
.
. FORK <ADDRESS>
.
P PROC *1
FORK* NAME 0
DO P(1)>0 , LA,14*(P(1)<3) 13,P(1,1),P(1,2),P(1,3)
DO P(0,0)=0 , LMJ 11,FORK
END
.
P PROC 0,1
EXIT* NAME 0
LMJ X11,EXIT
END
.
. INITQ <QUEUE ADDRESS>
.
P PROC *1
INITQ* NAME 0
DO P(1)>0 , ;
LA,14*(P(1)<3) 12,P(1,1),P(1,2),P(1,3)
LMJ 11,INITQ
END
.
. INITPVQ <COUNT>,<P/V QUEUE ADDRESS>
. INITBB <COUNT>,<BOUNDED BUFFER ADDRESS>
.
P PROC *1
INITPVQ* NAME 0
INITBB* NAME 1
DO P(1)>0 , LA,14 13,P(1,1)
DO P(1)>1 , ;
LA,14*(P(1)<4) 12,P(1,2),P(1,3),P(1,4)
DO P(0,0)=0 , LMJ 11,INITPVQ
DO P(0,0)=1 , LMJ 11,INITBB
END
.
. QUEUE [FIRST[,LAST]]
.
P PROC 1,QL
QUEUE* NAME 0
A(0) EQU $
DO P(1)>0 ,A(0) EQU P(1,1).
A(1) EQU A(0)
DO P(1)>1 ,A(1) EQU P(1,2)
* A(1),A(0)
DO 1-(TSQ=0) , T$CELL 0
DO TSQ=0 , * 0
END
.
. PVQUEUE N N = INITIAL COUNT, >=0.
.
P PROC 1,QPL
PVQUEUE* NAME 0
DO TSQ=0 , * $,$ QUEUE HEAD UNLESS TS QUEUING
* 0,P(1,1) COUNT, WORD 0 OR 1
DO TSQ=1 , TCELL$ 0
END
.
P PROC 1,QL+2*QPL
BBUF* NAME 0
QUEUE . DATA QUEUE
PVQUEUE 0 NOT-EMPTY QUEUE.
PVQUEUE P(1,1) NOT-FULL QUEUE.
END
.
. THE PROCEDURE 'SCHDEF' DEFINES THE FIELDS USED
. BY THE SCHEDULER. ANY ELEMENT WHICH REFERENCES
. THE PROCS 'QUEUE', 'PVQUEUE', OR 'BBUF' MUST
. CALL SCHPROC BEFORE THE FIRST SUCH REFERENCE. THE
. TAG 'TSQ' DEFINES WHETHER THE SCHEDULER WILL USE
. TEST AND SET QUEUEING FOR SYNCHRONISATION. IF
. IT IS CHANGED, THE SCHEDULER ITSELF MUST BE
. REASSEMBLED.
.
DEF
QHEAD EQUF 1 T/S CELL.
QHL EQUF 0,,2 QUEUE BACK LINK.
QFL EQUF 0,,1 QUEUE FORWARD LINK.
QN EQUF 1-TSQ,,3 QUEUE COUNT.
QL EQU 2 LENGTH OF QUEUE HEADER.
QPL EQU 2 P/V QUEUE HEADER SIZE.
SCHDEF* PROC 0
END