' Music Editor version 1.0 beta ` ' ` ' This is not a stand-alone program and can only be run as a subprogram of ` ' sister program MUSIC2.BAS, which also requires Microsoft QBasic to run. ` ' ` ' To exit QBasic, type Alt, F, X. ` ' ` DECLARE FUNCTION InputString$ (Message$, WorkingString$) DECLARE SUB RenumberGroups () DECLARE SUB SortNotesSelected () DECLARE SUB UpdateDrawPositions () DECLARE SUB DrawScreen () DECLARE SUB CompileArray () DECLARE SUB DrawStaff (Stf%) DECLARE SUB DrawHeader () DECLARE SUB DrawGroup (Gp%, Colour%) DECLARE SUB DrawNote (Note%, Colour%) DECLARE SUB DrawLedgerLines (Note%, VerticalDisplace%) DECLARE SUB DrawDots (Note%, VerticalDisplace%, Colour%) DECLARE SUB DrawAccidentals (Note%, VerticalDisplace%, Colour%) DECLARE SUB InsertCursor () DECLARE SUB LedgerLine (col%, Row%, Colour%) DECLARE SUB DrawClef (Clf%, Hor%, Vert%, Colour%) DECLARE SUB DrawKeySig (KeySigVal%, Clf%, Hor%, Vert%, Colour%) DECLARE SUB DrawAccidental (Value%, col%, Row%, Colour%) DECLARE SUB Digit (Dgt%, Hor%, Vert%, Colour%) DECLARE SUB F6Mode () DECLARE SUB GetHeaderTextMode () DECLARE SUB F7Mode () DECLARE SUB ExportBitmap (Lines%) DECLARE SUB AddNotesToClipboard () DECLARE SUB Delete (Note%) DECLARE SUB Arrow (Top%, Bottom%) DECLARE SUB FindNotes (StartStaff%, StartCol%, EndStaff%, EndCol%, NoteTypes%) DECLARE SUB CompileIndex () DECLARE SUB Help (HelpScreen%) CONST FALSE = 0 CONST TRUE = -1 CONST PI = 3.141593 CONST MAXNUMBEROFNOTES = 1000 CONST MAXNUMBEROFGROUPS2 = 1500 CONST WorkingDirectory$ = "C:\RPM\programs\" CONST DefaultFileDirectory$ = "C:\RPM\MUSIC\" CONST Program1$ = "MUSIC2.BAS" CONST Program2$ = "MUSIC3.BAS" TYPE NoteType Staff AS INTEGER Vertical AS INTEGER Horizontal AS INTEGER selected AS INTEGER group AS INTEGER Kind AS INTEGER Pitch AS INTEGER length AS INTEGER tail AS INTEGER END TYPE TYPE CursorType Staff AS INTEGER Vertical AS INTEGER Horizontal AS INTEGER END TYPE TYPE StaffInitialType Ky AS INTEGER Staves AS INTEGER Staff2 AS INTEGER Staff3 AS INTEGER Staff4 AS INTEGER DrawPosition AS INTEGER END TYPE TYPE ClipboardType Posn AS INTEGER Vertical AS INTEGER group AS INTEGER Kind AS INTEGER Pitch AS INTEGER length AS INTEGER tail AS INTEGER END TYPE DIM SHARED NoteData(MAXNUMBEROFNOTES) AS NoteType DIM SHARED FileNos(MAXNUMBEROFNOTES) AS INTEGER DIM SHARED GroupNos(MAXNUMBEROFGROUPS2) AS INTEGER DIM SHARED StaffInitial(-121 TO 121) AS StaffInitialType DIM SHARED Header(3) AS STRING * 80 DIM SHARED NotesSelected(MAXNUMBEROFNOTES) AS INTEGER DIM SHARED GroupedNotes(MAXNUMBEROFNOTES) AS INTEGER DIM SHARED RefNos(MAXNUMBEROFGROUPS2) AS INTEGER COMMON SHARED CurrentNote AS NoteType DIM CurrentNote1 AS NoteType, CurrentNote2 AS NoteType COMMON SHARED Cursor AS CursorType COMMON SHARED ClipboardBuffer AS ClipboardType COMMON SHARED StaffInitial() AS StaffInitialType COMMON SHARED Header() AS STRING * 80 COMMON SHARED NotesSelected() AS INTEGER COMMON SHARED GroupedNotes() AS INTEGER COMMON SHARED RefNos() AS INTEGER COMMON SHARED NextNote%, NextGroup% COMMON SHARED TiePosition% COMMON SHARED SelectedNote%, NumberOfNotesSelected%, SelectionColour%, DrawNotesBlue% COMMON SHARED SizeOfClipboard% COMMON SHARED FirstStaffShown%, NumberOfStavesShown%, UpperStaff%, LowerStaff% COMMON SHARED AnchorCol%, StartCol%, EndCol%, AnchorStaff%, StartStaff%, EndStaff% COMMON SHARED DisplayMode% COMMON SHARED Mode%, IncludeCursor%, FileExists%, ChangesMade% COMMON SHARED DefaultCol% COMMON SHARED CurrentDirectory$, FileName$, S3MFileName$ COMMON SHARED NoteTypeDetermined% DIM SHARED NumberOfDrawnNotes% DIM SHARED WritePos& DIM StaffVals(0 TO 6) AS INTEGER DIM Channels(1 TO 15) AS INTEGER OPEN WorkingDirectory$ + "NOTEDATA.TMP" FOR RANDOM AS #2 LEN = 18 SELECT CASE Mode% CASE 1 GetHeaderTextMode CASE 2 'Export to BMP FirstStaff% = 120 LastStaff% = -120 FOR n% = 1 TO NextNote% - 1 GET #2, n%, CurrentNote1 IF CurrentNote1.Staff > LastStaff% THEN LastStaff% = CurrentNote1.Staff IF CurrentNote1.Staff < FirstStaff% THEN FirstStaff% = CurrentNote1.Staff NEXT n% DisplayMode% = 1 WritePos& = 63 OPEN DefaultFileDirectory$ + "OUT.BMP" FOR BINARY AS #4 FOR Staff% = LastStaff% TO FirstStaff% STEP -1 FirstStaffShown% = Staff% IncludeCursor% = FALSE UpdateDrawPositions CompileIndex CompileArray DrawScreen IF Staff% = 120 THEN ExportBitmap 480 ELSE ExportBitmap StaffInitial(Staff% + 1).DrawPosition NEXT Staff% DisplayMode% = 0 UpdateDrawPositions CASE 6 F6Mode CASE 7 CompileArray NumberOfNotesSelected% = 0 FOR Note% = 1 TO NumberOfDrawnNotes% IF NoteData(Note%).selected THEN NotesSelected(NumberOfNotesSelected%) = Note%: NumberOfNotesSelected% = NumberOfNotesSelected% + 1 NEXT Note% SelectionColour% = 12 F7Mode SelectionColour% = 10 CASE 13 DisplayMode% = 1 UpdateDrawPositions CompileArray EditSection% = 0 NumberOfStaves% = (StaffInitial(FirstStaffShown%).Staves AND 24) \ 8 + 1 SELECT CASE NumberOfStaves% CASE 1 StaffWidth% = 24 CASE 2 StaffWidth% = 24 + StaffInitial(FirstStaffShown%).Staff2 \ 128 CASE 3 StaffWidth% = 24 + StaffInitial(FirstStaffShown%).Staff3 \ 128 CASE 4 StaffWidth% = 24 + StaffInitial(FirstStaffShown%).Staff4 \ 128 END SELECT DO UpdateDrawPositions DrawScreen LOCATE 29, 1 PRINT "Press + to increase the spacing shown, - to decrease, Enter to update the "; LOCATE 30, 1 PRINT "screen, and ESC to finish. "; SELECT CASE EditSection% CASE NumberOfStaves% + 1 EXIT DO CASE 0 StartPosn% = (StaffInitial(FirstStaffShown%).Staves AND 1920) \ 128 Arrow 0, 15 + StartPosn% * 3 DO key$ = INKEY$ SELECT CASE key$ CASE "+" IF StartPosn% < 15 THEN StartPosn% = StartPosn% + 1 ELSE WHILE INKEY$ <> "": WEND: BEEP Arrow 0, StartPosn% * 3 + 15 CASE "-" IF StartPosn% > 0 THEN StartPosn% = StartPosn% - 1 ELSE WHILE INKEY$ <> "": WEND: BEEP Arrow 0, StartPosn% * 3 + 15 CASE CHR$(13) FOR Staff% = UpperStaff% TO LowerStaff% StaffInitial(Staff%).Staves = (StaffInitial(Staff%).Staves AND 30847) OR (StartPosn% * 128) NEXT Staff% EXIT DO CASE CHR$(27) FOR Staff% = UpperStaff% TO LowerStaff% StaffInitial(Staff%).Staves = (StaffInitial(Staff%).Staves AND 30847) OR (StartPosn% * 128) NEXT Staff% EditSection% = EditSection% + 1 EXIT DO CASE "" CASE ELSE WHILE INKEY$ <> "": WEND BEEP END SELECT LOOP CASE 1 StartPosn% = (StaffInitial(FirstStaffShown%).Staves AND 30720) \ 2048 Arrow StaffWidth% + 15 + ((StaffInitial(FirstStaffShown%).Staves AND 1920) \ 128) * 3, StaffWidth% + 30 + ((StaffInitial(FirstStaffShown%).Staves AND 1920) \ 128) * 3 + StartPosn% * 3 DO key$ = INKEY$ SELECT CASE key$ CASE "+" IF StartPosn% < 15 THEN StartPosn% = StartPosn% + 1 ELSE WHILE INKEY$ <> "": WEND: BEEP Arrow StaffWidth% + 15 + ((StaffInitial(FirstStaffShown%).Staves AND 1920) \ 128) * 3, StaffWidth% + 30 + ((StaffInitial(FirstStaffShown%).Staves AND 1920) \ 128) * 3 + StartPosn% * 3 CASE "-" IF StartPosn% > 0 THEN StartPosn% = StartPosn% - 1 ELSE WHILE INKEY$ <> "": WEND: BEEP Arrow StaffWidth% + 15 + ((StaffInitial(FirstStaffShown%).Staves AND 1920) \ 128) * 3, StaffWidth% + 30 + ((StaffInitial(FirstStaffShown%).Staves AND 1920) \ 128) * 3 + StartPosn% * 3 CASE CHR$(13) FOR Staff% = UpperStaff% TO LowerStaff% StaffInitial(Staff%).Staves = (StaffInitial(Staff%).Staves AND 2047) OR (StartPosn% * 2048) NEXT Staff% EXIT DO CASE CHR$(27) FOR Staff% = UpperStaff% TO LowerStaff% StaffInitial(Staff%).Staves = (StaffInitial(Staff%).Staves AND 2047) OR (StartPosn% * 2048) NEXT Staff% EditSection% = EditSection% + 1 EXIT DO CASE "" CASE ELSE WHILE INKEY$ <> "": WEND BEEP END SELECT LOOP CASE 2 StartPosn% = StaffInitial(FirstStaffShown%).Staff2 \ 128 Arrow 39 + ((StaffInitial(FirstStaffShown%).Staves AND 1920) \ 128) * 3, 15 + ((StaffInitial(FirstStaffShown%).Staves AND 1920) \ 128) * 3 + StartPosn% DO key$ = INKEY$ SELECT CASE key$ CASE "+" IF StartPosn% < 183 THEN StartPosn% = StartPosn% + 1 ELSE WHILE INKEY$ <> "": WEND: BEEP Arrow 39 + ((StaffInitial(FirstStaffShown%).Staves AND 1920) \ 128) * 3, 15 + ((StaffInitial(FirstStaffShown%).Staves AND 1920) \ 128) * 3 + StartPosn% CASE "-" IF StartPosn% > 0 THEN StartPosn% = StartPosn% - 1 ELSE WHILE INKEY$ <> "": WEND: BEEP Arrow 39 + ((StaffInitial(FirstStaffShown%).Staves AND 1920) \ 128) * 3, 15 + ((StaffInitial(FirstStaffShown%).Staves AND 1920) \ 128) * 3 + StartPosn% CASE CHR$(13) FOR Staff% = UpperStaff% TO LowerStaff% StaffInitial(Staff%).Staff2 = (StaffInitial(Staff%).Staff2 AND 127) OR StartPosn% * 128 IF StaffInitial(Staff%).Staff3 \ 128 < StartPosn% + 36 THEN StaffInitial(Staff%).Staff3 = (StaffInitial(Staff%).Staff3 AND 127) OR (StartPosn% + 36) * 128 IF StaffInitial(Staff%).Staff4 \ 128 < StartPosn% + 72 THEN StaffInitial(Staff%).Staff4 = (StaffInitial(Staff%).Staff4 AND 127) OR (StartPosn% + 72) * 128 NEXT Staff% EXIT DO CASE CHR$(27) FOR Staff% = UpperStaff% TO LowerStaff% StaffInitial(Staff%).Staff2 = (StaffInitial(Staff%).Staff2 AND 127) OR StartPosn% * 128 IF StaffInitial(Staff%).Staff3 \ 128 < StartPosn% + 36 THEN StaffInitial(Staff%).Staff3 = (StaffInitial(Staff%).Staff3 AND 127) OR (StartPosn% + 36) * 128 IF StaffInitial(Staff%).Staff4 \ 128 < StartPosn% + 72 THEN StaffInitial(Staff%).Staff4 = (StaffInitial(Staff%).Staff4 AND 127) OR (StartPosn% + 72) * 128 NEXT Staff% EditSection% = EditSection% + 1 EXIT DO CASE "" CASE ELSE WHILE INKEY$ <> "": WEND BEEP END SELECT LOOP CASE 3 StartPosn% = StaffInitial(FirstStaffShown%).Staff3 \ 128 Arrow 39 + StaffInitial(FirstStaffShown%).Staff2 \ 128 + ((StaffInitial(FirstStaffShown%).Staves AND 1920) \ 128) * 3, 15 + ((StaffInitial(FirstStaffShown%).Staves AND 1920) \ 128) * 3 + StartPosn% DO key$ = INKEY$ SELECT CASE key$ CASE "+" IF StartPosn% < 219 THEN StartPosn% = StartPosn% + 1 ELSE WHILE INKEY$ <> "": WEND: BEEP Arrow 39 + StaffInitial(FirstStaffShown%).Staff2 \ 128 + ((StaffInitial(FirstStaffShown%).Staves AND 1920) \ 128) * 3, 15 + ((StaffInitial(FirstStaffShown%).Staves AND 1920) \ 128) * 3 + StartPosn% CASE "-" IF StartPosn% > 0 THEN StartPosn% = StartPosn% - 1 ELSE WHILE INKEY$ <> "": WEND: BEEP Arrow 39 + StaffInitial(FirstStaffShown%).Staff2 \ 128 + ((StaffInitial(FirstStaffShown%).Staves AND 1920) \ 128) * 3, 15 + ((StaffInitial(FirstStaffShown%).Staves AND 1920) \ 128) * 3 + StartPosn% CASE CHR$(13) FOR Staff% = UpperStaff% TO LowerStaff% StaffInitial(Staff%).Staff3 = (StaffInitial(Staff%).Staff3 AND 127) OR StartPosn% * 128 IF StaffInitial(Staff%).Staff4 \ 128 < StartPosn% + 36 THEN StaffInitial(Staff%).Staff4 = (StaffInitial(Staff%).Staff4 AND 127) OR (StartPosn% + 36) * 128 NEXT Staff% EXIT DO CASE CHR$(27) FOR Staff% = UpperStaff% TO LowerStaff% StaffInitial(Staff%).Staff3 = (StaffInitial(Staff%).Staff3 AND 127) OR StartPosn% * 128 IF StaffInitial(Staff%).Staff4 \ 128 < StartPosn% + 36 THEN StaffInitial(Staff%).Staff4 = (StaffInitial(Staff%).Staff4 AND 127) OR (StartPosn% + 36) * 128 NEXT Staff% EditSection% = EditSection% + 1 EXIT DO CASE "" CASE ELSE WHILE INKEY$ <> "": WEND BEEP END SELECT LOOP CASE 4 StartPosn% = StaffInitial(FirstStaffShown%).Staff4 \ 128 Arrow 39 + StaffInitial(FirstStaffShown%).Staff3 \ 128 + ((StaffInitial(FirstStaffShown%).Staves AND 1920) \ 128) * 3, 15 + ((StaffInitial(FirstStaffShown%).Staves AND 1920) \ 128) * 3 + StartPosn% DO key$ = INKEY$ SELECT CASE key$ CASE "+" IF StartPosn% < 255 THEN StartPosn% = StartPosn% + 1 ELSE WHILE INKEY$ <> "": WEND: BEEP Arrow 39 + StaffInitial(FirstStaffShown%).Staff3 \ 128 + ((StaffInitial(FirstStaffShown%).Staves AND 1920) \ 128) * 3, 15 + ((StaffInitial(FirstStaffShown%).Staves AND 1920) \ 128) * 3 + StartPosn% CASE "-" IF StartPosn% > 0 THEN StartPosn% = StartPosn% - 1 ELSE WHILE INKEY$ <> "": WEND: BEEP Arrow 39 + StaffInitial(FirstStaffShown%).Staff3 \ 128 + ((StaffInitial(FirstStaffShown%).Staves AND 1920) \ 128) * 3, 15 + ((StaffInitial(FirstStaffShown%).Staves AND 1920) \ 128) * 3 + StartPosn% CASE CHR$(13) FOR Staff% = UpperStaff% TO LowerStaff% StaffInitial(Staff%).Staff4 = (StaffInitial(Staff%).Staff4 AND 127) OR StartPosn% * 128 NEXT Staff% EXIT DO CASE CHR$(27) FOR Staff% = UpperStaff% TO LowerStaff% StaffInitial(Staff%).Staff4 = (StaffInitial(Staff%).Staff4 AND 127) OR StartPosn% * 128 NEXT Staff% EditSection% = EditSection% + 1 EXIT DO CASE "" CASE ELSE WHILE INKEY$ <> "": WEND BEEP END SELECT LOOP END SELECT LOOP CASE 15 DisplayMode% = 1 CLS LOCATE 2, 1 PRINT "(This should normally be a multiple of 4, or of 8 if the music contains any breves)" LOCATE 1, 1 INPUT "Length of crotchet (quarter note) in frames: ", CrotchetLength% OPEN S3MFileName$ FOR OUTPUT AS #1 PRINT #1, "STIMPORT"; PRINT #1, CHR$(8); CHR$(0); CHR$(0); CHR$(0); CHR$(0); CHR$(0); CHR$(0); CHR$(0); FOR Channel% = 1 TO 15 Channels(Channel%) = -1 NEXT Channel% Channel% = 1 TimePos% = 0 FirstStaff% = 121 LastStaff% = -121 FOR Note% = 1 TO NextNote% - 1 GET #2, Note%, CurrentNote1 IF CurrentNote1.Staff < FirstStaff% THEN FirstStaff% = CurrentNote1.Staff IF CurrentNote1.Staff > LastStaff% THEN LastStaff% = CurrentNote1.Staff NEXT Note% FOR Staff% = FirstStaff% TO LastStaff% FirstStaffShown% = Staff% UpdateDrawPositions CompileIndex CompileArray DrawScreen IF StaffInitial(Staff%).Ky = 1 THEN StaffVals(3) = 4 ELSE IF StaffInitial(Staff%).Ky > 8 THEN StaffVals(3) = 6 ELSE StaffVals(3) = 5 IF StaffInitial(Staff%).Ky < 3 THEN StaffVals(0) = -1 ELSE IF StaffInitial(Staff%).Ky > 9 THEN StaffVals(0) = 1 ELSE StaffVals(0) = 0 IF StaffInitial(Staff%).Ky < 4 THEN StaffVals(4) = 6 ELSE IF StaffInitial(Staff%).Ky > 10 THEN StaffVals(4) = 8 ELSE StaffVals(4) = 7 IF StaffInitial(Staff%).Ky < 5 THEN StaffVals(1) = 1 ELSE IF StaffInitial(Staff%).Ky > 11 THEN StaffVals(1) = 3 ELSE StaffVals(1) = 2 IF StaffInitial(Staff%).Ky < 6 THEN StaffVals(5) = 8 ELSE IF StaffInitial(Staff%).Ky > 12 THEN StaffVals(5) = 10 ELSE StaffVals(5) = 9 IF StaffInitial(Staff%).Ky < 7 THEN StaffVals(2) = 3 ELSE IF StaffInitial(Staff%).Ky > 13 THEN StaffVals(2) = 5 ELSE StaffVals(2) = 4 IF StaffInitial(Staff%).Ky < 8 THEN StaffVals(6) = 10 ELSE IF StaffInitial(Staff%).Ky = 15 THEN StaffVals(6) = 12 ELSE StaffVals(6) = 11 FOR Hor% = 1 TO 120 TimePosDetermined% = FALSE SELECT CASE (StaffInitial(Staff%).Staves AND 24) \ 8 CASE 0 LineLength% = 54 CASE 1 LineLength% = 54 + (StaffInitial(Staff%).Staff2 AND 32640) \ 128 CASE 2 LineLength% = 54 + (StaffInitial(Staff%).Staff3 AND 32640) \ 128 CASE 3 LineLength% = 54 + (StaffInitial(Staff%).Staff4 AND 32640) \ 128 END SELECT LINE (31 + Hor% * 5, StaffInitial(Staff%).DrawPosition + ((StaffInitial(Staff%).Staves AND 1920) \ 128) * 3)-(32 + Hor% * 5, StaffInitial(Staff%).DrawPosition + ((StaffInitial(Staff%).Staves AND 1920) \ 128) * 3 + LineLength%), 1, BF LOCATE 23 PRINT "Working ..." + SPACE$(229) LOCATE 24 PRINT "Staff number "; Staff% PRINT "Column "; Hor% Clef1Note% = 0 Clef2Note% = 0 Clef3Note% = 0 Clef4Note% = 0 FOR n% = 1 TO NumberOfDrawnNotes% - 1 IF NoteData(n%).Kind = 11 AND NoteData(n%).Staff = NoteData(Note%).Staff AND NoteData(n%).Horizontal <= NoteData(Note%).Horizontal THEN SELECT CASE NoteData(n%).tail CASE 0 IF Clef1Note% = 0 OR NoteData(n%).Horizontal > NoteData(Clef1Note%).Horizontal THEN Clef1Note% = n% CASE 1 IF Clef2Note% = 0 OR NoteData(n%).Horizontal > NoteData(Clef2Note%).Horizontal THEN Clef2Note% = n% CASE 2 IF Clef3Note% = 0 OR NoteData(n%).Horizontal > NoteData(Clef3Note%).Horizontal THEN Clef3Note% = n% CASE 3 IF Clef4Note% = 0 OR NoteData(n%).Horizontal > NoteData(Clef4Note%).Horizontal THEN Clef4Note% = n% END SELECT END IF NEXT n% FOR ShortStaff% = 0 TO (StaffInitial(Staff%).Staves AND 24) \ 8 SELECT CASE ShortStaff% CASE 0 IF Clef1Note% > 0 THEN Clef1% = NoteData(Clef1Note%).Pitch ELSE Clef1% = StaffInitial(NoteData(Note%).Staff).Staves AND 7 CASE 1 IF Clef2Note% > 0 THEN Clef2% = NoteData(Clef2Note%).Pitch ELSE Clef2% = StaffInitial(NoteData(Note%).Staff).Staff2 AND 7 CASE 2 IF Clef3Note% > 0 THEN Clef3% = NoteData(Clef3Note%).Pitch ELSE Clef3% = StaffInitial(NoteData(Note%).Staff).Staff3 AND 7 CASE 3 IF Clef4Note% > 0 THEN Clef4% = NoteData(Clef4Note%).Pitch ELSE Clef4% = StaffInitial(NoteData(Note%).Staff).Staff4 AND 7 END SELECT NEXT ShortStaff% FOR Note% = 1 TO NumberOfDrawnNotes% IF NoteData(Note%).Staff = Staff% AND NoteData(Note%).Horizontal = Hor% AND (NoteData(Note%).Kind = 1 OR NoteData(Note%).Kind = 2 OR NoteData(Note%).Kind = 7 OR NoteData(Note%).Kind = 8) THEN IF NOT TimePosDetermined% THEN LOCATE 23, 1 INPUT "Enter Time position (in frames) for chord: ", NewTimePos% TimePosDetermined% = TRUE END IF WHILE TimePos% < NewTimePos% WHILE Channel% < 16 IF Channels(Channel%) = TimePos% THEN PRINT #1, CHR$(Channel%); CHR$(254); CHR$(0); CHR$(255); CHR$(0); CHR$(0); ELSE PRINT #1, CHR$(Channel%); CHR$(255); CHR$(0); CHR$(255); CHR$(0); CHR$(0); END IF Channel% = Channel% + 1 WEND Channel% = 1 PRINT #1, CHR$(0); TimePos% = TimePos% + 1 WEND SELECT CASE NoteData(Note%).Vertical CASE 0 TO 49 Clef% = Clef1% CASE 50 TO 99 Clef% = Clef2% CASE 100 TO 149 Clef% = Clef3% CASE 150 TO 199 Clef% = Clef4% END SELECT SELECT CASE Clef% CASE 1 LowestNotePoss% = 10 CASE 2 LowestNotePoss% = 8 CASE 3 LowestNotePoss% = 4 CASE 4 LowestNotePoss% = 2 CASE 5 LowestNotePoss% = -2 END SELECT DistUp% = LowestNotePoss% + (49 - NoteData(Note%).Vertical MOD 50) Up% = (DistUp% MOD 7) * 2 IF Up% > 2 THEN Up% = Up% - 1 SELECT CASE NoteData(Note%).Pitch CASE 1 Pitch% = StaffVals(DistUp% MOD 7) CASE 2 Pitch% = Up% CASE 3 Pitch% = Up% - 1 CASE 4 Pitch% = Up% + 1 CASE 5 Pitch% = Up% - 2 CASE 6 Pitch% = Up% + 2 END SELECT VertPos% = (DistUp% \ 7) * 12 + Pitch% WHILE VertPos% < 0 VertPos% = VertPos% + 7 WEND WHILE Channels(Channel%) > TimePos% PRINT #1, CHR$(Channel%); CHR$(255); CHR$(0); CHR$(255); CHR$(0); CHR$(0); Channel% = Channel% + 1 WEND PRINT #1, CHR$(Channel%); CHR$((VertPos% \ 12) * 16 + VertPos% MOD 12); CHR$(1); CHR$(255); CHR$(0); CHR$(0); IF NoteData(Note%).Kind = 2 OR NoteData(Note%).Kind = 8 THEN DotMultFactor = 3 / 2 ELSE DotMultFactor = 1 Channels(Channel%) = TimePos% + (2 ^ (4 - NoteData(Note%).length)) * CrotchetLength% * DotMultFactor Channel% = Channel% + 1 END IF NEXT Note% NEXT Hor% NEXT Staff% PRINT #1, CHR$(255); CLOSE #1 CLS PRINT "Operation successfully completed!" PRINT PRINT "You can now play the music using the Scream Tracker program (version 3)." PRINT "There are likely to be some errors, and the tracking style will be most" PRINT "unprofessional, but it is hoped that using this utility will have saved you" PRINT "_some_ time ...!" PRINT PRINT "Open the file in Scream Tracker, load a suitable instrument into Intrument 1," PRINT "play the tune :-). Then make any necessary changes and resave the file using" PRINT "Scream Tracker (you are advised to call it by a different name, deleting the" PRINT "original)." PRINT PRINT "(Press any key to return to the music editor)" WHILE INKEY$ <> "": WEND WHILE INKEY$ = "": WEND FirstStaffShown% = -121 UpdateDrawPositions END SELECT CompileIndex CompileArray DrawScreen IF Mode% = 2 THEN ExportBitmap 60 Pixel% = &H4D42 PUT #4, &H1, Pixel% Height& = WritePos& - 1 PUT #4, &H3, Height& Height& = 0 PUT #4, &H7, Height& PUT #4, &H1F, Height& PUT #4, &H23, Height& PUT #4, &H2F, Height& PUT #4, &H33, Height& PUT #4, &H37, Height& Height& = &H3E PUT #4, &HB, Height& Height& = &H28 PUT #4, &HF, Height& Height& = &H280 PUT #4, &H13, Height& Height& = (WritePos& - &H3E - 1) \ 80 PUT #4, &H17, Height& Pixel% = 1 PUT #4, &H1B, Pixel% PUT #4, &H1D, Pixel% Height& = &HECE PUT #4, &H27, Height& Height& = &HED8 PUT #4, &H2B, Height& Height& = &HFFFFFF PUT #4, &H3B, Height& CLOSE #4 END IF Mode% = 0 FOR Note% = 1 TO NumberOfDrawnNotes% PUT #2, FileNos(Note%), NoteData(Note%) NEXT Note% CLOSE #2 CHAIN WorkingDirectory$ + Program1$ SUB AddNotesToClipboard SHARED NumberOfNotesSelected%, SizeOfClipboard% LowestStaff% = 120 LowestCol% = 120 FOR n% = 0 TO NumberOfNotesSelected% - 1 IF NoteData(NotesSelected(n%)).Staff < LowestStaff% THEN LowestStaff% = NoteData(NotesSelected(n%)).Staff LowestCol% = NoteData(NotesSelected(n%)).Horizontal ELSEIF NoteData(NotesSelected(n%)).Staff = LowestStaff% AND NoteData(NotesSelected(n%)).Horizontal < LowestCol% THEN LowestCol% = NoteData(NotesSelected(n%)).Horizontal END IF NEXT n% SizeOfClipboard% = NumberOfNotesSelected% OPEN WorkingDirectory$ + "CLIPBRD.TMP" FOR RANDOM AS #3 LEN = 14 FOR n% = 1 TO SizeOfClipboard% ClipboardBuffer.Posn = (NoteData(NotesSelected(n% - 1)).Staff - LowestStaff%) * 120 + (NoteData(NotesSelected(n% - 1)).Horizontal - LowestCol%) ClipboardBuffer.Vertical = NoteData(NotesSelected(n% - 1)).Vertical ClipboardBuffer.group = NoteData(NotesSelected(n% - 1)).group ClipboardBuffer.Pitch = NoteData(NotesSelected(n% - 1)).Pitch ClipboardBuffer.length = NoteData(NotesSelected(n% - 1)).length ClipboardBuffer.Kind = NoteData(NotesSelected(n% - 1)).Kind ClipboardBuffer.tail = NoteData(NotesSelected(n% - 1)).tail PUT #3, n%, ClipboardBuffer NEXT n% CLOSE #3 END SUB SUB Arrow (Top%, Bottom%) LINE (0, 0)-(7, 447), 15, BF LINE (4, Top%)-(4, Bottom%), 7 LINE (4, Top%)-(1, Top% + 3), 7 LINE (4, Top%)-(7, Top% + 3), 7 LINE (4, Bottom%)-(1, Bottom% - 3), 7 LINE (4, Bottom%)-(7, Bottom% - 3), 7 END SUB SUB CompileArray DIM CurrentNote1 AS NoteType NumberOfDrawnNotes% = 0 GroupNos(0) = 0 FOR Gp% = 1 TO NextGroup% - 1 IncludeGroup% = FALSE FOR Ref% = RefNos(Gp% - 1) + 1 TO RefNos(Gp%) Note% = NumberOfDrawnNotes% + Ref% - RefNos(Gp% - 1) GET #2, GroupedNotes(Ref%), NoteData(Note%) FileNos(Note%) = GroupedNotes(Ref%) IF StaffInitial(NoteData(Note%).Staff).DrawPosition > -1 OR NoteData(Note%).selected THEN IncludeGroup% = TRUE NEXT Ref% IF IncludeGroup% THEN NumberOfDrawnNotes% = NumberOfDrawnNotes% + RefNos(Gp%) - RefNos(Gp% - 1) GroupNos(Gp%) = NumberOfDrawnNotes% NEXT Gp% FOR Note% = 1 TO NextNote% - 1 GET #2, Note%, CurrentNote1 IF (StaffInitial(CurrentNote1.Staff).DrawPosition > -1 OR CurrentNote1.selected) AND CurrentNote1.group = 0 THEN NumberOfDrawnNotes% = NumberOfDrawnNotes% + 1 NoteData(NumberOfDrawnNotes%) = CurrentNote1 FileNos(NumberOfDrawnNotes%) = Note% END IF NEXT Note% END SUB SUB CompileIndex SHARED NextGroup% DIM CurrentNote4 AS NoteType, CurrentNote5 AS NoteType NumberOfGroupedNotes% = 0 RefNos(0) = -1 FOR Gp% = 1 TO NextGroup% - 1 FOR Note% = 1 TO NextNote% - 1 GET #2, Note%, CurrentNote4 IF CurrentNote4.group = Gp% THEN GroupedNotes(NumberOfGroupedNotes%) = Note% NumberOfGroupedNotes% = NumberOfGroupedNotes% + 1 END IF NEXT Note% RefNos(Gp%) = NumberOfGroupedNotes% - 1 IF RefNos(Gp%) > RefNos(Gp% - 1) THEN Ref% = RefNos(Gp% - 1) + 1 FOR x% = 1 TO 2 GET #2, GroupedNotes(Ref%), CurrentNote4 DO WHILE CurrentNote4.tail < 128 Ref% = Ref% + 1 GET #2, GroupedNotes(Ref%), CurrentNote4 LOOP IF CurrentNote4.tail < 16384 THEN SWAP GroupedNotes(Ref%), GroupedNotes(RefNos(Gp% - 1) + 1) Ref% = Ref% + 1 ELSE SWAP GroupedNotes(Ref%), GroupedNotes(RefNos(Gp%)) END IF NEXT x% END IF FOR Ref% = RefNos(Gp% - 1) + 2 TO RefNos(Gp%) - 2 SmallestRef% = Ref% FOR TryRef% = Ref% + 1 TO RefNos(Gp%) - 1 GET #2, GroupedNotes(TryRef%), CurrentNote4 GET #2, GroupedNotes(SmallestRef%), CurrentNote5 IF CurrentNote4.Staff < CurrentNote5.Staff OR CurrentNote4.Staff = CurrentNote5.Staff AND CurrentNote4.Horizontal < CurrentNote5.Horizontal THEN SmallestRef% = TryRef% NEXT TryRef% SWAP GroupedNotes(Ref%), GroupedNotes(SmallestRef%) NEXT Ref% NEXT Gp% END SUB SUB Delete (Note%) SHARED TiePosition% DIM CurrentNote1 AS NoteType IF Note% = TiePosition% THEN TiePosition% = 0 GET #2, NextNote% - 1, CurrentNote1 PUT #2, Note%, CurrentNote1 NextNote% = NextNote% - 1 END SUB SUB Digit (Dgt%, Hor%, Vert%, Colour%) SELECT CASE Dgt% CASE 10 LINE (Hor% + 4, Vert% + 1)-(Hor% + 4, Vert% + 2), Colour% PSET (Hor% + 3, Vert% + 3), Colour% LINE (Hor% + 2, Vert% + 1)-(Hor% + 2, Vert% + 2), Colour% PSET (Hor% + 1, Vert% + 3), Colour% CASE 32 CASE 33 LINE (Hor% + 3, Vert% + 1)-(Hor% + 3, Vert% + 8), Colour% PSET (Hor% + 3, Vert% + 11), Colour% CASE 34 LINE (Hor% + 2, Vert% + 3)-(Hor% + 2, Vert% + 2), Colour% PSET (Hor% + 3, Vert% + 1), Colour% LINE (Hor% + 4, Vert% + 3)-(Hor% + 4, Vert% + 2), Colour% PSET (Hor% + 5, Vert% + 1), Colour% CASE 35 LINE (Hor% + 1, Vert% + 2)-(Hor% + 1, Vert% + 10), Colour% LINE (Hor% + 5, Vert% + 2)-(Hor% + 5, Vert% + 10), Colour% LINE (Hor%, Vert% + 4)-(Hor% + 6, Vert% + 4), Colour% LINE (Hor%, Vert% + 8)-(Hor% + 6, Vert% + 8), Colour% CASE 36 PSET (Hor% + 6, Vert% + 3), Colour% PSET (Hor% + 6, Vert% + 2), Colour% LINE (Hor% + 5, Vert% + 1)-(Hor% + 1, Vert% + 1), Colour% LINE (Hor%, Vert% + 2)-(Hor%, Vert% + 4), Colour% PSET (Hor% + 1, Vert% + 5), Colour% LINE (Hor% + 2, Vert% + 6)-(Hor% + 4, Vert% + 6), Colour% PSET (Hor% + 5, Vert% + 7), Colour% LINE (Hor% + 6, Vert% + 8)-(Hor% + 6, Vert% + 10), Colour% LINE (Hor% + 5, Vert% + 11)-(Hor% + 1, Vert% + 11), Colour% LINE (Hor%, Vert% + 10)-(Hor%, Vert% + 9), Colour% LINE (Hor% + 3, Vert% - 1)-(Hor% + 3, Vert% + 13), Colour% CASE 38 LINE (Hor% + 6, Vert% + 11)-(Hor% + 5, Vert% + 10), Colour% LINE (Hor% + 5, Vert% + 9)-(Hor% + 4, Vert% + 8), Colour% LINE (Hor% + 4, Vert% + 7)-(Hor%, Vert% + 3), Colour% PSET (Hor%, Vert% + 2), Colour% LINE (Hor% + 1, Vert% + 1)-(Hor% + 3, Vert% + 1), Colour% LINE (Hor% + 4, Vert% + 2)-(Hor% + 4, Vert% + 3), Colour% LINE (Hor% + 3, Vert% + 4)-(Hor%, Vert% + 7), Colour% LINE (Hor%, Vert% + 8)-(Hor%, Vert% + 9), Colour% PSET (Hor% + 1, Vert% + 10), Colour% LINE (Hor% + 2, Vert% + 11)-(Hor% + 4, Vert% + 11), Colour% PSET (Hor% + 6, Vert% + 8), Colour% CASE 39 LINE (Hor% + 3, Vert% + 1)-(Hor% + 3, Vert% + 2), Colour% PSET (Hor% + 2, Vert% + 3), Colour% CASE 40 LINE (Hor% + 5, Vert% + 1)-(Hor% + 3, Vert% + 3), Colour% LINE (Hor% + 3, Vert% + 4)-(Hor% + 3, Vert% + 8), Colour% LINE (Hor% + 3, Vert% + 9)-(Hor% + 5, Vert% + 11), Colour% CASE 41 LINE (Hor% + 1, Vert% + 1)-(Hor% + 3, Vert% + 3), Colour% LINE (Hor% + 3, Vert% + 4)-(Hor% + 3, Vert% + 8), Colour% LINE (Hor% + 3, Vert% + 9)-(Hor% + 1, Vert% + 11), Colour% CASE 44 PSET (Hor% + 2, Vert% + 12), Colour% LINE (Hor% + 3, Vert% + 10)-(Hor% + 3, Vert% + 11), Colour% CASE 45 LINE (Hor% + 1, Vert% + 7)-(Hor% + 5, Vert% + 7), Colour% CASE 46 PSET (Hor% + 3, Vert% + 11), Colour% CASE 0, 48, 79, 142, 210 TO 214 CIRCLE (Hor% + 3, Vert% + 6), 5, Colour%, , , 2 CASE 1, 49 LINE (Hor% + 3, Vert% + 1)-(Hor% + 3, Vert% + 11), Colour% LINE (Hor% + 3, Vert% + 1)-(Hor%, Vert% + 4), Colour% CASE 2, 50 PSET (Hor%, Vert% + 3), Colour% PSET (Hor% + 1, Vert% + 2), Colour% PSET (Hor% + 2, Vert% + 2), Colour% PSET (Hor% + 3, Vert% + 1), Colour% PSET (Hor% + 4, Vert% + 1), Colour% PSET (Hor% + 5, Vert% + 2), Colour% PSET (Hor% + 6, Vert% + 3), Colour% PSET (Hor% + 6, Vert% + 4), Colour% PSET (Hor% + 6, Vert% + 5), Colour% PSET (Hor% + 5, Vert% + 6), Colour% PSET (Hor% + 4, Vert% + 7), Colour% PSET (Hor% + 3, Vert% + 8), Colour% PSET (Hor% + 2, Vert% + 9), Colour% PSET (Hor% + 1, Vert% + 10), Colour% LINE (Hor%, Vert% + 11)-(Hor% + 6, Vert% + 11), Colour% CASE 3, 51 LINE (Hor%, Vert% + 1)-(Hor% + 6, Vert% + 1), Colour% LINE (Hor% + 5, Vert% + 2)-(Hor% + 2, Vert% + 5), Colour% PSET (Hor% + 3, Vert% + 5), Colour% PSET (Hor% + 4, Vert% + 5), Colour% PSET (Hor% + 5, Vert% + 6), Colour% PSET (Hor% + 6, Vert% + 7), Colour% PSET (Hor% + 6, Vert% + 8), Colour% PSET (Hor% + 6, Vert% + 9), Colour% PSET (Hor% + 5, Vert% + 10), Colour% PSET (Hor% + 4, Vert% + 11), Colour% PSET (Hor% + 3, Vert% + 11), Colour% PSET (Hor% + 2, Vert% + 11), Colour% PSET (Hor% + 1, Vert% + 10), Colour% PSET (Hor%, Vert% + 9), Colour% CASE 4, 52 LINE (Hor% + 5, Vert% + 11)-(Hor% + 5, Vert% + 1), Colour% LINE (Hor% + 4, Vert% + 2)-(Hor%, Vert% + 6), Colour% LINE (Hor%, Vert% + 7)-(Hor% + 6, Vert% + 7), Colour% CASE 5, 53 LINE (Hor% + 6, Vert% + 1)-(Hor%, Vert% + 1), Colour% LINE (Hor%, Vert% + 2)-(Hor%, Vert% + 5), Colour% LINE (Hor% + 1, Vert% + 5)-(Hor% + 4, Vert% + 5), Colour% PSET (Hor% + 5, Vert% + 6), Colour% PSET (Hor% + 6, Vert% + 7), Colour% PSET (Hor% + 6, Vert% + 8), Colour% PSET (Hor% + 6, Vert% + 9), Colour% PSET (Hor% + 5, Vert% + 10), Colour% LINE (Hor% + 4, Vert% + 11)-(Hor% + 2, Vert% + 11), Colour% PSET (Hor% + 1, Vert% + 10), Colour% PSET (Hor%, Vert% + 10), Colour% CASE 6, 54 PSET (Hor% + 5, Vert% + 2), Colour% LINE (Hor% + 4, Vert% + 1)-(Hor% + 2, Vert% + 1), Colour% PSET (Hor% + 1, Vert% + 2), Colour% LINE (Hor%, Vert% + 3)-(Hor%, Vert% + 9), Colour% PSET (Hor% + 1, Vert% + 10), Colour% LINE (Hor% + 2, Vert% + 11)-(Hor% + 4, Vert% + 11), Colour% PSET (Hor% + 5, Vert% + 10), Colour% PSET (Hor% + 6, Vert% + 9), Colour% PSET (Hor% + 6, Vert% + 8), Colour% PSET (Hor% + 6, Vert% + 7), Colour% PSET (Hor% + 5, Vert% + 6), Colour% PSET (Hor% + 4, Vert% + 5), Colour% PSET (Hor% + 3, Vert% + 5), Colour% PSET (Hor% + 2, Vert% + 5), Colour% PSET (Hor% + 1, Vert% + 6), Colour% CASE 7, 55 LINE (Hor%, Vert% + 1)-(Hor% + 6, Vert% + 1), Colour% LINE (Hor% + 6, Vert% + 1)-(Hor%, Vert% + 11), Colour% CASE 8, 56 LINE (Hor% + 5, Vert% + 1)-(Hor% + 1, Vert% + 1), Colour% LINE (Hor%, Vert% + 2)-(Hor%, Vert% + 4), Colour% LINE (Hor% + 1, Vert% + 5)-(Hor% + 5, Vert% + 5), Colour% LINE (Hor% + 6, Vert% + 6)-(Hor% + 6, Vert% + 10), Colour% LINE (Hor% + 5, Vert% + 11)-(Hor% + 1, Vert% + 11), Colour% LINE (Hor%, Vert% + 10)-(Hor%, Vert% + 6), Colour% LINE (Hor% + 6, Vert% + 4)-(Hor% + 6, Vert% + 2), Colour% CASE 9, 57 PSET (Hor% + 1, Vert% + 10), Colour% LINE (Hor% + 2, Vert% + 11)-(Hor% + 4, Vert% + 11), Colour% PSET (Hor% + 5, Vert% + 10), Colour% LINE (Hor% + 6, Vert% + 9)-(Hor% + 6, Vert% + 3), Colour% PSET (Hor% + 5, Vert% + 2), Colour% LINE (Hor% + 4, Vert% + 1)-(Hor% + 2, Vert% + 1), Colour% PSET (Hor% + 1, Vert% + 2), Colour% PSET (Hor%, Vert% + 3), Colour% PSET (Hor%, Vert% + 4), Colour% PSET (Hor%, Vert% + 5), Colour% PSET (Hor% + 1, Vert% + 6), Colour% PSET (Hor% + 2, Vert% + 7), Colour% PSET (Hor% + 3, Vert% + 7), Colour% PSET (Hor% + 4, Vert% + 7), Colour% PSET (Hor% + 5, Vert% + 6), Colour% CASE 58 PSET (Hor% + 3, Vert% + 5), Colour% PSET (Hor% + 3, Vert% + 10), Colour% CASE 59 PSET (Hor% + 3, Vert% + 5), Colour% LINE (Hor% + 3, Vert% + 10)-(Hor% + 3, Vert% + 11), Colour% PSET (Hor% + 2, Vert% + 12), Colour% CASE 63 LINE (Hor% + 1, Vert% + 3)-(Hor% + 1, Vert% + 2), Colour% LINE (Hor% + 2, Vert% + 1)-(Hor% + 4, Vert% + 1), Colour% PSET (Hor% + 5, Vert% + 2), Colour% LINE (Hor% + 5, Vert% + 3)-(Hor% + 3, Vert% + 5), Colour% LINE (Hor% + 3, Vert% + 6)-(Hor% + 3, Vert% + 8), Colour% PSET (Hor% + 3, Vert% + 11), Colour% CASE 65, 128, 192 TO 197 LINE (Hor% + 3, Vert% + 1)-(Hor%, Vert% + 4), Colour% LINE (Hor% + 3, Vert% + 1)-(Hor% + 6, Vert% + 4), Colour% LINE (Hor%, Vert% + 5)-(Hor%, Vert% + 11), Colour% LINE (Hor% + 6, Vert% + 5)-(Hor% + 6, Vert% + 11), Colour% LINE (Hor% + 1, Vert% + 7)-(Hor% + 5, Vert% + 7), Colour% CASE 66, 129 LINE (Hor%, Vert% + 1)-(Hor% + 5, Vert% + 1), Colour% LINE (Hor% + 6, Vert% + 2)-(Hor% + 6, Vert% + 5), Colour% LINE (Hor% + 5, Vert% + 6)-(Hor% + 2, Vert% + 6), Colour% LINE (Hor% + 6, Vert% + 7)-(Hor% + 6, Vert% + 10), Colour% LINE (Hor% + 5, Vert% + 11)-(Hor%, Vert% + 11), Colour% LINE (Hor% + 1, Vert% + 10)-(Hor% + 1, Vert% + 2), Colour% CASE 67 PSET (Hor% + 6, Vert% + 3), Colour% PSET (Hor% + 5, Vert% + 2), Colour% LINE (Hor% + 4, Vert% + 1)-(Hor% + 2, Vert% + 1), Colour% PSET (Hor% + 1, Vert% + 2), Colour% LINE (Hor%, Vert% + 3)-(Hor%, Vert% + 9), Colour% PSET (Hor% + 1, Vert% + 10), Colour% LINE (Hor% + 2, Vert% + 11)-(Hor% + 4, Vert% + 11), Colour% PSET (Hor% + 5, Vert% + 10), Colour% PSET (Hor% + 6, Vert% + 9), Colour% CASE 68 LINE (Hor%, Vert% + 1)-(Hor% + 4, Vert% + 1), Colour% PSET (Hor% + 5, Vert% + 2), Colour% LINE (Hor% + 6, Vert% + 3)-(Hor% + 6, Vert% + 9), Colour% PSET (Hor% + 5, Vert% + 10), Colour% LINE (Hor% + 4, Vert% + 11)-(Hor%, Vert% + 11), Colour% LINE (Hor% + 1, Vert% + 10)-(Hor% + 1, Vert% + 2), Colour% CASE 69, 132, 200 TO 203 LINE (Hor%, Vert% + 1)-(Hor% + 6, Vert% + 1), Colour% PSET (Hor% + 6, Vert% + 2), Colour% LINE (Hor% + 1, Vert% + 2)-(Hor% + 1, Vert% + 10), Colour% PSET (Hor% + 2, Vert% + 6), Colour% PSET (Hor% + 3, Vert% + 6), Colour% LINE (Hor% + 4, Vert% + 5)-(Hor% + 4, Vert% + 7), Colour% LINE (Hor%, Vert% + 11)-(Hor% + 6, Vert% + 11), Colour% PSET (Hor% + 6, Vert% + 10), Colour% CASE 70 LINE (Hor%, Vert% + 1)-(Hor% + 6, Vert% + 1), Colour% PSET (Hor% + 6, Vert% + 2), Colour% LINE (Hor% + 1, Vert% + 2)-(Hor% + 1, Vert% + 10), Colour% PSET (Hor% + 2, Vert% + 6), Colour% PSET (Hor% + 3, Vert% + 6), Colour% LINE (Hor% + 4, Vert% + 5)-(Hor% + 4, Vert% + 7), Colour% LINE (Hor%, Vert% + 11)-(Hor% + 2, Vert% + 11), Colour% CASE 71 PSET (Hor% + 6, Vert% + 3), Colour% PSET (Hor% + 5, Vert% + 2), Colour% LINE (Hor% + 4, Vert% + 1)-(Hor% + 2, Vert% + 1), Colour% PSET (Hor% + 1, Vert% + 2), Colour% LINE (Hor%, Vert% + 3)-(Hor%, Vert% + 9), Colour% PSET (Hor% + 1, Vert% + 10), Colour% LINE (Hor% + 2, Vert% + 11)-(Hor% + 4, Vert% + 11), Colour% PSET (Hor% + 5, Vert% + 10), Colour% LINE (Hor% + 6, Vert% + 11)-(Hor% + 6, Vert% + 7), Colour% LINE (Hor% + 5, Vert% + 7)-(Hor% + 4, Vert% + 7), Colour% CASE 72, 134 PSET (Hor%, Vert% + 1), Colour% LINE (Hor% + 1, Vert% + 1)-(Hor% + 1, Vert% + 11), Colour% PSET (Hor%, Vert% + 11), Colour% PSET (Hor% + 6, Vert% + 1), Colour% LINE (Hor% + 5, Vert% + 1)-(Hor% + 5, Vert% + 11), Colour% PSET (Hor% + 6, Vert% + 11), Colour% LINE (Hor% + 2, Vert% + 6)-(Hor% + 4, Vert% + 6), Colour% CASE 73, 136, 204 TO 207 LINE (Hor% + 1, Vert% + 1)-(Hor% + 5, Vert% + 1), Colour% LINE (Hor% + 3, Vert% + 2)-(Hor% + 3, Vert% + 10), Colour% LINE (Hor% + 1, Vert% + 11)-(Hor% + 5, Vert% + 11), Colour% CASE 74 LINE (Hor% + 1, Vert% + 1)-(Hor% + 6, Vert% + 1), Colour% LINE (Hor% + 4, Vert% + 2)-(Hor% + 4, Vert% + 10), Colour% PSET (Hor% + 3, Vert% + 11), Colour% PSET (Hor% + 2, Vert% + 11), Colour% PSET (Hor% + 1, Vert% + 11), Colour% PSET (Hor%, Vert% + 10), Colour% CASE 75, 137 PSET (Hor%, Vert% + 1), Colour% PSET (Hor%, Vert% + 11), Colour% LINE (Hor% + 1, Vert% + 1)-(Hor% + 1, Vert% + 11), Colour% LINE (Hor% + 2, Vert% + 5)-(Hor% + 6, Vert% + 1), Colour% LINE (Hor% + 2, Vert% + 6)-(Hor% + 6, Vert% + 10), Colour% PSET (Hor% + 6, Vert% + 11), Colour% CASE 76 PSET (Hor%, Vert% + 1), Colour% LINE (Hor% + 1, Vert% + 1)-(Hor% + 1, Vert% + 10), Colour% LINE (Hor%, Vert% + 11)-(Hor% + 6, Vert% + 11), Colour% PSET (Hor% + 6, Vert% + 10), Colour% CASE 77, 139 LINE (Hor%, Vert% + 11)-(Hor%, Vert% + 1), Colour% LINE (Hor% + 1, Vert% + 3)-(Hor% + 3, Vert% + 5), Colour% LINE (Hor% + 4, Vert% + 4)-(Hor% + 5, Vert% + 3), Colour% LINE (Hor% + 6, Vert% + 1)-(Hor% + 6, Vert% + 11), Colour% CASE 78, 140, 209 LINE (Hor%, Vert% + 11)-(Hor%, Vert% + 1), Colour% LINE (Hor% + 1, Vert% + 3)-(Hor% + 5, Vert% + 7), Colour% LINE (Hor% + 6, Vert% + 11)-(Hor% + 6, Vert% + 1), Colour% CASE 80, 144 LINE (Hor%, Vert% + 11)-(Hor% + 2, Vert% + 11), Colour% LINE (Hor% + 1, Vert% + 10)-(Hor% + 1, Vert% + 2), Colour% LINE (Hor%, Vert% + 1)-(Hor% + 4, Vert% + 1), Colour% PSET (Hor% + 5, Vert% + 2), Colour% LINE (Hor% + 6, Vert% + 3)-(Hor% + 6, Vert% + 5), Colour% PSET (Hor% + 5, Vert% + 6), Colour% LINE (Hor% + 4, Vert% + 7)-(Hor% + 2, Vert% + 7), Colour% CASE 81 CIRCLE (Hor% + 3, Vert% + 6), 5, Colour%, , , 2 LINE (Hor% + 3, Vert% + 8)-(Hor% + 6, Vert% + 11), Colour% CASE 82 LINE (Hor%, Vert% + 11)-(Hor% + 2, Vert% + 11), Colour% LINE (Hor% + 1, Vert% + 10)-(Hor% + 1, Vert% + 2), Colour% LINE (Hor%, Vert% + 1)-(Hor% + 4, Vert% + 1), Colour% PSET (Hor% + 5, Vert% + 2), Colour% LINE (Hor% + 6, Vert% + 3)-(Hor% + 6, Vert% + 5), Colour% PSET (Hor% + 5, Vert% + 6), Colour% LINE (Hor% + 4, Vert% + 7)-(Hor% + 2, Vert% + 7), Colour% LINE (Hor% + 3, Vert% + 8)-(Hor% + 6, Vert% + 11), Colour% PSET (Hor% + 5, Vert% + 11), Colour% CASE 83 PSET (Hor% + 5, Vert% + 3), Colour% PSET (Hor% + 5, Vert% + 2), Colour% LINE (Hor% + 4, Vert% + 1)-(Hor% + 2, Vert% + 1), Colour% PSET (Hor% + 1, Vert% + 2), Colour% PSET (Hor% + 1, Vert% + 3), Colour% LINE (Hor% + 1, Vert% + 4)-(Hor% + 5, Vert% + 8), Colour% PSET (Hor% + 5, Vert% + 9), Colour% PSET (Hor% + 5, Vert% + 10), Colour% LINE (Hor% + 4, Vert% + 11)-(Hor% + 2, Vert% + 11), Colour% LINE (Hor% + 1, Vert% + 10)-(Hor% + 1, Vert% + 9), Colour% CASE 84, 146 LINE (Hor%, Vert% + 1)-(Hor% + 6, Vert% + 1), Colour% LINE (Hor% + 3, Vert% + 2)-(Hor% + 3, Vert% + 10), Colour% LINE (Hor% + 2, Vert% + 11)-(Hor% + 4, Vert% + 11), Colour% PSET (Hor%, Vert% + 2), Colour% PSET (Hor% + 6, Vert% + 2), Colour% CASE 85, 217 TO 220 LINE (Hor%, Vert% + 1)-(Hor%, Vert% + 9), Colour% PSET (Hor% + 1, Vert% + 10), Colour% LINE (Hor% + 2, Vert% + 11)-(Hor% + 4, Vert% + 11), Colour% PSET (Hor% + 5, Vert% + 10), Colour% LINE (Hor% + 6, Vert% + 9)-(Hor% + 6, Vert% + 1), Colour% CASE 86 LINE (Hor%, Vert% + 1)-(Hor%, Vert% + 3), Colour% LINE (Hor% + 1, Vert% + 4)-(Hor% + 1, Vert% + 6), Colour% LINE (Hor% + 2, Vert% + 7)-(Hor% + 2, Vert% + 9), Colour% LINE (Hor% + 3, Vert% + 11)-(Hor% + 3, Vert% + 10), Colour% LINE (Hor% + 4, Vert% + 9)-(Hor% + 4, Vert% + 7), Colour% LINE (Hor% + 5, Vert% + 6)-(Hor% + 5, Vert% + 4), Colour% LINE (Hor% + 6, Vert% + 3)-(Hor% + 6, Vert% + 1), Colour% CASE 87 LINE (Hor%, Vert% + 1)-(Hor%, Vert% + 8), Colour% LINE (Hor% + 1, Vert% + 9)-(Hor% + 1, Vert% + 11), Colour% LINE (Hor% + 2, Vert% + 8)-(Hor% + 2, Vert% + 6), Colour% LINE (Hor% + 3, Vert% + 5)-(Hor% + 3, Vert% + 3), Colour% LINE (Hor% + 4, Vert% + 6)-(Hor% + 4, Vert% + 8), Colour% LINE (Hor% + 5, Vert% + 9)-(Hor% + 5, Vert% + 11), Colour% LINE (Hor% + 6, Vert% + 8)-(Hor% + 6, Vert% + 1), Colour% CASE 88, 149 LINE (Hor%, Vert% + 1)-(Hor%, Vert% + 3), Colour% LINE (Hor% + 1, Vert% + 4)-(Hor% + 5, Vert% + 8), Colour% LINE (Hor% + 6, Vert% + 9)-(Hor% + 6, Vert% + 11), Colour% LINE (Hor% + 6, Vert% + 1)-(Hor% + 6, Vert% + 3), Colour% LINE (Hor% + 5, Vert% + 4)-(Hor% + 1, Vert% + 8), Colour% LINE (Hor%, Vert% + 9)-(Hor%, Vert% + 11), Colour% CASE 89, 147, 159, 221 LINE (Hor%, Vert% + 1)-(Hor%, Vert% + 2), Colour% LINE (Hor% + 1, Vert% + 3)-(Hor% + 1, Vert% + 4), Colour% LINE (Hor% + 2, Vert% + 5)-(Hor% + 2, Vert% + 6), Colour% LINE (Hor% + 6, Vert% + 1)-(Hor% + 6, Vert% + 2), Colour% LINE (Hor% + 5, Vert% + 3)-(Hor% + 5, Vert% + 4), Colour% LINE (Hor% + 4, Vert% + 5)-(Hor% + 4, Vert% + 6), Colour% LINE (Hor% + 3, Vert% + 7)-(Hor% + 3, Vert% + 11), Colour% CASE 90, 133 PSET (Hor%, Vert% + 2), Colour% LINE (Hor%, Vert% + 1)-(Hor% + 6, Vert% + 1), Colour% PSET (Hor% + 6, Vert% + 2), Colour% LINE (Hor% + 6, Vert% + 3)-(Hor%, Vert% + 9), Colour% PSET (Hor%, Vert% + 10), Colour% LINE (Hor%, Vert% + 11)-(Hor% + 6, Vert% + 11), Colour% PSET (Hor% + 6, Vert% + 10), Colour% CASE 96 LINE (Hor% + 3, Vert% + 3)-(Hor% + 3, Vert% + 2), Colour% PSET (Hor% + 4, Vert% + 1), Colour% CASE 97, 224 TO 229 LINE (Hor% + 2, Vert% + 5)-(Hor% + 4, Vert% + 5), Colour% LINE (Hor% + 5, Vert% + 6)-(Hor% + 5, Vert% + 10), Colour% PSET (Hor% + 6, Vert% + 11), Colour% LINE (Hor% + 4, Vert% + 11)-(Hor% + 2, Vert% + 11), Colour% LINE (Hor% + 1, Vert% + 10)-(Hor% + 1, Vert% + 8), Colour% LINE (Hor% + 2, Vert% + 7)-(Hor% + 4, Vert% + 7), Colour% CASE 98 PSET (Hor% + 3, Vert% + 5), Colour% PSET (Hor% + 4, Vert% + 6), Colour% LINE (Hor% + 5, Vert% + 7)-(Hor% + 5, Vert% + 10), Colour% LINE (Hor% + 4, Vert% + 11)-(Hor% + 3, Vert% + 11), Colour% LINE (Hor% + 2, Vert% + 10)-(Hor% + 2, Vert% + 1), Colour% PSET (Hor% + 1, Vert% + 11), Colour% PSET (Hor% + 1, Vert% + 1), Colour% CASE 99 PSET (Hor% + 5, Vert% + 6), Colour% LINE (Hor% + 4, Vert% + 5)-(Hor% + 2, Vert% + 5), Colour% LINE (Hor% + 1, Vert% + 6)-(Hor% + 1, Vert% + 10), Colour% LINE (Hor% + 2, Vert% + 11)-(Hor% + 4, Vert% + 11), Colour% PSET (Hor% + 5, Vert% + 10), Colour% CASE 100 PSET (Hor% + 3, Vert% + 1), Colour% LINE (Hor% + 4, Vert% + 1)-(Hor% + 4, Vert% + 10), Colour% PSET (Hor% + 5, Vert% + 11), Colour% PSET (Hor% + 3, Vert% + 11), Colour% PSET (Hor% + 2, Vert% + 11), Colour% LINE (Hor% + 1, Vert% + 10)-(Hor% + 1, Vert% + 7), Colour% PSET (Hor% + 2, Vert% + 6), Colour% PSET (Hor% + 3, Vert% + 5), Colour% CASE 101, 232 TO 235 LINE (Hor% + 2, Vert% + 7)-(Hor% + 5, Vert% + 7), Colour% PSET (Hor% + 5, Vert% + 6), Colour% LINE (Hor% + 4, Vert% + 5)-(Hor% + 2, Vert% + 5), Colour% LINE (Hor% + 1, Vert% + 6)-(Hor% + 1, Vert% + 10), Colour% LINE (Hor% + 2, Vert% + 11)-(Hor% + 4, Vert% + 11), Colour% PSET (Hor% + 5, Vert% + 10), Colour% CASE 102 LINE (Hor% + 2, Vert% + 13)-(Hor% + 2, Vert% + 2), Colour% LINE (Hor% + 3, Vert% + 1)-(Hor% + 4, Vert% + 1), Colour% PSET (Hor% + 5, Vert% + 2), Colour% LINE (Hor% + 1, Vert% + 6)-(Hor% + 4, Vert% + 6), Colour% CASE 103 LINE (Hor% + 4, Vert% + 5)-(Hor% + 2, Vert% + 5), Colour% LINE (Hor% + 1, Vert% + 6)-(Hor% + 1, Vert% + 10), Colour% LINE (Hor% + 2, Vert% + 11)-(Hor% + 4, Vert% + 11), Colour% LINE (Hor% + 5, Vert% + 6)-(Hor% + 5, Vert% + 13), Colour% LINE (Hor% + 4, Vert% + 14)-(Hor% + 2, Vert% + 14), Colour% PSET (Hor% + 1, Vert% + 13), Colour% CASE 104 PSET (Hor%, Vert% + 1), Colour% LINE (Hor% + 1, Vert% + 1)-(Hor% + 1, Vert% + 11), Colour% PSET (Hor%, Vert% + 11), Colour% PSET (Hor% + 2, Vert% + 6), Colour% LINE (Hor% + 3, Vert% + 5)-(Hor% + 4, Vert% + 5), Colour% LINE (Hor% + 5, Vert% + 6)-(Hor% + 5, Vert% + 11), Colour% PSET (Hor% + 6, Vert% + 11), Colour% CASE 105, 236 TO 239 PSET (Hor% + 3, Vert% + 3), Colour% PSET (Hor% + 2, Vert% + 5), Colour% LINE (Hor% + 3, Vert% + 5)-(Hor% + 3, Vert% + 10), Colour% LINE (Hor% + 2, Vert% + 11)-(Hor% + 4, Vert% + 11), Colour% CASE 106 PSET (Hor% + 3, Vert% + 3), Colour% PSET (Hor% + 2, Vert% + 5), Colour% LINE (Hor% + 3, Vert% + 5)-(Hor% + 3, Vert% + 13), Colour% LINE (Hor% + 2, Vert% + 14)-(Hor% + 1, Vert% + 14), Colour% PSET (Hor%, Vert% + 13), Colour% CASE 107 PSET (Hor%, Vert% + 1), Colour% LINE (Hor% + 1, Vert% + 1)-(Hor% + 1, Vert% + 11), Colour% PSET (Hor%, Vert% + 11), Colour% LINE (Hor% + 2, Vert% + 8)-(Hor% + 5, Vert% + 5), Colour% LINE (Hor% + 2, Vert% + 8)-(Hor% + 5, Vert% + 11), Colour% CASE 108 PSET (Hor% + 2, Vert% + 1), Colour% LINE (Hor% + 3, Vert% + 1)-(Hor% + 3, Vert% + 10), Colour% LINE (Hor% + 2, Vert% + 11)-(Hor% + 4, Vert% + 11), Colour% CASE 109 PSET (Hor% - 1, Vert% + 5), Colour% LINE (Hor%, Vert% + 6)-(Hor%, Vert% + 11), Colour% LINE (Hor% + 1, Vert% + 5)-(Hor% + 2, Vert% + 5), Colour% LINE (Hor% + 3, Vert% + 6)-(Hor% + 3, Vert% + 11), Colour% LINE (Hor% + 4, Vert% + 5)-(Hor% + 5, Vert% + 5), Colour% LINE (Hor% + 6, Vert% + 6)-(Hor% + 6, Vert% + 11), Colour% CASE 110, 241 PSET (Hor%, Vert% + 5), Colour% LINE (Hor% + 1, Vert% + 6)-(Hor% + 1, Vert% + 11), Colour% LINE (Hor% + 2, Vert% + 5)-(Hor% + 4, Vert% + 5), Colour% LINE (Hor% + 5, Vert% + 6)-(Hor% + 5, Vert% + 11), Colour% CASE 111, 174, 242 TO 246 LINE (Hor% + 1, Vert% + 6)-(Hor% + 1, Vert% + 10), Colour% LINE (Hor% + 2, Vert% + 11)-(Hor% + 4, Vert% + 11), Colour% LINE (Hor% + 5, Vert% + 10)-(Hor% + 5, Vert% + 6), Colour% LINE (Hor% + 4, Vert% + 5)-(Hor% + 2, Vert% + 5), Colour% CASE 112 PSET (Hor%, Vert% + 5), Colour% LINE (Hor% + 1, Vert% + 6)-(Hor% + 1, Vert% + 13), Colour% LINE (Hor%, Vert% + 14)-(Hor% + 2, Vert% + 14), Colour% LINE (Hor% + 2, Vert% + 5)-(Hor% + 4, Vert% + 5), Colour% LINE (Hor% + 5, Vert% + 6)-(Hor% + 5, Vert% + 10), Colour% LINE (Hor% + 4, Vert% + 11)-(Hor% + 2, Vert% + 11), Colour% CASE 113 LINE (Hor% + 3, Vert% + 5)-(Hor% + 1, Vert% + 5), Colour% LINE (Hor%, Vert% + 6)-(Hor%, Vert% + 10), Colour% LINE (Hor% + 1, Vert% + 11)-(Hor% + 3, Vert% + 11), Colour% PSET (Hor% + 5, Vert% + 5), Colour% LINE (Hor% + 4, Vert% + 6)-(Hor% + 4, Vert% + 15), Colour% LINE (Hor% + 5, Vert% + 14)-(Hor% + 6, Vert% + 13), Colour% CASE 114 PSET (Hor% + 1, Vert% + 5), Colour% LINE (Hor% + 2, Vert% + 6)-(Hor% + 2, Vert% + 10), Colour% LINE (Hor% + 1, Vert% + 11)-(Hor% + 3, Vert% + 11), Colour% LINE (Hor% + 3, Vert% + 5)-(Hor% + 4, Vert% + 5), Colour% PSET (Hor% + 5, Vert% + 6), Colour% CASE 115 PSET (Hor% + 5, Vert% + 6), Colour% LINE (Hor% + 4, Vert% + 5)-(Hor% + 2, Vert% + 5), Colour% LINE (Hor% + 1, Vert% + 6)-(Hor% + 1, Vert% + 7), Colour% LINE (Hor% + 2, Vert% + 8)-(Hor% + 4, Vert% + 8), Colour% LINE (Hor% + 5, Vert% + 9)-(Hor% + 5, Vert% + 10), Colour% LINE (Hor% + 4, Vert% + 11)-(Hor% + 2, Vert% + 11), Colour% PSET (Hor% + 1, Vert% + 10), Colour% CASE 116 LINE (Hor% + 3, Vert% + 3)-(Hor% + 3, Vert% + 10), Colour% LINE (Hor% + 4, Vert% + 11)-(Hor% + 5, Vert% + 11), Colour% PSET (Hor% + 6, Vert% + 10), Colour% LINE (Hor% + 1, Vert% + 5)-(Hor% + 5, Vert% + 5), Colour% CASE 117, 249 TO 252 LINE (Hor% + 1, Vert% + 5)-(Hor% + 1, Vert% + 10), Colour% LINE (Hor% + 2, Vert% + 11)-(Hor% + 4, Vert% + 11), Colour% LINE (Hor% + 5, Vert% + 5)-(Hor% + 5, Vert% + 10), Colour% PSET (Hor% + 6, Vert% + 11), Colour% CASE 118 LINE (Hor% + 1, Vert% + 5)-(Hor% + 1, Vert% + 7), Colour% LINE (Hor% + 2, Vert% + 8)-(Hor% + 2, Vert% + 9), Colour% LINE (Hor% + 3, Vert% + 10)-(Hor% + 3, Vert% + 11), Colour% LINE (Hor% + 4, Vert% + 9)-(Hor% + 4, Vert% + 8), Colour% LINE (Hor% + 5, Vert% + 7)-(Hor% + 5, Vert% + 5), Colour% CASE 119 LINE (Hor%, Vert% + 5)-(Hor%, Vert% + 10), Colour% LINE (Hor% + 1, Vert% + 11)-(Hor% + 2, Vert% + 11), Colour% LINE (Hor% + 3, Vert% + 10)-(Hor% + 3, Vert% + 5), Colour% LINE (Hor% + 4, Vert% + 11)-(Hor% + 5, Vert% + 11), Colour% LINE (Hor% + 6, Vert% + 10)-(Hor% + 6, Vert% + 5), Colour% CASE 120 PSET (Hor% + 1, Vert% + 5), Colour% LINE (Hor% + 1, Vert% + 6)-(Hor% + 5, Vert% + 10), Colour% PSET (Hor% + 5, Vert% + 11), Colour% PSET (Hor% + 1, Vert% + 11), Colour% LINE (Hor% + 1, Vert% + 10)-(Hor% + 5, Vert% + 6), Colour% PSET (Hor% + 5, Vert% + 5), Colour% CASE 121, 253, 255 LINE (Hor% + 1, Vert% + 5)-(Hor% + 1, Vert% + 10), Colour% LINE (Hor% + 2, Vert% + 11)-(Hor% + 4, Vert% + 11), Colour% LINE (Hor% + 5, Vert% + 5)-(Hor% + 5, Vert% + 13), Colour% LINE (Hor% + 4, Vert% + 14)-(Hor% + 1, Vert% + 14), Colour% CASE 122 PSET (Hor% + 1, Vert% + 6), Colour% LINE (Hor% + 1, Vert% + 5)-(Hor% + 5, Vert% + 5), Colour% LINE (Hor% + 5, Vert% + 6)-(Hor% + 1, Vert% + 10), Colour% LINE (Hor% + 1, Vert% + 11)-(Hor% + 5, Vert% + 11), Colour% PSET (Hor% + 5, Vert% + 10), Colour% CASE 127 LINE (Hor%, Vert% + 8)-(Hor%, Vert% + 9), Colour% LINE (Hor% + 1, Vert% + 9)-(Hor% + 1, Vert% + 1), Colour% LINE (Hor% + 2, Vert% + 1)-(Hor% + 5, Vert% + 1), Colour% LINE (Hor% + 2, Vert% + 3)-(Hor% + 5, Vert% + 3), Colour% LINE (Hor% + 6, Vert% + 1)-(Hor% + 6, Vert% + 11), Colour% LINE (Hor% + 5, Vert% + 11)-(Hor% + 5, Vert% + 10), Colour% CASE 130 LINE (Hor% + 1, Vert% + 11)-(Hor% + 1, Vert% + 2), Colour% LINE (Hor%, Vert% + 1)-(Hor% + 6, Vert% + 1), Colour% PSET (Hor% + 6, Vert% + 2), Colour% CASE 131, 138 LINE (Hor%, Vert% + 11)-(Hor%, Vert% + 10), Colour% LINE (Hor% + 1, Vert% + 9)-(Hor% + 1, Vert% + 7), Colour% LINE (Hor% + 2, Vert% + 6)-(Hor% + 2, Vert% + 4), Colour% LINE (Hor% + 3, Vert% + 3)-(Hor% + 3, Vert% + 1), Colour% LINE (Hor% + 4, Vert% + 4)-(Hor% + 4, Vert% + 6), Colour% LINE (Hor% + 5, Vert% + 7)-(Hor% + 5, Vert% + 9), Colour% LINE (Hor% + 6, Vert% + 10)-(Hor% + 6, Vert% + 11), Colour% IF Dgt% = 131 THEN LINE (Hor% + 5, Vert% + 11)-(Hor% + 1, Vert% + 11), Colour% CASE 135 CIRCLE (Hor% + 3, Vert% + 6), 5, Colour%, , , 2 LINE (Hor% + 2, Vert% + 5)-(Hor% + 2, Vert% + 7), Colour% PSET (Hor% + 3, Vert% + 6), Colour% LINE (Hor% + 4, Vert% + 5)-(Hor% + 4, Vert% + 7), Colour% CASE 141 PSET (Hor%, Vert% + 2), Colour% LINE (Hor%, Vert% + 1)-(Hor% + 6, Vert% + 1), Colour% PSET (Hor% + 6, Vert% + 2), Colour% PSET (Hor%, Vert% + 10), Colour% LINE (Hor%, Vert% + 11)-(Hor% + 6, Vert% + 11), Colour% PSET (Hor% + 6, Vert% + 10), Colour% LINE (Hor% + 1, Vert% + 5)-(Hor% + 1, Vert% + 7), Colour% LINE (Hor% + 2, Vert% + 6)-(Hor% + 4, Vert% + 6), Colour% LINE (Hor% + 5, Vert% + 5)-(Hor% + 5, Vert% + 7), Colour% CASE 143 LINE (Hor% + 1, Vert% + 11)-(Hor% + 1, Vert% + 2), Colour% LINE (Hor%, Vert% + 1)-(Hor% + 6, Vert% + 1), Colour% LINE (Hor% + 5, Vert% + 2)-(Hor% + 5, Vert% + 11), Colour% CASE 145 PSET (Hor% + 6, Vert% + 2), Colour% LINE (Hor% + 6, Vert% + 1)-(Hor%, Vert% + 1), Colour% LINE (Hor%, Vert% + 2)-(Hor% + 4, Vert% + 6), Colour% LINE (Hor% + 3, Vert% + 7)-(Hor%, Vert% + 10), Colour% LINE (Hor%, Vert% + 11)-(Hor% + 6, Vert% + 11), Colour% PSET (Hor% + 6, Vert% + 10), Colour% CASE 148 LINE (Hor% + 1, Vert% + 1)-(Hor% + 5, Vert% + 1), Colour% LINE (Hor% + 3, Vert% + 2)-(Hor% + 3, Vert% + 10), Colour% LINE (Hor% + 1, Vert% + 11)-(Hor% + 5, Vert% + 11), Colour% CIRCLE (Hor% + 3, Vert% + 6), 3, Colour% CASE 150 LINE (Hor% + 2, Vert% + 1)-(Hor% + 4, Vert% + 1), Colour% LINE (Hor% + 3, Vert% + 2)-(Hor% + 3, Vert% + 10), Colour% LINE (Hor% + 2, Vert% + 11)-(Hor% + 4, Vert% + 11), Colour% PSET (Hor%, Vert% + 1), Colour% CIRCLE (Hor% + 3, Vert% + 2), 3, Colour%, PI, 0 PSET (Hor% + 6, Vert% + 1), Colour% CASE 151 LINE (Hor%, Vert% + 11)-(Hor% + 2, Vert% + 11), Colour% LINE (Hor% + 2, Vert% + 10)-(Hor% + 2, Vert% + 8), Colour% PSET (Hor% + 1, Vert% + 7), Colour% LINE (Hor%, Vert% + 6)-(Hor%, Vert% + 3), Colour% PSET (Hor% + 1, Vert% + 2), Colour% LINE (Hor% + 2, Vert% + 1)-(Hor% + 4, Vert% + 1), Colour% PSET (Hor% + 5, Vert% + 2), Colour% LINE (Hor% + 6, Vert% + 3)-(Hor% + 6, Vert% + 6), Colour% PSET (Hor% + 5, Vert% + 7), Colour% LINE (Hor% + 4, Vert% + 8)-(Hor% + 4, Vert% + 10), Colour% LINE (Hor% + 4, Vert% + 11)-(Hor% + 6, Vert% + 11), Colour% CASE 160 LINE (Hor% + 6, Vert% + 6)-(Hor% + 6, Vert% + 8), Colour% PSET (Hor% + 4, Vert% + 10), Colour% LINE (Hor% + 3, Vert% + 11)-(Hor% + 1, Vert% + 11), Colour% LINE (Hor%, Vert% + 10)-(Hor%, Vert% + 7), Colour% LINE (Hor% + 1, Vert% + 6)-(Hor% + 2, Vert% + 6), Colour% LINE (Hor% + 3, Vert% + 7)-(Hor% + 5, Vert% + 9), Colour% PSET (Hor% + 5, Vert% + 10), Colour% PSET (Hor% + 6, Vert% + 11), Colour% CASE 161 LINE (Hor% + 1, Vert% + 14)-(Hor% + 1, Vert% + 4), Colour% LINE (Hor% + 2, Vert% + 4)-(Hor% + 4, Vert% + 4), Colour% LINE (Hor% + 5, Vert% + 5)-(Hor% + 5, Vert% + 6), Colour% LINE (Hor% + 4, Vert% + 7)-(Hor% + 3, Vert% + 7), Colour% LINE (Hor% + 5, Vert% + 8)-(Hor% + 5, Vert% + 10), Colour% LINE (Hor% + 4, Vert% + 11)-(Hor% + 2, Vert% + 11), Colour% CASE 162 LINE (Hor% + 1, Vert% + 5)-(Hor% + 4, Vert% + 8), Colour% LINE (Hor% + 5, Vert% + 9)-(Hor% + 5, Vert% + 10), Colour% LINE (Hor% + 4, Vert% + 11)-(Hor% + 2, Vert% + 11), Colour% LINE (Hor% + 1, Vert% + 10)-(Hor% + 1, Vert% + 9), Colour% LINE (Hor% + 2, Vert% + 8)-(Hor% + 5, Vert% + 5), Colour% CASE 163 PSET (Hor% + 2, Vert% + 5), Colour% LINE (Hor% + 1, Vert% + 6)-(Hor% + 1, Vert% + 10), Colour% LINE (Hor% + 2, Vert% + 11)-(Hor% + 4, Vert% + 11), Colour% LINE (Hor% + 5, Vert% + 10)-(Hor% + 5, Vert% + 6), Colour% PSET (Hor% + 4, Vert% + 5), Colour% LINE (Hor% + 3, Vert% + 5)-(Hor% + 3, Vert% + 2), Colour% LINE (Hor% + 4, Vert% + 1)-(Hor% + 5, Vert% + 1), Colour% CASE 164 LINE (Hor% + 4, Vert% + 5)-(Hor% + 2, Vert% + 5), Colour% LINE (Hor% + 1, Vert% + 6)-(Hor% + 1, Vert% + 7), Colour% LINE (Hor% + 2, Vert% + 8)-(Hor% + 3, Vert% + 8), Colour% LINE (Hor% + 1, Vert% + 9)-(Hor% + 1, Vert% + 10), Colour% LINE (Hor% + 2, Vert% + 11)-(Hor% + 4, Vert% + 11), Colour% CASE 165 PSET (Hor% + 1, Vert% + 5), Colour% LINE (Hor% + 2, Vert% + 6)-(Hor% + 3, Vert% + 6), Colour% PSET (Hor% + 5, Vert% + 5), Colour% LINE (Hor% + 4, Vert% + 5)-(Hor% + 4, Vert% + 10), Colour% LINE (Hor% + 3, Vert% + 11)-(Hor% + 2, Vert% + 11), Colour% PSET (Hor% + 1, Vert% + 10), Colour% CASE 166 PSET (Hor%, Vert% + 5), Colour% LINE (Hor% + 1, Vert% + 6)-(Hor% + 1, Vert% + 9), Colour% LINE (Hor% + 2, Vert% + 5)-(Hor% + 3, Vert% + 5), Colour% LINE (Hor% + 4, Vert% + 6)-(Hor% + 4, Vert% + 13), Colour% LINE (Hor% + 5, Vert% + 14)-(Hor% + 6, Vert% + 14), Colour% CASE 167 LINE (Hor% + 4, Vert% + 5)-(Hor% + 2, Vert% + 5), Colour% LINE (Hor% + 1, Vert% + 6)-(Hor% + 1, Vert% + 10), Colour% LINE (Hor% + 2, Vert% + 11)-(Hor% + 4, Vert% + 11), Colour% LINE (Hor% + 5, Vert% + 10)-(Hor% + 5, Vert% + 6), Colour% LINE (Hor% + 2, Vert% + 8)-(Hor% + 4, Vert% + 8), Colour% CASE 168 PSET (Hor% + 2, Vert% + 5), Colour% LINE (Hor% + 3, Vert% + 6)-(Hor% + 3, Vert% + 10), Colour% LINE (Hor% + 4, Vert% + 11)-(Hor% + 5, Vert% + 11), Colour% CASE 169 LINE (Hor% + 1, Vert% + 5)-(Hor% + 1, Vert% + 11), Colour% LINE (Hor% + 5, Vert% + 5)-(Hor% + 2, Vert% + 8), Colour% LINE (Hor% + 3, Vert% + 9)-(Hor% + 5, Vert% + 11), Colour% CASE 170 LINE (Hor% + 1, Vert% + 11)-(Hor% + 1, Vert% + 9), Colour% LINE (Hor% + 2, Vert% + 8)-(Hor% + 2, Vert% + 7), Colour% LINE (Hor% + 1, Vert% + 1)-(Hor% + 1, Vert% + 2), Colour% LINE (Hor% + 2, Vert% + 3)-(Hor% + 2, Vert% + 4), Colour% LINE (Hor% + 3, Vert% + 5)-(Hor% + 3, Vert% + 6), Colour% LINE (Hor% + 4, Vert% + 7)-(Hor% + 4, Vert% + 8), Colour% LINE (Hor% + 5, Vert% + 9)-(Hor% + 5, Vert% + 11), Colour% CASE 171 LINE (Hor% + 1, Vert% + 14)-(Hor% + 1, Vert% + 5), Colour% LINE (Hor% + 2, Vert% + 11)-(Hor% + 4, Vert% + 11), Colour% LINE (Hor% + 5, Vert% + 10)-(Hor% + 5, Vert% + 5), Colour% CASE 172 LINE (Hor% + 1, Vert% + 5)-(Hor% + 1, Vert% + 6), Colour% LINE (Hor% + 2, Vert% + 7)-(Hor% + 2, Vert% + 9), Colour% LINE (Hor% + 3, Vert% + 10)-(Hor% + 3, Vert% + 11), Colour% PSET (Hor% + 4, Vert% + 10), Colour% LINE (Hor% + 5, Vert% + 9)-(Hor% + 5, Vert% + 6), Colour% PSET (Hor% + 4, Vert% + 5), Colour% CASE 173 PSET (Hor% + 1, Vert% + 5), Colour% LINE (Hor% + 2, Vert% + 6)-(Hor% + 4, Vert% + 6), Colour% PSET (Hor% + 5, Vert% + 5), Colour% PSET (Hor% + 4, Vert% + 7), Colour% PSET (Hor% + 5, Vert% + 8), Colour% LINE (Hor% + 4, Vert% + 9)-(Hor% + 4, Vert% + 11), Colour% LINE (Hor% + 5, Vert% + 12)-(Hor% + 5, Vert% + 13), Colour% LINE (Hor% + 4, Vert% + 14)-(Hor% + 2, Vert% + 14), Colour% PSET (Hor% + 1, Vert% + 13), Colour% CASE 175 LINE (Hor% + 1, Vert% + 5)-(Hor% + 5, Vert% + 5), Colour% LINE (Hor% + 2, Vert% + 6)-(Hor% + 2, Vert% + 11), Colour% LINE (Hor% + 4, Vert% + 6)-(Hor% + 4, Vert% + 10), Colour% PSET (Hor% + 5, Vert% + 11), Colour% CASE 176 LINE (Hor% + 2, Vert% + 11)-(Hor% + 4, Vert% + 11), Colour% LINE (Hor% + 5, Vert% + 10)-(Hor% + 5, Vert% + 6), Colour% LINE (Hor% + 4, Vert% + 5)-(Hor% + 2, Vert% + 5), Colour% LINE (Hor% + 1, Vert% + 6)-(Hor% + 1, Vert% + 13), Colour% LINE (Hor% + 2, Vert% + 14)-(Hor% + 4, Vert% + 14), Colour% PSET (Hor% + 5, Vert% + 13), Colour% CASE 177 LINE (Hor% + 6, Vert% + 5)-(Hor% + 1, Vert% + 5), Colour% LINE (Hor%, Vert% + 6)-(Hor%, Vert% + 10), Colour% LINE (Hor% + 1, Vert% + 11)-(Hor% + 3, Vert% + 11), Colour% LINE (Hor% + 4, Vert% + 10)-(Hor% + 4, Vert% + 6), Colour% CASE 178 LINE (Hor% + 1, Vert% + 5)-(Hor% + 5, Vert% + 5), Colour% PSET (Hor% + 3, Vert% + 6), Colour% LINE (Hor% + 2, Vert% + 7)-(Hor% + 2, Vert% + 10), Colour% LINE (Hor% + 3, Vert% + 11)-(Hor% + 5, Vert% + 11), Colour% CASE 179 LINE (Hor% + 1, Vert% + 5)-(Hor% + 1, Vert% + 10), Colour% LINE (Hor% + 2, Vert% + 11)-(Hor% + 4, Vert% + 11), Colour% LINE (Hor% + 5, Vert% + 10)-(Hor% + 5, Vert% + 6), Colour% PSET (Hor% + 4, Vert% + 5), Colour% CASE 180 PSET (Hor% + 1, Vert% + 5), Colour% LINE (Hor%, Vert% + 6)-(Hor%, Vert% + 10), Colour% LINE (Hor% + 1, Vert% + 11)-(Hor% + 5, Vert% + 11), Colour% LINE (Hor% + 6, Vert% + 10)-(Hor% + 6, Vert% + 6), Colour% LINE (Hor% + 5, Vert% + 5)-(Hor% + 4, Vert% + 5), Colour% LINE (Hor% + 3, Vert% + 6)-(Hor% + 3, Vert% + 14), Colour% CASE 181 LINE (Hor% + 1, Vert% + 10)-(Hor% + 5, Vert% + 6), Colour% LINE (Hor% + 1, Vert% + 5)-(Hor% + 2, Vert% + 5), Colour% LINE (Hor% + 3, Vert% + 6)-(Hor% + 3, Vert% + 10), Colour% LINE (Hor% + 4, Vert% + 11)-(Hor% + 5, Vert% + 11), Colour% CASE 182 LINE (Hor%, Vert% + 6)-(Hor%, Vert% + 10), Colour% LINE (Hor% + 1, Vert% + 11)-(Hor% + 5, Vert% + 11), Colour% LINE (Hor% + 6, Vert% + 10)-(Hor% + 6, Vert% + 6), Colour% LINE (Hor% + 3, Vert% + 5)-(Hor% + 3, Vert% + 14), Colour% CASE 183 PSET (Hor% + 1, Vert% + 5), Colour% LINE (Hor%, Vert% + 6)-(Hor%, Vert% + 10), Colour% LINE (Hor% + 1, Vert% + 11)-(Hor% + 2, Vert% + 11), Colour% LINE (Hor% + 3, Vert% + 10)-(Hor% + 3, Vert% + 7), Colour% LINE (Hor% + 4, Vert% + 11)-(Hor% + 5, Vert% + 11), Colour% LINE (Hor% + 6, Vert% + 10)-(Hor% + 6, Vert% + 6), Colour% PSET (Hor% + 5, Vert% + 5), Colour% CASE 198 LINE (Hor%, Vert% + 11)-(Hor%, Vert% + 4), Colour% LINE (Hor% + 1, Vert% + 3)-(Hor% + 3, Vert% + 1), Colour% LINE (Hor% + 3, Vert% + 2)-(Hor% + 3, Vert% + 11), Colour% LINE (Hor% + 4, Vert% + 1)-(Hor% + 6, Vert% + 1), Colour% PSET (Hor% + 6, Vert% + 2), Colour% LINE (Hor% + 1, Vert% + 6)-(Hor% + 4, Vert% + 6), Colour% LINE (Hor% + 5, Vert% + 5)-(Hor% + 5, Vert% + 7), Colour% LINE (Hor% + 4, Vert% + 11)-(Hor% + 6, Vert% + 11), Colour% PSET (Hor% + 6, Vert% + 10), Colour% CASE 215 LINE (Hor% + 2, Vert% + 11)-(Hor% + 1, Vert% + 11), Colour% LINE (Hor%, Vert% + 10)-(Hor%, Vert% + 2), Colour% LINE (Hor% + 1, Vert% + 1)-(Hor% + 2, Vert% + 1), Colour% LINE (Hor% + 3, Vert% + 2)-(Hor% + 3, Vert% + 10), Colour% LINE (Hor% + 4, Vert% + 1)-(Hor% + 6, Vert% + 1), Colour% PSET (Hor% + 6, Vert% + 2), Colour% PSET (Hor% + 4, Vert% + 6), Colour% LINE (Hor% + 5, Vert% + 5)-(Hor% + 5, Vert% + 7), Colour% LINE (Hor% + 4, Vert% + 11)-(Hor% + 6, Vert% + 11), Colour% PSET (Hor% + 6, Vert% + 10), Colour% CASE 230 LINE (Hor% + 2, Vert% + 11)-(Hor% + 1, Vert% + 11), Colour% LINE (Hor%, Vert% + 10)-(Hor%, Vert% + 8), Colour% LINE (Hor% + 1, Vert% + 7)-(Hor% + 5, Vert% + 7), Colour% PSET (Hor% + 6, Vert% + 6), Colour% LINE (Hor% + 5, Vert% + 5)-(Hor% + 4, Vert% + 5), Colour% LINE (Hor% + 1, Vert% + 5)-(Hor% + 2, Vert% + 5), Colour% LINE (Hor% + 3, Vert% + 6)-(Hor% + 3, Vert% + 10), Colour% LINE (Hor% + 4, Vert% + 11)-(Hor% + 5, Vert% + 11), Colour% PSET (Hor% + 6, Vert% + 10), Colour% CASE 247 LINE (Hor% + 2, Vert% + 11)-(Hor% + 1, Vert% + 11), Colour% LINE (Hor%, Vert% + 10)-(Hor%, Vert% + 6), Colour% LINE (Hor% + 1, Vert% + 5)-(Hor% + 2, Vert% + 5), Colour% LINE (Hor% + 4, Vert% + 7)-(Hor% + 5, Vert% + 7), Colour% PSET (Hor% + 6, Vert% + 6), Colour% LINE (Hor% + 5, Vert% + 5)-(Hor% + 4, Vert% + 5), Colour% LINE (Hor% + 3, Vert% + 6)-(Hor% + 3, Vert% + 10), Colour% LINE (Hor% + 4, Vert% + 11)-(Hor% + 5, Vert% + 11), Colour% PSET (Hor% + 6, Vert% + 10), Colour% CASE ELSE LINE (Hor%, Vert%)-(Hor% + 6, Vert% + 12), Colour%, BF END SELECT SELECT CASE Dgt% CASE 192, 200, 204, 210, 217 LINE (Hor% + 4, Vert%)-(Hor% + 2, Vert% - 2), Colour% CASE 193, 201, 205, 211, 218, 221 LINE (Hor% + 2, Vert%)-(Hor% + 4, Vert% - 2), Colour% CASE 194, 202, 206, 212, 219 LINE (Hor% + 1, Vert%)-(Hor% + 3, Vert% - 2), Colour% LINE (Hor% + 4, Vert% - 1)-(Hor% + 5, Vert%), Colour% CASE 195, 209, 213 PSET (Hor% + 1, Vert% - 1), Colour% LINE (Hor% + 2, Vert% - 2)-(Hor% + 4, Vert%), Colour% PSET (Hor% + 5, Vert% - 1), Colour% CASE 196, 203, 207, 214, 220, 159 PSET (Hor% + 2, Vert% - 1), Colour% PSET (Hor% + 4, Vert% - 1), Colour% CASE 197 CIRCLE (Hor% + 3, Vert% - 1), 1, Colour% CASE 224, 232, 236, 242, 249 LINE (Hor% + 4, Vert% + 3)-(Hor% + 2, Vert% + 1), Colour% CASE 225, 233, 237, 243, 250, 253 LINE (Hor% + 2, Vert% + 3)-(Hor% + 4, Vert% + 1), Colour% CASE 226, 234, 238, 244, 251 LINE (Hor% + 1, Vert% + 3)-(Hor% + 3, Vert% + 1), Colour% LINE (Hor% + 4, Vert% + 2)-(Hor% + 5, Vert% + 3), Colour% CASE 227, 241, 245 PSET (Hor% + 1, Vert% + 2), Colour% LINE (Hor% + 2, Vert% + 1)-(Hor% + 4, Vert% + 3), Colour% PSET (Hor% + 5, Vert% + 2), Colour% CASE 228, 235, 239, 246, 252, 255 PSET (Hor% + 2, Vert% + 3), Colour% PSET (Hor% + 4, Vert% + 3), Colour% CASE 229 CIRCLE (Hor% + 3, Vert% + 2), 1, Colour% END SELECT END SUB SUB DrawAccidental (Value%, col%, Row%, Colour%) SELECT CASE Value% CASE 2 LINE (col%, Row% - 7)-(col%, Row% + 4), Colour% LINE (col%, Row%)-(col% + 4, Row% - 4), Colour% LINE (col%, Row% + 4)-(col% + 4, Row%), Colour% LINE (col% + 4, Row% - 4)-(col% + 4, Row% + 7), Colour% CASE 3 LINE (col%, Row% - 9)-(col%, Row% + 4), Colour% PSET (col% + 1, Row% - 3), Colour% PSET (col% + 2, Row% - 4), Colour% PSET (col% + 3, Row% - 4), Colour% PSET (col% + 4, Row% - 3), Colour% PSET (col% + 4, Row% - 2), Colour% PSET (col% + 4, Row% - 1), Colour% PSET (col% + 4, Row%), Colour% PSET (col% + 3, Row% + 1), Colour% PSET (col% + 2, Row% + 2), Colour% PSET (col% + 1, Row% + 3), Colour% CASE 4 LINE (col%, Row% - 7)-(col%, Row% + 7), Colour% LINE (col% + 2, Row% - 7)-(col% + 2, Row% + 7), Colour% LINE (col% - 2, Row% - 3)-(col% + 4, Row% - 3), Colour% LINE (col% - 2, Row% - 2)-(col% + 4, Row% - 4), Colour% PSET (col% - 1, Row% - 2), Colour% LINE (col% - 2, Row% + 3)-(col% + 4, Row% + 3), Colour% LINE (col% - 2, Row% + 4)-(col% + 4, Row% + 2), Colour% PSET (col% - 1, Row% + 4), Colour% CASE 5 LINE (col% - 2, Row% - 9)-(col% - 2, Row% + 4), Colour% LINE (col% + 2, Row% - 9)-(col% + 2, Row% + 4), Colour% PSET (col% - 1, Row% - 3), Colour% PSET (col%, Row% - 4), Colour% PSET (col% + 1, Row% - 4), Colour% PSET (col% + 1, Row% + 1), Colour% PSET (col%, Row% + 2), Colour% PSET (col% - 1, Row% + 3), Colour% PSET (col% + 3, Row% - 3), Colour% PSET (col% + 4, Row% - 4), Colour% PSET (col% + 5, Row% - 4), Colour% PSET (col% + 6, Row% - 3), Colour% PSET (col% + 6, Row% - 2), Colour% PSET (col% + 6, Row% - 1), Colour% PSET (col% + 6, Row%), Colour% PSET (col% + 5, Row% + 1), Colour% PSET (col% + 4, Row% + 2), Colour% PSET (col% + 3, Row% + 3), Colour% CASE 6 LINE (col% - 1, Row% - 2)-(col% + 3, Row% + 2), Colour% LINE (col% - 1, Row% + 2)-(col% + 3, Row% - 2), Colour% END SELECT END SUB SUB DrawAccidentals (Note%, VerticalDisplace%, Colour%) SELECT CASE NoteData(Note%).Pitch CASE 2 TO 6 TryNote% = 0 DO TryNote% = TryNote% + 1 LOOP UNTIL TryNote% = NumberOfDrawnNotes% - 1 OR NoteData(TryNote%).Staff = NoteData(Note%).Staff AND (NoteData(TryNote%).Vertical = NoteData(Note%).Vertical + 1 OR NoteData(TryNote%).Vertical = NoteData(Note%).Vertical + 2 OR NoteData(TryNote%).Vertical = NoteData(Note%).Vertical - 1 OR NoteData(TryNote%).Vertical = NoteData(Note%).Vertical - 2) AND NoteData(TryNote%).Horizontal = NoteData(Note%).Horizontal IF NoteData(TryNote%).Staff = NoteData(Note%).Staff AND (NoteData(TryNote%).Vertical = NoteData(Note%).Vertical + 1 OR NoteData(TryNote%).Vertical = NoteData(Note%).Vertical + 2 OR NoteData(TryNote%).Vertical = NoteData(Note%).Vertical - 1 OR NoteData(TryNote%).Vertical = NoteData(Note%).Vertical - 2) AND NoteData(TryNote%).Horizontal = NoteData(Note%).Horizontal AND (NoteData(TryNote%).length = 11 OR NoteData(TryNote%).length = 12) THEN SideNoteBelow = TRUE ELSE SideNoteBelow = FALSE IF NoteData(Note%).length = 1 THEN DrawAccidental NoteData(Note%).Pitch, 18 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace%, Colour% ELSEIF NoteData(Note%).length < 9 AND SideNoteBelow THEN DrawAccidental NoteData(Note%).Pitch, 11 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace%, Colour% ELSEIF NoteData(Note%).length < 9 THEN DrawAccidental NoteData(Note%).Pitch, 19 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace%, Colour% ELSEIF NoteData(Note%).length = 9 OR NoteData(Note%).length = 10 THEN DrawAccidental NoteData(Note%).Pitch, 14 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace%, Colour% ELSEIF (NoteData(Note%).length = 11 OR NoteData(Note%).length = 12) THEN DrawAccidental NoteData(Note%).Pitch, 3 + 16 * NoteData(Note%).tail + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace%, Colour% END IF END SELECT END SUB SUB DrawClef (Clf%, Hor%, Vert%, Colour%) SELECT CASE Clf% CASE 1 PSET (Hor% + 7, 27 + Vert%), Colour% PSET (Hor% + 7, 28 + Vert%), Colour% PSET (Hor% + 8, 29 + Vert%), Colour% PSET (Hor% + 9, 30 + Vert%), Colour% PSET (Hor% + 10, 30 + Vert%), Colour% PSET (Hor% + 11, 31 + Vert%), Colour% PSET (Hor% + 12, 30 + Vert%), Colour% PSET (Hor% + 13, 30 + Vert%), Colour% PSET (Hor% + 14, 29 + Vert%), Colour% LINE (Hor% + 15, 28 + Vert%)-(Hor% + 15, 12 + Vert%), Colour% LINE (Hor% + 14, 11 + Vert%)-(Hor% + 14, -2 + Vert%), Colour% PSET (Hor% + 15, -3 + Vert%), Colour% PSET (Hor% + 16, -4 + Vert%), Colour% PSET (Hor% + 17, -4 + Vert%), Colour% PSET (Hor% + 18, -3 + Vert%), Colour% PSET (Hor% + 19, -2 + Vert%), Colour% PSET (Hor% + 19, -1 + Vert%), Colour% PSET (Hor% + 19, 0 + Vert%), Colour% PSET (Hor% + 18, 1 + Vert%), Colour% PSET (Hor% + 18, 2 + Vert%), Colour% PSET (Hor% + 17, 3 + Vert%), Colour% PSET (Hor% + 16, 4 + Vert%), Colour% PSET (Hor% + 15, 5 + Vert%), Colour% PSET (Hor% + 14, 6 + Vert%), Colour% PSET (Hor% + 13, 7 + Vert%), Colour% PSET (Hor% + 12, 8 + Vert%), Colour% PSET (Hor% + 11, 9 + Vert%), Colour% PSET (Hor% + 10, 10 + Vert%), Colour% PSET (Hor% + 9, 11 + Vert%), Colour% PSET (Hor% + 9, 12 + Vert%), Colour% PSET (Hor% + 8, 13 + Vert%), Colour% LINE (Hor% + 8, 14 + Vert%)-(Hor% + 8, 18 + Vert%), Colour% PSET (Hor% + 8, 19 + Vert%), Colour% PSET (Hor% + 9, 20 + Vert%), Colour% PSET (Hor% + 10, 21 + Vert%), Colour% PSET (Hor% + 11, 22 + Vert%), Colour% PSET (Hor% + 12, 23 + Vert%), Colour% PSET (Hor% + 13, 23 + Vert%), Colour% LINE (Hor% + 14, 24 + Vert%)-(Hor% + 16, 24 + Vert%), Colour% PSET (Hor% + 17, 23 + Vert%), Colour% PSET (Hor% + 18, 23 + Vert%), Colour% PSET (Hor% + 19, 22 + Vert%), Colour% PSET (Hor% + 19, 21 + Vert%), Colour% LINE (Hor% + 20, 20 + Vert%)-(Hor% + 20, 16 + Vert%), Colour% PSET (Hor% + 19, 15 + Vert%), Colour% PSET (Hor% + 19, 14 + Vert%), Colour% LINE (Hor% + 18, 13 + Vert%)-(Hor% + 14, 13 + Vert%), Colour% PSET (Hor% + 13, 14 + Vert%), Colour% PSET (Hor% + 12, 15 + Vert%), Colour% PSET (Hor% + 11, 16 + Vert%), Colour% PSET (Hor% + 11, 17 + Vert%), Colour% PSET (Hor% + 12, 18 + Vert%), Colour% PSET (Hor% + 12, 19 + Vert%), Colour% PSET (Hor% + 13, 20 + Vert%), Colour% CASE 2 TO 4 IF Clf% = 2 THEN Vert% = Vert% + 12 IF Clf% = 4 THEN Vert% = Vert% - 6 LINE (9 + Hor%, 2 + Vert%)-(9 + Hor%, 27 + Vert%), Colour% LINE (12 + Hor%, 2 + Vert%)-(13 + Hor%, 27 + Vert%), Colour%, B LINE (14 + Hor%, 8 + Vert%)-(20 + Hor%, 10 + Vert%), Colour%, BF PSET (21 + Hor%, 10 + Vert%), Colour% PSET (19 + Hor%, 7 + Vert%), Colour% PSET (18 + Hor%, 7 + Vert%), Colour% LINE (17 + Hor%, 6 + Vert%)-(17 + Hor%, 2 + Vert%), Colour% LINE (14 + Hor%, 14 + Vert%)-(21 + Hor%, 16 + Vert%), Colour%, BF PSET (22 + Hor%, 14 + Vert%), Colour% LINE (23 + Hor%, 14 + Vert%)-(19 + Hor%, 18 + Vert%), Colour% PSET (18 + Hor%, 19 + Vert%), Colour% PSET (18 + Hor%, 20 + Vert%), Colour% LINE (17 + Hor%, 21 + Vert%)-(17 + Hor%, 23 + Vert%), Colour% PSET (18 + Hor%, 24 + Vert%), Colour% PSET (18 + Hor%, 25 + Vert%), Colour% PSET (19 + Hor%, 26 + Vert%), Colour% LINE (20 + Hor%, 27 + Vert%)-(22 + Hor%, 27 + Vert%), Colour% PSET (23 + Hor%, 26 + Vert%), Colour% PSET (24 + Hor%, 25 + Vert%), Colour% CASE 5 PSET (14 + Hor%, 7 + Vert%), Colour% PSET (15 + Hor%, 7 + Vert%), Colour% PSET (15 + Hor%, 5 + Vert%), Colour% PSET (14 + Hor%, 4 + Vert%), Colour% PSET (13 + Hor%, 4 + Vert%), Colour% PSET (12 + Hor%, 5 + Vert%), Colour% PSET (11 + Hor%, 7 + Vert%), Colour% PSET (12 + Hor%, 8 + Vert%), Colour% PSET (12 + Hor%, 9 + Vert%), Colour% PSET (13 + Hor%, 10 + Vert%), Colour% PSET (14 + Hor%, 11 + Vert%), Colour% PSET (15 + Hor%, 11 + Vert%), Colour% PSET (16 + Hor%, 11 + Vert%), Colour% PSET (17 + Hor%, 10 + Vert%), Colour% PSET (18 + Hor%, 9 + Vert%), Colour% PSET (19 + Hor%, 8 + Vert%), Colour% PSET (19 + Hor%, 7 + Vert%), Colour% PSET (19 + Hor%, 5 + Vert%), Colour% PSET (19 + Hor%, 4 + Vert%), Colour% PSET (18 + Hor%, 3 + Vert%), Colour% PSET (17 + Hor%, 2 + Vert%), Colour% PSET (16 + Hor%, 1 + Vert%), Colour% PSET (15 + Hor%, 1 + Vert%), Colour% PSET (12 + Hor%, 1 + Vert%), Colour% PSET (11 + Hor%, 1 + Vert%), Colour% PSET (10 + Hor%, 2 + Vert%), Colour% PSET (9 + Hor%, 3 + Vert%), Colour% PSET (8 + Hor%, 4 + Vert%), Colour% LINE (8 + Hor%, 5 + Vert%)-(8 + Hor%, 9 + Vert%), Colour% PSET (9 + Hor%, 10 + Vert%), Colour% PSET (9 + Hor%, 11 + Vert%), Colour% PSET (11 + Hor%, 13 + Vert%), Colour% PSET (12 + Hor%, 14 + Vert%), Colour% PSET (13 + Hor%, 14 + Vert%), Colour% LINE (14 + Hor%, 15 + Vert%)-(17 + Hor%, 15 + Vert%), Colour% LINE (18 + Hor%, 14 + Vert%)-(20 + Hor%, 14 + Vert%), Colour% PSET (21 + Hor%, 13 + Vert%), Colour% PSET (22 + Hor%, 13 + Vert%), Colour% PSET (22 + Hor%, 9 + Vert%), Colour% PSET (22 + Hor%, 3 + Vert%), Colour% END SELECT END SUB SUB DrawDots (Note%, VerticalDisplace%, Colour%) TryNote% = 0 SideNote = FALSE SELECT CASE NoteData(Note%).tail MOD 2 CASE 1 DO TryNote% = TryNote% + 1 IF NoteData(TryNote%).Staff = NoteData(Note%).Staff AND NoteData(TryNote%).Vertical = NoteData(Note%).Vertical - 1 AND NoteData(TryNote%).Horizontal = NoteData(Note%).Horizontal AND NoteData(TryNote%).length > 10 THEN SideNote = TRUE LOOP UNTIL TryNote% = NumberOfDrawnNotes% - 1 OR SideNote CASE 0 DO TryNote% = TryNote% + 1 IF NoteData(TryNote%).Staff = NoteData(Note%).Staff AND NoteData(TryNote%).Vertical = NoteData(Note%).Vertical + 1 AND NoteData(TryNote%).Horizontal = NoteData(Note%).Horizontal AND NoteData(TryNote%).length > 10 THEN SideNote = TRUE LOOP UNTIL TryNote% = NumberOfDrawnNotes% - 1 OR SideNote END SELECT IF NoteData(Note%).length < 3 THEN IF NoteData(Note%).Vertical MOD 2 = 0 THEN PSET (41 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace%), Colour% ELSE PSET (41 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 3), Colour% END IF ELSEIF NoteData(Note%).length < 9 AND NOT SideNote OR (NoteData(Note%).length = 11 OR NoteData(Note%).length = 12) AND NoteData(Note%).tail MOD 2 = 0 THEN IF NoteData(Note%).Vertical MOD 2 = 0 THEN PSET (38 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace%), Colour% ELSEIF NoteData(Note%).tail MOD 2 = 0 THEN PSET (38 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% + 3), Colour% ELSEIF NoteData(Note%).length = 8 OR NoteData(Note%).Kind = 8 AND NoteData(Note%).length = 7 THEN PSET (40 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 3), Colour% ELSE PSET (38 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 3), Colour% END IF ELSEIF NoteData(Note%).length = 9 THEN IF NoteData(Note%).Vertical MOD 2 = 1 THEN PSET (41 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 3), Colour% PSET (41 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% + 3), Colour% ELSE PSET (40 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace%), Colour% PSET (43 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace%), Colour% END IF ELSEIF NoteData(Note%).length = 10 THEN IF NoteData(Note%).Vertical MOD 2 = 1 THEN PSET (41 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 3), Colour% PSET (41 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% + 3), Colour% ELSE PSET (41 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 6), Colour% PSET (41 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace%), Colour% END IF ELSEIF NoteData(Note%).length > 10 AND NoteData(Note%).tail MOD 2 = 1 THEN IF NoteData(Note%).Vertical MOD 2 = 0 THEN PSET (44 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace%), Colour% ELSE PSET (44 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% + 3), Colour% END IF ELSEIF NoteData(Note%).tail MOD 2 = 0 THEN IF NoteData(Note%).Vertical MOD 2 = 0 THEN PSET (38 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace%), Colour% ELSE PSET (41 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% + 3), Colour% END IF ELSE IF NoteData(Note%).Vertical MOD 2 = 0 THEN PSET (47 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace%), Colour% ELSE PSET (44 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% + 3), Colour% END IF END IF END SUB SUB DrawGroup (Gp%, Colour%) LowestStaff% = 120 HighestStaff% = -120 FOR Note% = GroupNos(Gp% - 1) + 1 TO GroupNos(Gp%) IF NoteData(Note%).Staff < LowestStaff% THEN LowestStaff% = NoteData(Note%).Staff IF NoteData(Note%).Staff > HighestStaff% THEN HighestStaff% = NoteData(Note%).Staff NEXT Note% IF LowestStaff% < HighestStaff% THEN FOR Note% = GroupNos(Gp% - 1) + 1 TO GroupNos(Gp%) IF StaffInitial(NoteData(Note%).Staff).DrawPosition > -1 THEN IF NoteData(Note%).selected THEN DrawNote Note%, 13 ELSE DrawNote Note%, 5 END IF NEXT Note% ELSE VerticalDisplace% = StaffInitial(NoteData(GroupNos(Gp% - 1) + 1).Staff).DrawPosition + ((StaffInitial(NoteData(GroupNos(Gp% - 1) + 1).Staff).Staves AND 1920) \ 128) * 3 - 48 SELECT CASE NoteData(GroupNos(Gp% - 1) + 1).Vertical CASE 0 TO 49 LeftVerticalDisplace% = VerticalDisplace% CASE 50 TO 99 LeftVerticalDisplace% = VerticalDisplace% + StaffInitial(NoteData(GroupNos(Gp% - 1) + 1).Staff).Staff2 \ 128 CASE 100 TO 149 LeftVerticalDisplace% = VerticalDisplace% + StaffInitial(NoteData(GroupNos(Gp% - 1) + 1).Staff).Staff3 \ 128 CASE 150 TO 199 LeftVerticalDisplace% = VerticalDisplace% + StaffInitial(NoteData(GroupNos(Gp% - 1) + 1).Staff).Staff4 \ 128 END SELECT LeftEndHor% = 28 + NoteData(GroupNos(Gp% - 1) + 1).Horizontal * 5 + 6 * (NoteData(GroupNos(Gp% - 1) + 1).tail AND 1) LeftEndVert% = (NoteData(GroupNos(Gp% - 1) + 1).Vertical MOD 50) * 3 + LeftVerticalDisplace% - (NoteData(GroupNos(Gp% - 1) + 1).tail AND 16256) \ 128 * (2 * (NoteData(GroupNos(Gp% - 1) + 1).tail AND 1) - 1) SELECT CASE NoteData(GroupNos(Gp%)).Vertical CASE 0 TO 49 RightVerticalDisplace% = VerticalDisplace% CASE 50 TO 99 RightVerticalDisplace% = VerticalDisplace% + StaffInitial(NoteData(GroupNos(Gp%)).Staff).Staff2 \ 128 CASE 100 TO 149 RightVerticalDisplace% = VerticalDisplace% + StaffInitial(NoteData(GroupNos(Gp%)).Staff).Staff3 \ 128 CASE 150 TO 199 RightVerticalDisplace% = VerticalDisplace% + StaffInitial(NoteData(GroupNos(Gp%)).Staff).Staff4 \ 128 END SELECT RightEndHor% = 28 + NoteData(GroupNos(Gp%)).Horizontal * 5 + 6 * (NoteData(GroupNos(Gp%)).tail AND 1) RightEndVert% = (NoteData(GroupNos(Gp%)).Vertical MOD 50) * 3 + RightVerticalDisplace% - (NoteData(GroupNos(Gp%)).tail AND 16256) \ 128 * (2 * (NoteData(GroupNos(Gp%)).tail AND 1) - 1) IF (NoteData(GroupNos(Gp% - 1) + 1).tail AND 1) = 1 THEN OffSet% = 1 ELSE OffSet% = -1 IF NoteData(GroupNos(Gp% - 1) + 1).Kind < 3 THEN SmallNote% = 0 ELSE SmallNote% = OffSet% Vert% = (NoteData(GroupNos(Gp% - 1) + 1).Vertical MOD 50) * 3 + LeftVerticalDisplace% CIRCLE (LeftEndHor% - OffSet% * 3 + SmallNote%, Vert%), 3 - ABS(SmallNote%), Colour% IF NoteData(GroupNos(Gp% - 1) + 1).length > 3 THEN LINE (LeftEndHor% - OffSet% * 3 - 2 + ABS(SmallNote%) + SmallNote%, ABS(SmallNote%) + Vert% - 2)-(LeftEndHor% - OffSet% * 3 + 2 - ABS(SmallNote%) + SmallNote%, -ABS(SmallNote%) + Vert% + 2), Colour%, BF END IF LINE (LeftEndHor%, Vert%)-(LeftEndHor%, LeftEndVert% + OffSet%), Colour% DrawLedgerLines GroupNos(Gp% - 1) + 1, LeftVerticalDisplace% DrawAccidentals GroupNos(Gp% - 1) + 1, LeftVerticalDisplace%, Colour% IF NoteData(GroupNos(Gp% - 1) + 1).Kind = 2 OR NoteData(GroupNos(Gp% - 1) + 1).Kind = 8 THEN DrawDots GroupNos(Gp% - 1) + 1, LeftVerticalDisplace%, Colour% Gradient! = -(RightEndVert% - LeftEndVert%) / (RightEndHor% - LeftEndHor%) FOR Note% = GroupNos(Gp% - 1) + 2 TO GroupNos(Gp%) - 1 Hor% = 31 + NoteData(Note%).Horizontal * 5 SELECT CASE NoteData(Note%).Vertical CASE 0 TO 49 CurrentVerticalDisplace% = VerticalDisplace% CASE 50 TO 99 CurrentVerticalDisplace% = VerticalDisplace% + StaffInitial(NoteData(GroupNos(Gp% - 1) + 1).Staff).Staff2 \ 128 CASE 100 TO 149 CurrentVerticalDisplace% = VerticalDisplace% + StaffInitial(NoteData(GroupNos(Gp% - 1) + 1).Staff).Staff3 \ 128 CASE 150 TO 199 CurrentVerticalDisplace% = VerticalDisplace% + StaffInitial(NoteData(GroupNos(Gp% - 1) + 1).Staff).Staff4 \ 128 END SELECT Vert% = (NoteData(Note%).Vertical MOD 50) * 3 + CurrentVerticalDisplace% FarEndVert% = LeftEndVert% - (Hor% - LeftEndHor%) * Gradient! IF FarEndVert% < Vert% THEN NoteData(Note%).tail = NoteData(Note%).tail OR 1: OffSet% = 1 ELSE NoteData(Note%).tail = NoteData(Note%).tail AND 32766: OffSet% = -1 IF NoteData(Note%).Kind < 3 THEN SmallNote% = 0 ELSE SmallNote% = OffSet% CIRCLE (Hor% + SmallNote%, Vert%), 3 - ABS(SmallNote%), Colour% IF NoteData(Note%).length > 3 THEN LINE (Hor% - 2 + ABS(SmallNote%) + SmallNote%, ABS(SmallNote%) + Vert% - 2)-(Hor% + 2 - ABS(SmallNote%) + SmallNote%, -ABS(SmallNote%) + Vert% + 2), Colour%, BF END IF LINE (Hor% + OffSet% * 3, Vert%)-(Hor% + OffSet% * 3, LeftEndVert% - (Hor% + OffSet% * 3 - LeftEndHor%) * Gradient! + OffSet%), Colour% DrawLedgerLines Note%, CurrentVerticalDisplace% DrawAccidentals Note%, CurrentVerticalDisplace%, Colour% IF NoteData(Note%).Kind = 2 OR NoteData(Note%).Kind = 8 THEN DrawDots Note%, CurrentVerticalDisplace%, Colour% NEXT Note% IF (NoteData(GroupNos(Gp%)).tail AND 1) = 1 THEN OffSet% = 1 ELSE OffSet% = -1 IF NoteData(GroupNos(Gp%)).Kind < 3 THEN SmallNote% = 0 ELSE SmallNote% = OffSet% Vert% = (NoteData(GroupNos(Gp%)).Vertical MOD 50) * 3 + RightVerticalDisplace% CIRCLE (RightEndHor% - OffSet% * 3 + SmallNote%, Vert%), 3 - ABS(SmallNote%), Colour% IF NoteData(GroupNos(Gp%)).length > 3 THEN LINE (RightEndHor% - OffSet% * 3 - 2 + ABS(SmallNote%) + SmallNote%, ABS(SmallNote%) + Vert% - 2)-(RightEndHor% - OffSet% * 3 + 2 - ABS(SmallNote%) + SmallNote%, -ABS(SmallNote%) + Vert% + 2), Colour%, BF END IF LINE (RightEndHor%, Vert%)-(RightEndHor%, RightEndVert% + OffSet%), Colour% DrawLedgerLines GroupNos(Gp%), RightVerticalDisplace% DrawAccidentals GroupNos(Gp%), RightVerticalDisplace%, Colour% IF NoteData(GroupNos(Gp%)).Kind = 2 OR NoteData(GroupNos(Gp%)).Kind = 8 THEN DrawDots GroupNos(Gp%), RightVerticalDisplace%, Colour% LINE (LeftEndHor%, LeftEndVert%)-(RightEndHor%, RightEndVert%), Colour% FOR x% = 2 TO 4 Note% = GroupNos(Gp% - 1) + 1 DO DO WHILE Note% <= GroupNos(Gp%) AND (NoteData(Note%).tail AND 14) \ 2 < x% AND (NoteData(Note%).tail AND 112) \ 16 < x% Note% = Note% + 1 LOOP IF Note% <= GroupNos(Gp%) THEN LineStart% = Note% LineSide% = NoteData(LineStart%).tail AND 1 EndFound% = FALSE DO WHILE EndFound% = FALSE IF (NoteData(Note%).tail AND 112) \ 16 < x% THEN EndFound% = TRUE NoteNext% = Note% + 1 DO WHILE NoteNext% <= GroupNos(Gp%) AND NoteData(Note%).Horizontal = NoteData(NoteNext%).Horizontal NoteNext% = NoteNext% + 1 LOOP ELSE NoteNext% = Note% + 1 DO WHILE NoteData(Note%).Horizontal = NoteData(NoteNext%).Horizontal NoteNext% = NoteNext% + 1 LOOP IF (NoteData(NoteNext%).tail AND 14) \ 2 < x% OR (NoteData(NoteNext%).tail AND 1) <> LineSide% THEN EndFound% = TRUE ELSE Note% = NoteNext% END IF END IF LOOP LineStartHor% = 28 + NoteData(LineStart%).Horizontal * 5 + LineSide% * 6 IF (NoteData(LineStart%).tail AND 14) \ 2 >= x% THEN LineStartHor% = LineStartHor% - 3 LineStartVert% = LeftEndVert% + (6 * LineSide% - 3) * (x% - 1) - (LineStartHor% - LeftEndHor%) * Gradient! LineEndHor% = 28 + NoteData(Note%).Horizontal * 5 + LineSide% * 6 IF (NoteData(Note%).tail AND 112) \ 16 >= x% THEN LineEndHor% = LineEndHor% + 3 LineEndVert% = LeftEndVert% + (6 * LineSide% - 3) * (x% - 1) - (LineEndHor% - LeftEndHor%) * Gradient! LINE (LineStartHor%, LineStartVert%)-(LineEndHor%, LineEndVert%), Colour% Note% = NoteNext% END IF LOOP WHILE Note% <= GroupNos(Gp%) NEXT x% END IF END SUB SUB DrawHeader FOR l% = 0 TO 3 FOR Place% = 1 TO 80 Digit ASC(MID$(Header(l%), Place%, 1)), 8 * Place% - 8, 15 * l%, 0 NEXT Place% NEXT l% END SUB SUB DrawKeySig (KeySigVal%, Clf%, Hor%, Vert%, Colour%) SELECT CASE Clf% CASE 1, 3, 5 Vert% = Vert% + (Clf% - 1) * 3 / 2 IF KeySigVal% < 8 THEN DrawAccidental 3, 1 + Hor%, 12 + Vert%, Colour% IF KeySigVal% < 7 THEN DrawAccidental 3, 5 + Hor%, 3 + Vert%, Colour% IF KeySigVal% < 6 THEN DrawAccidental 3, 7 + Hor%, 15 + Vert%, Colour% IF KeySigVal% < 5 THEN DrawAccidental 3, 11 + Hor%, 6 + Vert%, Colour% IF KeySigVal% < 4 THEN DrawAccidental 3, 13 + Hor%, 18 + Vert%, Colour% IF KeySigVal% < 3 THEN DrawAccidental 3, 17 + Hor%, 9 + Vert%, Colour% IF KeySigVal% = 1 THEN DrawAccidental 3, 19 + Hor%, 21 + Vert%, Colour% IF KeySigVal% > 8 THEN DrawAccidental 4, 4 + Hor%, Vert%, Colour% IF KeySigVal% > 9 THEN DrawAccidental 4, 9 + Hor%, 9 + Vert%, Colour% IF KeySigVal% > 10 THEN DrawAccidental 4, 14 + Hor%, -3 + Vert%, Colour% IF KeySigVal% > 11 THEN DrawAccidental 4, 19 + Hor%, 6 + Vert%, Colour% IF KeySigVal% > 12 THEN DrawAccidental 4, 24 + Hor%, 15 + Vert%, Colour% IF KeySigVal% > 13 THEN DrawAccidental 4, 29 + Hor%, 3 + Vert%, Colour% IF KeySigVal% = 15 THEN DrawAccidental 4, 34 + Hor%, 12 + Vert%, Colour% CASE 2, 4 Displace% = (Clf% - 2) / 2 IF KeySigVal% < 8 THEN DrawAccidental 3, 1 + Hor%, 6 + Vert% + 3 * Displace%, Colour% IF KeySigVal% < 7 THEN DrawAccidental 3, 5 + Hor%, 18 + Vert% - 18 * Displace%, Colour% IF KeySigVal% < 6 THEN DrawAccidental 3, 7 + Hor%, 9 + Vert% + 3 * Displace%, Colour% IF KeySigVal% < 5 THEN DrawAccidental 3, 11 + Hor%, 21 + Vert% - 18 * Displace%, Colour% IF KeySigVal% < 4 THEN DrawAccidental 3, 13 + Hor%, 12 + Vert% + 3 * Displace%, Colour% IF KeySigVal% < 3 THEN DrawAccidental 3, 17 + Hor%, 24 + Vert% - 18 * Displace%, Colour% IF KeySigVal% = 1 THEN DrawAccidental 3, 19 + Hor%, 15 + Vert% + 3 * Displace%, Colour% IF KeySigVal% > 8 THEN DrawAccidental 4, 4 + Hor%, 15 + Vert% + 3 * Displace%, Colour% IF KeySigVal% > 9 THEN DrawAccidental 4, 9 + Hor%, 24 + Vert% - 18 * Displace%, Colour% IF KeySigVal% > 10 THEN DrawAccidental 4, 14 + Hor%, 12 + Vert% + 3 * Displace%, Colour% IF KeySigVal% > 11 THEN DrawAccidental 4, 19 + Hor%, 21 + Vert% - 18 * Displace%, Colour% IF KeySigVal% > 12 THEN DrawAccidental 4, 24 + Hor%, 9 + Vert% + 3 * Displace%, Colour% IF KeySigVal% > 13 THEN DrawAccidental 4, 29 + Hor%, 18 + Vert% - 18 * Displace%, Colour% IF KeySigVal% = 15 THEN DrawAccidental 4, 34 + Hor%, 6 + Vert% + 3 * Displace%, Colour% END SELECT END SUB SUB DrawLedgerLines (Note%, VerticalDisplace%) VertPos% = VerticalDisplace% HorPos% = NoteData(Note%).Horizontal * 5 + 31 IF NoteData(Note%).Vertical MOD 50 < 2 THEN LedgerLine HorPos%, VertPos% + 3, 0 IF NoteData(Note%).Vertical MOD 50 < 4 THEN LedgerLine HorPos%, VertPos% + 9, 0 IF NoteData(Note%).Vertical MOD 50 < 6 THEN LedgerLine HorPos%, VertPos% + 15, 0 IF NoteData(Note%).Vertical MOD 50 < 8 THEN LedgerLine HorPos%, VertPos% + 21, 0 IF NoteData(Note%).Vertical MOD 50 < 10 THEN LedgerLine HorPos%, VertPos% + 27, 0 IF NoteData(Note%).Vertical MOD 50 < 12 THEN LedgerLine HorPos%, VertPos% + 33, 0 IF NoteData(Note%).Vertical MOD 50 < 14 THEN LedgerLine HorPos%, VertPos% + 39, 0 IF NoteData(Note%).Vertical MOD 50 < 16 THEN LedgerLine HorPos%, VertPos% + 45, 0 IF NoteData(Note%).Vertical MOD 50 < 18 THEN LedgerLine HorPos%, VertPos% + 51, 0 IF NoteData(Note%).Vertical MOD 50 < 20 THEN LedgerLine HorPos%, VertPos% + 57, 0 IF NoteData(Note%).Vertical MOD 50 > 30 THEN LedgerLine HorPos%, VertPos% + 93, 0 IF NoteData(Note%).Vertical MOD 50 > 32 THEN LedgerLine HorPos%, VertPos% + 99, 0 IF NoteData(Note%).Vertical MOD 50 > 34 THEN LedgerLine HorPos%, VertPos% + 105, 0 IF NoteData(Note%).Vertical MOD 50 > 36 THEN LedgerLine HorPos%, VertPos% + 111, 0 IF NoteData(Note%).Vertical MOD 50 > 38 THEN LedgerLine HorPos%, VertPos% + 117, 0 IF NoteData(Note%).Vertical MOD 50 > 40 THEN LedgerLine HorPos%, VertPos% + 123, 0 IF NoteData(Note%).Vertical MOD 50 > 42 THEN LedgerLine HorPos%, VertPos% + 129, 0 IF NoteData(Note%).Vertical MOD 50 > 44 THEN LedgerLine HorPos%, VertPos% + 135, 0 IF NoteData(Note%).Vertical MOD 50 > 46 THEN LedgerLine HorPos%, VertPos% + 141, 0 IF NoteData(Note%).Vertical MOD 50 = 49 THEN LedgerLine HorPos%, VertPos% + 147, 0 END SUB SUB DrawNote (Note%, Colour%) VerticalDisplace% = StaffInitial(NoteData(Note%).Staff).DrawPosition + ((StaffInitial(NoteData(Note%).Staff).Staves AND 1920) \ 128) * 3 - 48 SELECT CASE NoteData(Note%).Vertical CASE 50 TO 99 VerticalDisplace% = VerticalDisplace% + StaffInitial(NoteData(Note%).Staff).Staff2 \ 128 CASE 100 TO 149 VerticalDisplace% = VerticalDisplace% + StaffInitial(NoteData(Note%).Staff).Staff3 \ 128 CASE 150 TO 199 VerticalDisplace% = VerticalDisplace% + StaffInitial(NoteData(Note%).Staff).Staff4 \ 128 END SELECT SELECT CASE NoteData(Note%).Kind CASE 0 CASE 1, 2, 7, 8 'note/dotted; small note/dotted IF NoteData(Note%).Kind = 7 OR NoteData(Note%).Kind = 8 THEN IF NoteData(Note%).tail MOD 2 = 0 THEN SmallNote% = -1 ELSE SmallNote% = 1 ELSE SmallNote% = 0 END IF IF NoteData(Note%).length > 2 AND NoteData(Note%).length < 9 THEN CIRCLE (31 + SmallNote% + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace%), 3 - ABS(SmallNote%), Colour% END IF IF NoteData(Note%).length > 3 AND NoteData(Note%).length < 9 THEN LINE (29 + ABS(SmallNote%) + SmallNote% + NoteData(Note%).Horizontal * 5, ABS(SmallNote%) + (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 2)-(33 - ABS(SmallNote%) + SmallNote% + NoteData(Note%).Horizontal * 5, -ABS(SmallNote%) + (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% + 2), Colour%, BF END IF SELECT CASE NoteData(Note%).length CASE 1 CIRCLE (31 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace%), 3 - ABS(SmallNote%), Colour% LINE (26 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 5 + 2 * ABS(SmallNote%))-(26 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% + 5 - 2 * ABS(SmallNote%)), Colour% LINE (28 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 5 + 2 * ABS(SmallNote%))-(28 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% + 5 - 2 * ABS(SmallNote%)), Colour% LINE (34 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 5 + 2 * ABS(SmallNote%))-(34 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% + 5 - 2 * ABS(SmallNote%)), Colour% LINE (36 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 5 + 2 * ABS(SmallNote%))-(36 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% + 5 - 2 * ABS(SmallNote%)), Colour% CASE 2 CIRCLE (31 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace%), 3 - ABS(SmallNote%), Colour% CASE 3 TO 8 IF NoteData(Note%).tail MOD 2 = 1 THEN LINE (34 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 16 + 4 * SmallNote%)-(34 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace%), Colour% ELSE LINE (28 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace%)-(28 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% + 16 + 4 * SmallNote%), Colour% CASE 9 CIRCLE (29 + SmallNote% + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace%), 3 - ABS(SmallNote%), Colour% CIRCLE (33 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace%), 3 - ABS(SmallNote%), Colour% LINE (24 + SmallNote% + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 5 - 2 * SmallNote%)-(24 + SmallNote% + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% + 5 + 2 * SmallNote%), Colour% LINE (26 + SmallNote% + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 5 - 2 * SmallNote%)-(26 + SmallNote% + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% + 5 + 2 * SmallNote%), Colour% LINE (36 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 5 - 2 * SmallNote%)-(36 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% + 5 + 2 * SmallNote%), Colour% LINE (38 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 5 - 2 * SmallNote%)-(38 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% + 5 + 2 * SmallNote%), Colour% CASE 10 CIRCLE (29 + SmallNote% + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace%), 3 - ABS(SmallNote%), Colour% CIRCLE (33 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 3), 3 - ABS(SmallNote%), Colour% LINE (24 + SmallNote% + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 8 - 2 * SmallNote%)-(24 + SmallNote% + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% + 5 + 2 * SmallNote%), Colour% LINE (26 + SmallNote% + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 8 - 2 * SmallNote%)-(26 + SmallNote% + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% + 5 + 2 * SmallNote%), Colour% LINE (36 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 8 - 2 * SmallNote%)-(36 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% + 5 + 2 * SmallNote%), Colour% LINE (38 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 8 - 2 * SmallNote%)-(38 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% + 5 + 2 * SmallNote%), Colour% CASE 11 TO 12 IF NoteData(Note%).tail MOD 2 = 1 THEN CIRCLE (37 - SmallNote% + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace%), 3 - ABS(SmallNote%), Colour% ELSE CIRCLE (25 - SmallNote% + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace%), 3 - ABS(SmallNote%), Colour% END IF IF NoteData(Note%).length = 12 THEN IF NoteData(Note%).tail MOD 2 = 1 THEN LINE (35 + ABS(SmallNote%) - SmallNote% + NoteData(Note%).Horizontal * 5, ABS(SmallNote%) + (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 2)-(39 - ABS(SmallNote%) - SmallNote% + NoteData(Note%).Horizontal * 5, -ABS(SmallNote%) + (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% + 2), Colour%, BF ELSE LINE (23 + ABS(SmallNote%) - SmallNote% + NoteData(Note%).Horizontal * 5, ABS(SmallNote%) + (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 2)-(27 - ABS(SmallNote%) - SmallNote% + NoteData(Note%).Horizontal * 5, -ABS(SmallNote%) + (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% + 2), Colour%, BF END IF END IF END SELECT IF NoteData(Note%).length > 4 AND NoteData(Note%).length < 9 THEN IF NoteData(Note%).tail MOD 2 = 1 THEN LINE (34 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 16 + 4 * SmallNote%)-(38 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 12 + 4 * SmallNote%), Colour% ELSE LINE (28 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% + 16 + 4 * SmallNote%)-(32 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% + 12 + 4 * SmallNote%), Colour% END IF IF NoteData(Note%).length > 5 AND NoteData(Note%).length < 9 THEN IF NoteData(Note%).tail MOD 2 = 1 THEN LINE (34 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 13 + 3 * SmallNote%)-(38 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 9 + 3 * SmallNote%), Colour% ELSE LINE (28 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% + 13 + 3 * SmallNote%)-(32 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% + 9 + 3 * SmallNote%), Colour% END IF IF NoteData(Note%).length > 6 AND NoteData(Note%).length < 9 THEN IF NoteData(Note%).tail MOD 2 = 1 THEN LINE (34 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 10 + 2 * SmallNote%)-(38 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 6 + 2 * SmallNote%), Colour% ELSE LINE (28 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% + 10 + 2 * SmallNote%)-(32 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% + 6 + 2 * SmallNote%), Colour% END IF IF NoteData(Note%).length = 8 THEN IF NoteData(Note%).tail MOD 2 = 1 THEN LINE (34 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 7 + SmallNote%)-(38 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 3 + SmallNote%), Colour% ELSE LINE (28 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% + 16 + 5 * SmallNote%)-(28 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% + 19 + 5 * SmallNote%), Colour% LINE (28 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% + 19 + 5 * SmallNote%)-(32 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% + 15 + 5 * SmallNote%), Colour% END IF END IF DrawLedgerLines Note%, VerticalDisplace% DrawAccidentals Note%, VerticalDisplace%, Colour% IF NoteData(Note%).Kind = 2 OR NoteData(Note%).Kind = 8 THEN DrawDots Note%, VerticalDisplace%, Colour% CASE 3 'rest SELECT CASE NoteData(Note%).length CASE 1 LINE (29 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 2)-(33 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% + 2), Colour%, BF CASE 2 LINE (29 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 2)-(33 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 1), Colour%, BF CASE 3 LINE (29 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% + 1)-(33 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% + 2), Colour%, BF CASE 4 LINE (29 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 1)-(29 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% + 8), Colour% PSET (30 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 1), Colour% PSET (31 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace%), Colour% PSET (32 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace%), Colour% PSET (33 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 1), Colour% CASE 5 TO 8 LINE (33 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 1)-(33 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% + 8), Colour% PSET (32 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 1), Colour% PSET (31 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace%), Colour% PSET (30 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace%), Colour% PSET (29 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 1), Colour% END SELECT IF NoteData(Note%).length > 5 AND NoteData(Note%).length < 9 THEN LINE (33 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 4)-(33 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 2), Colour% PSET (32 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 4), Colour% PSET (31 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 3), Colour% PSET (30 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 3), Colour% PSET (29 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 4), Colour% END IF IF NoteData(Note%).length > 6 AND NoteData(Note%).length < 9 THEN LINE (33 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 7)-(33 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 5), Colour% PSET (32 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 7), Colour% PSET (31 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 6), Colour% PSET (30 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 6), Colour% PSET (29 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 7), Colour% END IF IF NoteData(Note%).length = 8 THEN LINE (33 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 10)-(33 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 8), Colour% PSET (32 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 10), Colour% PSET (31 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 9), Colour% PSET (30 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 9), Colour% PSET (29 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 10), Colour% END IF 'Do I want to draw any ledger lines? CASE 4 'pause SELECT CASE NoteData(Note%).tail CASE 0 LINE (30 + NoteData(Note%).Horizontal * 5, VerticalDisplace% + 54 - NoteData(Note%).Pitch)-(32 + NoteData(Note%).Horizontal * 5, VerticalDisplace% + 55 - NoteData(Note%).Pitch), Colour%, BF CIRCLE (31 + NoteData(Note%).Horizontal * 5, VerticalDisplace% + 55 - NoteData(Note%).Pitch), 5, Colour%, 0, PI CASE 1 LINE (30 + NoteData(Note%).Horizontal * 5, VerticalDisplace% + 95 + NoteData(Note%).Pitch)-(32 + NoteData(Note%).Horizontal * 5, VerticalDisplace% + 96 + NoteData(Note%).Pitch), Colour%, BF CIRCLE (31 + NoteData(Note%).Horizontal * 5, VerticalDisplace% + 95 + NoteData(Note%).Pitch), 5, Colour%, PI, 0 CASE 2 LINE (30 + NoteData(Note%).Horizontal * 5, VerticalDisplace% + 54 + StaffInitial(NoteData(Note%).Staff).Staff2 \ 128 - NoteData(Note%).Pitch)-(32 + NoteData(Note%).Horizontal * 5, VerticalDisplace% + 55 + StaffInitial(NoteData(Note%).Staff).Staff2 \ 128 - NoteData(Note%).Pitch), Colour%, BF CIRCLE (31 + NoteData(Note%).Horizontal * 5, VerticalDisplace% + 55 + StaffInitial(NoteData(Note%).Staff).Staff2 \ 128 - NoteData(Note%).Pitch), 5, Colour%, 0, PI CASE 3 LINE (30 + NoteData(Note%).Horizontal * 5, VerticalDisplace% + 95 + StaffInitial(NoteData(Note%).Staff).Staff2 \ 128 - NoteData(Note%).Pitch)-(32 + NoteData(Note%).Horizontal * 5, VerticalDisplace% + 96 + StaffInitial(NoteData(Note%).Staff).Staff2 \ 128 - NoteData(Note%).Pitch), Colour%, BF CIRCLE (31 + NoteData(Note%).Horizontal * 5, VerticalDisplace% + 95 + StaffInitial(NoteData(Note%).Staff).Staff2 \ 128 - NoteData(Note%).Pitch), 5, Colour%, PI, 0 CASE 4 LINE (30 + NoteData(Note%).Horizontal * 5, VerticalDisplace% + 54 + StaffInitial(NoteData(Note%).Staff).Staff3 \ 128 - NoteData(Note%).Pitch)-(32 + NoteData(Note%).Horizontal * 5, VerticalDisplace% + 55 + StaffInitial(NoteData(Note%).Staff).Staff3 \ 128 - NoteData(Note%).Pitch), Colour%, BF CIRCLE (31 + NoteData(Note%).Horizontal * 5, VerticalDisplace% + 55 + StaffInitial(NoteData(Note%).Staff).Staff3 \ 128 - NoteData(Note%).Pitch), 5, Colour%, 0, PI CASE 5 LINE (30 + NoteData(Note%).Horizontal * 5, VerticalDisplace% + 95 + StaffInitial(NoteData(Note%).Staff).Staff3 \ 128 - NoteData(Note%).Pitch)-(32 + NoteData(Note%).Horizontal * 5, VerticalDisplace% + 96 + StaffInitial(NoteData(Note%).Staff).Staff3 \ 128 - NoteData(Note%).Pitch), Colour%, BF CIRCLE (31 + NoteData(Note%).Horizontal * 5, VerticalDisplace% + 95 + StaffInitial(NoteData(Note%).Staff).Staff3 \ 128 - NoteData(Note%).Pitch), 5, Colour%, PI, 0 CASE 6 LINE (30 + NoteData(Note%).Horizontal * 5, VerticalDisplace% + 54 + StaffInitial(NoteData(Note%).Staff).Staff4 \ 128 - NoteData(Note%).Pitch)-(32 + NoteData(Note%).Horizontal * 5, VerticalDisplace% + 55 + StaffInitial(NoteData(Note%).Staff).Staff4 \ 128 - NoteData(Note%).Pitch), Colour%, BF CIRCLE (31 + NoteData(Note%).Horizontal * 5, VerticalDisplace% + 55 + StaffInitial(NoteData(Note%).Staff).Staff4 \ 128 - NoteData(Note%).Pitch), 5, Colour%, 0, PI CASE 7 LINE (30 + NoteData(Note%).Horizontal * 5, VerticalDisplace% + 95 + StaffInitial(NoteData(Note%).Staff).Staff4 \ 128 - NoteData(Note%).Pitch)-(32 + NoteData(Note%).Horizontal * 5, VerticalDisplace% + 96 + StaffInitial(NoteData(Note%).Staff).Staff4 \ 128 - NoteData(Note%).Pitch), Colour%, BF CIRCLE (31 + NoteData(Note%).Horizontal * 5, VerticalDisplace% + 95 + StaffInitial(NoteData(Note%).Staff).Staff4 \ 128 - NoteData(Note%).Pitch), 5, Colour%, PI, 0 END SELECT CASE 5 'bar FOR ShortStaff% = 0 TO (StaffInitial(NoteData(Note%).Staff).Staves AND 24) \ 8 SELECT CASE ShortStaff% CASE 0 TotalVerticalDisplace% = VerticalDisplace% CASE 1 TotalVerticalDisplace% = VerticalDisplace% + StaffInitial(NoteData(Note%).Staff).Staff2 \ 128 CASE 2 TotalVerticalDisplace% = VerticalDisplace% + StaffInitial(NoteData(Note%).Staff).Staff3 \ 128 CASE 3 TotalVerticalDisplace% = VerticalDisplace% + StaffInitial(NoteData(Note%).Staff).Staff4 \ 128 END SELECT IF NoteData(Note%).tail = 1 THEN LINE (31 + NoteData(Note%).Horizontal * 5, TotalVerticalDisplace% + 63)-(31 + NoteData(Note%).Horizontal * 5, TotalVerticalDisplace% + 87), Colour% ELSEIF NoteData(Note%).tail = 0 THEN LINE (28 + NoteData(Note%).Horizontal * 5, TotalVerticalDisplace% + 63)-(29 + NoteData(Note%).Horizontal * 5, TotalVerticalDisplace% + 87), Colour%, B LINE (32 + NoteData(Note%).Horizontal * 5, TotalVerticalDisplace% + 63)-(33 + NoteData(Note%).Horizontal * 5, TotalVerticalDisplace% + 87), Colour%, B END IF NEXT ShortStaff% CASE 6, 12 'slur/tie IF NoteData(Note%).tail = 0 THEN LINE (29 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - 2)-(33 + NoteData(Note%).Horizontal * 5, (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% + 2), Colour%, BF ELSE IF NoteData(Note%).tail < 0 THEN DrawTieBelow = TRUE ELSE DrawTieBelow = FALSE IF DrawTieBelow THEN TieStartHor% = 30 + NoteData(Note%).Horizontal * 5 ELSE TieStartHor% = 36 + NoteData(Note%).Horizontal * 5 END IF TieStartVert% = (NoteData(Note%).Vertical MOD 50) * 3 + VerticalDisplace% - NoteData(Note%).tail IF NoteData(Note%).Kind = 12 THEN StepSize% = 2 ELSE StepSize% = 1 FOR Hor% = 0 TO NoteData(Note%).length - 4 STEP StepSize% CurveDisplace! = Hor% / ((NoteData(Note%).length - 4) ^ 1.2) * (NoteData(Note%).length - 4 - Hor%) IF NoteData(Note%).tail < 0 THEN CurveDisplace! = -CurveDisplace! SlopeDisplace! = Hor% / (NoteData(Note%).length - 4) * NoteData(Note%).Pitch PSET (TieStartHor% + Hor%, TieStartVert% - CurveDisplace! + SlopeDisplace!), Colour% NEXT Hor% END IF CASE 9 'Time signature FOR ShortStaff% = 0 TO (StaffInitial(NoteData(Note%).Staff).Staves AND 24) \ 8 SELECT CASE ShortStaff% CASE 0 TotalVerticalDisplace% = VerticalDisplace% CASE 1 TotalVerticalDisplace% = VerticalDisplace% + StaffInitial(NoteData(Note%).Staff).Staff2 \ 128 CASE 2 TotalVerticalDisplace% = VerticalDisplace% + StaffInitial(NoteData(Note%).Staff).Staff3 \ 128 CASE 3 TotalVerticalDisplace% = VerticalDisplace% + StaffInitial(NoteData(Note%).Staff).Staff4 \ 128 END SELECT IF NoteData(Note%).length < 10 AND NoteData(Note%).Pitch < 10 THEN Digit NoteData(Note%).length, 28 + NoteData(Note%).Horizontal * 5, TotalVerticalDisplace% + 63, Colour% Digit NoteData(Note%).Pitch, 28 + NoteData(Note%).Horizontal * 5, TotalVerticalDisplace% + 75, Colour% ELSE SELECT CASE NoteData(Note%).length CASE 10 TO 19 Digit 1, 28 + NoteData(Note%).Horizontal * 5, TotalVerticalDisplace% + 63, Colour% CASE 20 TO 29 Digit 2, 28 + NoteData(Note%).Horizontal * 5, TotalVerticalDisplace% + 63, Colour% CASE 30 TO 39 Digit 3, 28 + NoteData(Note%).Horizontal * 5, TotalVerticalDisplace% + 63, Colour% END SELECT SELECT CASE NoteData(Note%).Pitch CASE 10 TO 19 Digit 1, 28 + NoteData(Note%).Horizontal * 5, TotalVerticalDisplace% + 75, Colour% CASE 20 TO 29 Digit 2, 28 + NoteData(Note%).Horizontal * 5, TotalVerticalDisplace% + 75, Colour% CASE 30 TO 39 Digit 3, 28 + NoteData(Note%).Horizontal * 5, TotalVerticalDisplace% + 75, Colour% END SELECT Digit NoteData(Note%).length MOD 10, 37 + NoteData(Note%).Horizontal * 5, TotalVerticalDisplace% + 63, Colour% Digit NoteData(Note%).Pitch MOD 10, 37 + NoteData(Note%).Horizontal * 5, TotalVerticalDisplace% + 75, Colour% END IF NEXT ShortStaff% CASE 10 'Key Signature Clef1Note% = 0 Clef2Note% = 0 Clef3Note% = 0 Clef4Note% = 0 FOR n% = 1 TO NumberOfDrawnNotes% - 1 IF NoteData(n%).Kind = 11 AND NoteData(n%).Staff = NoteData(Note%).Staff AND NoteData(n%).Horizontal <= NoteData(Note%).Horizontal THEN SELECT CASE NoteData(n%).tail CASE 0 IF Clef1Note% = 0 OR NoteData(n%).Horizontal > NoteData(Clef1Note%).Horizontal THEN Clef1Note% = n% CASE 1 IF Clef2Note% = 0 OR NoteData(n%).Horizontal > NoteData(Clef2Note%).Horizontal THEN Clef2Note% = n% CASE 2 IF Clef3Note% = 0 OR NoteData(n%).Horizontal > NoteData(Clef3Note%).Horizontal THEN Clef3Note% = n% CASE 3 IF Clef4Note% = 0 OR NoteData(n%).Horizontal > NoteData(Clef4Note%).Horizontal THEN Clef4Note% = n% END SELECT END IF NEXT n% FOR ShortStaff% = 0 TO (StaffInitial(NoteData(Note%).Staff).Staves AND 24) \ 8 SELECT CASE ShortStaff% CASE 0 IF Clef1Note% > 0 THEN Clef1% = NoteData(Clef1Note%).Pitch ELSE Clef1% = StaffInitial(NoteData(Note%).Staff).Staves AND 7 DrawKeySig NoteData(Note%).Pitch, Clef1%, 31 + NoteData(Note%).Horizontal * 5, VerticalDisplace% + 63, Colour% CASE 1 IF Clef2Note% > 0 THEN Clef2% = NoteData(Clef2Note%).Pitch ELSE Clef2% = StaffInitial(NoteData(Note%).Staff).Staff2 AND 7 DrawKeySig NoteData(Note%).Pitch, Clef2%, 31 + NoteData(Note%).Horizontal * 5, VerticalDisplace% + StaffInitial(NoteData(Note%).Staff).Staff2 \ 128 + 63, Colour% CASE 2 IF Clef3Note% > 0 THEN Clef3% = NoteData(Clef3Note%).Pitch ELSE Clef3% = StaffInitial(NoteData(Note%).Staff).Staff3 AND 7 DrawKeySig NoteData(Note%).Pitch, Clef3%, 31 + NoteData(Note%).Horizontal * 5, VerticalDisplace% + StaffInitial(NoteData(Note%).Staff).Staff3 \ 128 + 63, Colour% CASE 3 IF Clef4Note% > 0 THEN Clef4% = NoteData(Clef4Note%).Pitch ELSE Clef4% = StaffInitial(NoteData(Note%).Staff).Staff4 AND 7 DrawKeySig NoteData(Note%).Pitch, Clef4%, 31 + NoteData(Note%).Horizontal * 5, VerticalDisplace% + StaffInitial(NoteData(Note%).Staff).Staff4 \ 128 + 63, Colour% END SELECT NEXT ShortStaff% CASE 11 'Clef SELECT CASE NoteData(Note%).tail CASE 0 DrawClef NoteData(Note%).Pitch, 19 + NoteData(Note%).Horizontal * 5, VerticalDisplace% + 63, Colour% CASE 1 DrawClef NoteData(Note%).Pitch, 19 + NoteData(Note%).Horizontal * 5, VerticalDisplace% + StaffInitial(NoteData(Note%).Staff).Staff2 \ 128 + 63, Colour% CASE 2 DrawClef NoteData(Note%).Pitch, 19 + NoteData(Note%).Horizontal * 5, VerticalDisplace% + StaffInitial(NoteData(Note%).Staff).Staff3 \ 128 + 63, Colour% CASE 3 DrawClef NoteData(Note%).Pitch, 19 + NoteData(Note%).Horizontal * 5, VerticalDisplace% + StaffInitial(NoteData(Note%).Staff).Staff4 \ 128 + 63, Colour% END SELECT 'Don't forget to update F6 mode if altering note types. END SELECT END SUB SUB DrawScreen LINE (0, 0)-(639, 479), 15, BF IF DisplayMode% = 0 THEN DrawHeader FOR Stf% = FirstStaffShown% TO FirstStaffShown% + NumberOfStavesShown% - 1 DrawStaff Stf% NEXT Stf% FOR Gp% = 1 TO NextGroup% - 1 IF GroupNos(Gp% - 1) + 1 < GroupNos(Gp%) THEN DrawGroupBlue% = FALSE IF DrawNotesBlue% THEN LeftPoss% = 0 RightPoss% = NumberOfNotesSelected% - 1 DO WHILE LeftPoss% <= RightPoss% AND NOT DrawGroupBlue% SELECT CASE NotesSelected((LeftPoss% + RightPoss%) \ 2) CASE IS > FileNos(Note%) LeftPoss% = (LeftPoss% + RightPoss%) \ 2 + 1 CASE IS = FileNos(Note%) DrawGroupBlue% = TRUE CASE IS < FileNos(Note%) RightPoss% = (LeftPoss% + RightPoss%) \ 2 - 1 END SELECT LOOP END IF IF DrawGroupBlue% THEN DrawGroup Gp%, 1 ELSEIF NoteData(GroupNos(Gp%)).selected THEN DrawGroup Gp%, SelectionColour% ELSE DrawGroup Gp%, 0 END IF END IF NEXT Gp% FOR Note% = 1 TO NumberOfDrawnNotes% DrawNoteBlue% = FALSE IF DrawNotesBlue% THEN LeftPoss% = 0 RightPoss% = NumberOfNotesSelected% - 1 DO WHILE LeftPoss% <= RightPoss% AND NOT DrawNoteBlue% SELECT CASE NotesSelected((LeftPoss% + RightPoss%) \ 2) CASE IS > FileNos(Note%) LeftPoss% = (LeftPoss% + RightPoss%) \ 2 + 1 CASE IS = FileNos(Note%) DrawNoteBlue% = TRUE CASE IS < FileNos(Note%) RightPoss% = (LeftPoss% + RightPoss%) \ 2 - 1 END SELECT LOOP END IF IF NoteData(Note%).group = 0 AND StaffInitial(NoteData(Note%).Staff).DrawPosition > -1 THEN IF DrawNoteBlue% THEN DrawNote Note%, 1 ELSEIF NoteData(Note%).selected THEN DrawNote Note%, SelectionColour% ELSE DrawNote Note%, 0 END IF END IF NEXT Note% IF SelectedNote% > 0 THEN GET #2, SelectedNote%, NoteData(0) DrawNote 0, 2 END IF IF AnchorCol% > 0 THEN SELECT CASE (StaffInitial(AnchorStaff%).Staves AND 24) \ 8 CASE 0 LineLength% = 54 CASE 1 LineLength% = 54 + (StaffInitial(AnchorStaff%).Staff2 AND 32640) \ 128 CASE 2 LineLength% = 54 + (StaffInitial(AnchorStaff%).Staff3 AND 32640) \ 128 CASE 3 LineLength% = 54 + (StaffInitial(AnchorStaff%).Staff4 AND 32640) \ 128 END SELECT LINE (31 + AnchorCol% * 5, StaffInitial(AnchorStaff%).DrawPosition + ((StaffInitial(AnchorStaff%).Staves AND 1920) \ 128) * 3)-(32 + AnchorCol% * 5, StaffInitial(AnchorStaff%).DrawPosition + ((StaffInitial(AnchorStaff%).Staves AND 1920) \ 128) * 3 + LineLength%), 1, BF END IF IF StartCol% > 0 THEN SELECT CASE (StaffInitial(StartStaff%).Staves AND 24) \ 8 CASE 0 LineLength% = 54 CASE 1 LineLength% = 54 + (StaffInitial(StartStaff%).Staff2 AND 32640) \ 128 CASE 2 LineLength% = 54 + (StaffInitial(StartStaff%).Staff3 AND 32640) \ 128 CASE 3 LineLength% = 54 + (StaffInitial(StartStaff%).Staff4 AND 32640) \ 128 END SELECT LINE (31 + StartCol% * 5, StaffInitial(StartStaff%).DrawPosition + ((StaffInitial(StartStaff%).Staves AND 1920) \ 128) * 3)-(32 + StartCol% * 5, StaffInitial(StartStaff%).DrawPosition + ((StaffInitial(StartStaff%).Staves AND 1920) \ 128) * 3 + LineLength%), 1, BF END IF IF EndCol% > 0 THEN SELECT CASE (StaffInitial(EndStaff%).Staves AND 24) \ 8 CASE 0 LineLength% = 54 CASE 1 LineLength% = 54 + (StaffInitial(EndStaff%).Staff2 AND 32640) \ 128 CASE 2 LineLength% = 54 + (StaffInitial(EndStaff%).Staff3 AND 32640) \ 128 CASE 3 LineLength% = 54 + (StaffInitial(EndStaff%).Staff4 AND 32640) \ 128 END SELECT LINE (31 + EndCol% * 5, StaffInitial(EndStaff%).DrawPosition + ((StaffInitial(EndStaff%).Staves AND 1920) \ 128) * 3)-(32 + EndCol% * 5, StaffInitial(EndStaff%).DrawPosition + ((StaffInitial(EndStaff%).Staves AND 1920) \ 128) * 3 + LineLength%), 1, BF END IF END SUB SUB DrawStaff (Stf%) DistanceFromTop% = ((StaffInitial(Stf%).Staves AND 1920) \ 128) * 3 + 15 FOR ShortStaff% = 0 TO (StaffInitial(Stf%).Staves AND 24) \ 8 SELECT CASE ShortStaff% CASE 0 TotalDistanceFromTop% = DistanceFromTop% DrawClef StaffInitial(Stf%).Staves AND 7, 3, StaffInitial(Stf%).DrawPosition + DistanceFromTop%, 0 DrawKeySig StaffInitial(Stf%).Ky, StaffInitial(Stf%).Staves AND 7, 27, StaffInitial(Stf%).DrawPosition + DistanceFromTop%, 0 CASE 1 TotalDistanceFromTop% = DistanceFromTop% + StaffInitial(Stf%).Staff2 \ 128 DrawClef StaffInitial(Stf%).Staff2 AND 7, 3, StaffInitial(Stf%).DrawPosition + TotalDistanceFromTop%, 0 DrawKeySig StaffInitial(Stf%).Ky, StaffInitial(Stf%).Staff2 AND 7, 27, StaffInitial(Stf%).DrawPosition + TotalDistanceFromTop%, 0 IF (StaffInitial(Stf%).Staff2 AND 64) \ 64 = 1 THEN CIRCLE (8, StaffInitial(Stf%).DrawPosition + DistanceFromTop% + 7), 7, 0, 3 * PI / 5, PI LINE (1, StaffInitial(Stf%).DrawPosition + DistanceFromTop% + 7)-(6, StaffInitial(Stf%).DrawPosition + (DistanceFromTop% + TotalDistanceFromTop%) / 2 + 5), 0 CIRCLE (-1, StaffInitial(Stf%).DrawPosition + (DistanceFromTop% + TotalDistanceFromTop%) / 2 + 5), 7, 0, 3 * PI / 2, 0 CIRCLE (-1, StaffInitial(Stf%).DrawPosition + (DistanceFromTop% + TotalDistanceFromTop%) / 2 + 19), 7, 0, 0, PI / 2 LINE (6, StaffInitial(Stf%).DrawPosition + (DistanceFromTop% + TotalDistanceFromTop%) / 2 + 19)-(1, StaffInitial(Stf%).DrawPosition + TotalDistanceFromTop% + 17), 0 CIRCLE (8, StaffInitial(Stf%).DrawPosition + TotalDistanceFromTop% + 17), 7, 0, PI, 7 * PI / 5 END IF CASE 2 BraceTop% = TotalDistanceFromTop% TotalDistanceFromTop% = DistanceFromTop% + StaffInitial(Stf%).Staff3 \ 128 DrawClef StaffInitial(Stf%).Staff3 AND 7, 3, StaffInitial(Stf%).DrawPosition + TotalDistanceFromTop%, 0 DrawKeySig StaffInitial(Stf%).Ky, StaffInitial(Stf%).Staff3 AND 7, 27, StaffInitial(Stf%).DrawPosition + TotalDistanceFromTop%, 0 IF (StaffInitial(Stf%).Staff3 AND 64) \ 64 = 1 THEN CIRCLE (8, StaffInitial(Stf%).DrawPosition + BraceTop% + 7), 7, 0, 3 * PI / 5, PI LINE (1, StaffInitial(Stf%).DrawPosition +