. . 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