1;;;CheckScore
2(define CheckScore::return #f)
3(define-once CheckScore::ignore 0)
4(define-once CheckScore::error-position #f)
5
6(let ((old-volume (d-MasterVolume)))
7    (d-MasterVolume 0)
8    (if CheckScore::params
9        (set! CheckScore::ignore CheckScore::params))
10    (if (d-Directive-score? "CriticalCommentsAmended")
11        (d-CriticalCommentary))
12
13    (while (d-PreviousMovement))
14
15    (let movement ()
16      (d-EvenOutStaffLengths)
17      (while (d-MoveToStaffUp))
18      (let staff ()
19        (d-FixSlursInStaff)
20        (d-CheckTiesInStaff 'noninteractive)
21        (if CheckTiesInStaff::return
22                (set! CheckScore::return CheckTiesInStaff::return))
23        (if (not CheckScore::return)
24            (begin
25                (d-CheckDirectivePairs 'noninteractive)
26                (if CheckDirectivePairs::return
27                    (set! CheckScore::return CheckDirectivePairs::return))))
28        (if (not CheckScore::return)
29            (if (or (d-MoveToVoiceDown) (d-MoveToStaffDown))
30                (staff))))
31      (if (not CheckScore::return)
32          (begin
33            (while (d-MoveToStaffUp))
34            (let staff ()
35                (d-MoveToBeginning)
36                (let measure ()
37                    (d-CheckTupletsInMeasure 'noninteractive)
38                    (set! CheckScore::return CheckTupletsInMeasure::return)
39                    (if (not CheckScore::return)
40                        (begin
41                            (d-CheckBeamsInMeasure 'noninteractive)
42                            (set! CheckScore::return CheckBeamsInMeasure::return)))
43                    (if (not CheckScore::return)
44                        (if (d-MoveToMeasureRight)
45                          (measure)
46                          (if (or (d-MoveToVoiceDown) (d-MoveToStaffDown))
47                               (staff))))))))
48
49         (if (not CheckScore::return)
50                   (begin
51                        (d-CheckTimeSignatures #t)
52                        (set! CheckScore::return CheckTimeSignatures::return)))
53
54        (if (not CheckScore::return)
55              (begin
56                (while (d-MoveToStaffUp))
57                  (let staff ()
58                    (d-MoveToBeginning)
59                    (let measure ()
60                        (if (not (LastMeasure?))
61                    (if (or (FullDurationMeasure?)(ZeroDurationMeasure?))
62                                (begin
63                                    (d-MoveToMeasureRight)
64                                    (measure))
65                                (begin
66                                     (if (positive? CheckScore::ignore)
67                                            (begin
68                                                (set! CheckScore::ignore (1- CheckScore::ignore))
69                                                (d-MoveToMeasureRight)
70                                                (measure))
71                                            (begin
72                                                (set! CheckScore::return (_ "Incorrect measure duration"))
73                                                (set! CheckScore::error-position (GetPosition))))))))
74                    (if (not CheckScore::return)
75                        (begin
76                            (if (or (d-MoveToVoiceDown) (d-MoveToStaffDown))
77                            (staff)))))))
78
79        (if (not CheckScore::return)
80            (begin
81                (d-CheckBraces 'noninteractive)
82                (set! CheckScore::return CheckBraces::Return)))
83
84        (if (not CheckScore::return)
85           (d-InstallGraceNoteHints))
86
87        (if (and (not CheckScore::return) (d-NextMovement))
88                (movement)))
89
90    (if (not CheckScore::params);; interactive
91            (begin
92                (if (not CheckScore::return)
93                    (begin
94                        (set! CheckScore::error-position #f)
95                        (d-InfoDialog  (_ "No problem detected in this score")))
96                    (begin
97                        (if CheckScore::error-position
98                            (apply d-GoToPosition CheckScore::error-position))
99                        (d-InfoDialog CheckScore::return))))
100            (disp "Error location " CheckScore::error-position "\n"))
101    (d-MasterVolume old-volume))
102