Sheet.mesa
Copyright (C) 1981, 1984 Xerox Corporation. All rights reserved.
Author: John Maxwell
last modified: November 23, 1981 11:10 AM
Edited by Doug Wyatt, June 14, 1984 1:03:00 pm PDT
DIRECTORY
Graphics USING [Context],
MusicDefs;
Sheet: CEDAR DEFINITIONS
= BEGIN OPEN MusicDefs;
Draw: PROC;
DrawClef: PROC[pitch, staff: INTEGER, time: Time];
DrawOctava: PROC[pitch, staff, height: INTEGER, t1, t2: Time];
FindLine: PROC[t: Time] RETURNS[INTEGER];
FindSection: PROC[t: Time] RETURNS[INTEGER];
GetStyle: PROC[time: Time] RETURNS[INTEGER];
HiLite: PROC[tex: Texture, t1, t2: Time];
Initialize: PROC[dc: Graphics.Context];
Reset: PROC;
Scale: PROC[newScale: INTEGER];
Scroll: PROC[lines: INTEGER]; -- "currentLine ← currentLine+lines"
SetBegin: PROC[now: Time];
SetClef: PROC[pitch, staff: INTEGER, time: Time];
SetOctava: PROC[pitch, staff, height: INTEGER, t1, t2: Time];
SetStyle: PROC[index: INTEGER, t1, t2: Time];
(formerly) INLINE Procedures
Last: PROC[l: CARDINAL] RETURNS[CARDINAL];
LineNumber: PROC[l: CARDINAL] RETURNS[n: CARDINAL ← 1];
NextLine: PROC[l: CARDINAL] RETURNS[CARDINAL];
NextStaff: PROC[s: CARDINAL, t: Time] RETURNS[CARDINAL];
NormalPitch: PROC[staff: CARDINAL] RETURNS[INTEGER];
PriorLine: PROC[l: CARDINAL] RETURNS[CARDINAL];
PriorStaff: PROC[s: CARDINAL, t: Time] RETURNS[CARDINAL];
OctavaHeight: PROC[pitch, height: INTEGER] RETURNS[INTEGER];
*************************************************************************
mapping from sheet to screen and vice-versa
*************************************************************************
NotePTR => [Time, Pitch, Staff] => [Time, Height] => ScreenPoint; UNAMBIGUOUSLY!
[Time, Height] <= ScreenPoint; ambiguous when point is between lines
[Time, Pitch, Staff] <= [Time, Height]; ambiguous when between staffs
NotePTR <= [Time, Pitch, Staff]; ambiguous because of graphical adjustments
default: INTEGER = 1000;
AlternateTime: PROC[t1: Time, h1, lines: INTEGER] RETURNS[time: Time, height: INTEGER];
Height: PROC[t: Time, pitch: INTEGER ← default, staff: CARDINAL] RETURNS[INTEGER];
NearestStaff: PROC[t: Time, height: INTEGER] RETURNS[INTEGER];
NearestTime: PROC[x, y: INTEGER ← default] RETURNS[time: Time, height: INTEGER];
Map: PROC[t: Time, pitch: INTEGER ← default, staff: CARDINAL] RETURNS[x, y: INTEGER];
MapHeight: PROC[t: Time, height: INTEGER] RETURNS[x, y: INTEGER];
MapNote: PROC[n: NotePTR] RETURNS[x, y: INTEGER];
Pitch: PROC[t: Time, height: INTEGER, staff: CARDINAL] RETURNS[INTEGER];
ScreenPoint: PROC RETURNS[x, y: INTEGER];
END.