--Author: John Maxwell --last modified: November 28, 1981 8:44 AM DIRECTORY MusicDefs: FROM "MusicDefs"; Sync: DEFINITIONS IMPORTS MusicDefs = BEGIN OPEN MusicDefs; AddNote:PROCEDURE[s:SyncPTR,n:NotePTR]; AddTimes:PROCEDURE[s:SyncPTR,time:Time,toc:Time]; Adjust:PUBLIC PROCEDURE[s:SyncPTR]; Draw:PROCEDURE[s:SyncPTR]; Hidden:PROCEDURE[f,s:CARDINAL,leftEdge:Time] RETURNS[BOOLEAN]; Octava:PROCEDURE[s:SyncPTR] RETURNS[SyncPTR]; RemoveNote:PROCEDURE[s:SyncPTR,n:NotePTR]; SetStave:PROCEDURE[oldS:StavesPTR,new:SyncPTR]; --INLINE Procedures GetScoreIndex:PUBLIC PROCEDURE[s:SyncPTR] RETURNS[CARDINAL] = INLINE {i,j,index:CARDINAL_0; binary:CARDINAL _ 8192; IF s=NIL THEN RETURN[scoreLength]; FOR i IN [0..13) DO binary _ binary/2; IF index+binary>=scoreLength THEN LOOP; IF score[index+binary].time<=s.time THEN index_index+binary; IF score[index].time#s.time THEN LOOP; IF score[index]=s THEN RETURN[index]; --must be a nearby sync FOR j IN (index..scoreLength) WHILE score[j].time=s.time DO IF score[j]=s THEN RETURN[j]; ENDLOOP; FOR j DECREASING IN [0..index) WHILE score[j].time=s.time DO IF score[j]=s THEN RETURN[j]; ENDLOOP; EXIT; ENDLOOP; -- FAILURE: score isn't sorted. Try again. FOR i IN [0..scoreLength) DO IF score[i]=s THEN RETURN[i]; ENDLOOP; RETURN[scoreLength]}; --not in score GetStaff:PROCEDURE[s:SyncPTR,staff:CARDINAL] RETURNS[LONG POINTER TO Staff] = INLINE {staves:StavesPTR = LOOPHOLE[@s.event]; RETURN[@staves.staff[staff]]}; Grace:PROCEDURE[s:SyncPTR] RETURNS[BOOLEAN] = INLINE {IF s.type#notes THEN RETURN[FALSE]; FOR j:CARDINAL IN [0..syncLength) DO IF s.event[j]=NIL THEN EXIT; IF ~s.event[j].grace THEN RETURN[FALSE]; ENDLOOP; RETURN[TRUE]}; InVoice:PROCEDURE[s:SyncPTR,voice:CARDINAL] RETURNS[BOOLEAN] = INLINE {FOR j:CARDINAL IN [0..syncLength) DO IF s.event[j]=NIL THEN EXIT; IF s.event[j].voice=voice THEN RETURN[TRUE]; ENDLOOP; RETURN[FALSE]}; Length:PROC[s:SyncPTR] RETURNS[CARDINAL] = INLINE {FOR i:CARDINAL IN [0..syncLength] DO IF i=syncLength THEN RETURN[i]; IF s.event[i]=NIL THEN RETURN[i]; ENDLOOP; ERROR}; END.. (0,3648)(1,4288)(2,4928)\172b8B33b8B42b6B30b4B23b6B57b6B40b10B33b8B62b13B776b8B152b5B232b7B214b6B181b