--Author: John Maxwell --last modified: November 28, 1981 8:44 AM DIRECTORY MusicDefs: FROM "MusicDefs", Real USING [FixI], Sheet USING [Height]; Beam: DEFINITIONS IMPORTS MusicDefs, Real, Sheet = BEGIN OPEN MusicDefs; AddBeam:PROCEDURE[b:BeamPTR,new:BeamPTR]; AddChord:PROCEDURE[b:BeamPTR,c:ChordPTR]; AddNote:PROCEDURE[b:BeamPTR,n:NotePTR]; Draw:PROCEDURE[b:BeamPTR] RETURNS[INTEGER,INTEGER]; Drawn:PROCEDURE[b:BeamPTR] RETURNS[BOOLEAN]; Grace:PROCEDURE[b:BeamPTR] RETURNS[BOOLEAN]; InVoice:PROCEDURE[b:BeamPTR,voice:CARDINAL] RETURNS[BOOLEAN]; Remove:PROCEDURE[beam:BeamPTR,n:NotePTR,c:ChordPTR,b:BeamPTR]; SetStems:PROCEDURE[b:BeamPTR]; SetSyncs:PROCEDURE[b:BeamPTR]; Sort:PROCEDURE[b:BeamPTR]; --inline procedures GetHeapIndex:PUBLIC PROC[p:BeamPTR] RETURNS[CARDINAL] = INLINE {FOR i:CARDINAL IN [0..beamHeapLength) DO IF beamHeap[i]=p THEN RETURN[i]; ENDLOOP; RETURN[beamHeapLength]}; Height:PROCEDURE[b:BeamPTR,time:Time] RETURNS[h:INTEGER] = INLINE {h _ b.height+Sheet.Height[b.sync1.time,,b.staff]; IF time#b.sync1.time THEN h _ h + Real.FixI[(time-b.sync1.time)*b.tilt]}; Length:PROC[b:BeamPTR] RETURNS[CARDINAL] = INLINE {FOR i:CARDINAL IN [0..beamLength] DO IF i=beamLength THEN RETURN[i]; IF b.chord[i]=endOfBeam THEN RETURN[i]; ENDLOOP; ERROR}; time:PUBLIC PROCEDURE[chord:VariousPTR] RETURNS[Time] = INLINE {WITH ev:chord SELECT FROM note => RETURN[ev.n.sync.time]; chord => RETURN[ev.c.note[0].sync.time]; beam => RETURN[IF ev.b.sync1#NIL THEN ev.b.sync1.time ELSE 0]; ENDCASE => ERROR}; END.. (1792)\226b7B35b8B34b7B33b4B48b5B40b5B40b7B55b6B57b8B23b8B23b4B45b12B189b6B193b6B182b4B259b