  IDEAS (05/16/88)

9.  Speed up gr_curve() by getting float to work instead of double.

12. Use set_buttons() and whichbutton() extensively in dialog-box routines.

13. Printer driver:

    -- an option to not do the final page feed:  allows coda to be indented
	 -- print a given range of pages.

16. Allow region to cover more than one staff, for cross-staff beaming,
	 tupleting, delete, flip, auto-stem, etc.
    
17. Rests should be included in the Delete region command.  Also see bug 65.

20. Assembly-language block-copy functions would be nice.  Use throughout.

21. Use MAXNSTAVES throughout.

22. MAXREGION and MAXNALIGN big enough?  Maybe OK in EZ, but in MS...?

25. More miscellaneous options:

    XXX (1) Assemble a "new" batch command, from any combination of these (in 
        any order): name/version, reformat, blank measures, time sig, key sig, 
        clef, metro mark.  (or none)  No:  Gets too complicated.

    (2) Help key on/off.  (Saves aggravation of bumping help key.)

    (3) Option for constantly snapping the y-coord of bigmode mouse to y-unit 
        boundaries.

XXX (4) Blitter on/off.  Toggles vdi/gr.

			Won't work on printer.

*** (5) Enable/disable free accidentals / ornaments on/off.

    (6) Measure # offset:  Woven into code throughout entire program - 
        cursor counter display, within dialog boxes, within alert boxes,
        etc.  The printer driver's measure # offset would default to this.
		  Can be -1.

*** (7) Pixels for right-click with insert/delete space tools.

27. Single-stem tremolos (articulations).

30. Multi-measure rest.  For playback also.

31. Double the number of characters in the chords font.  The second half
	 is the same as the first half, but superscript.  During text entry mode,
	 up/down arrow keys switch banks.  This feature is already implemented,
	 so we could release a new chords font without re-releasing the program.
	 Generic text can be used to type ANY conceivable chord symbol, including
	 everything in Barton's little red book.  Also, we can add things to the
	 other fonts:  Put the italics font for Italian in the upper half of
	 LYRICS font.

33. Optimize show_notes():  stuff per beamed group, per chord, and per note,
    continues and breaks within/out of loops should be done in an order such
    that the more frequent cases occur earlier:  put successively more
    complex tests later, and put more frequently tested-true tests earlier.
    Currently, editing becomes slower as screen gets denser.  (Check out
    PIANO.SCO.)

36. Midi step entry:  

    -- Completely redesign dialog box:  Instead of a matrix approach, use
       variables that cycle through values for L/R buttons.
    -- Allow a switch (or key) to be mapped to control duration (with
       wraparound).
    -- midi commands mapped to keyboard-controlled spacing.
    -- A midi command to toggle stem up/down.  (Ignored if autostemming on, 
       i.e. this command equivalent to mouse left/right).
    -- use patch changes for something
    -- greatly expand the list of what can be mapped and also what they
       can be mapped to.
*** -- MIDI on/off on menu (already in envirptr), Midi thru on/off also.

37. Some kind of undo function, involving a constant on-going clipboard.  
    Be able to undo anything that affects only 1 measure.

38. Fake horizontal scroll bar:  x/xtotal = left edge bar # / lastbarn
    use my custom rubberbox for interacting with this scroll bar.  How to
    avoid cursor and scroll bar collision?

39. Put key command equivalents in an ascii text file that can be edited by 
    any word processor.  EZ-Score reads this file in at boot up time, and Help
    key displays it (or puts up an alert box saying "Help file not available.")
    The advantage of this is that dealers/distributors in other countries can 
    do translations; I don't need to worry about it.

40. Disable rehearsal mark menu item when cursor is at start of score,
    disable edit menu items when score is blank, etc. etc.

43. Allow "unbounded" ties forward OR backward, also broken beams.  Simple?
    If start or end of tie or beam is not on screen, draw only a short
    clipped tie or beam, instead of out to the edge of the screen.

44. Badbar message should read XX for bar # and "XX" for rehearsal mark.
    I.e., call badbar(strptr,LOCTBARN or LOCTREHR).

47.  Don't cancel region between group commands - allow successive cmds.

48. "All rehearsal marks" under GLOBAL:  display all (like MTST's "Review
    sections"), option here to delete all.

49. "Insert Blank Measures" dialog box should include low/high limits for
    each edit field:  1-(MAXNBARS-lastbar), and 2-127.

50. Add to locate dialog box:  locate to next or previous rehearsal mark,
    also locate to start or end of score.

51. Lengths of sections of header should consistently be BYTES.  This will
    allow some code (e.g. in filestuf) to be coded in loops.  Have a global
    structure:  # bytes, pointer to header section, magic, pointer to
    def_ function, etc.

58. Expand/compress include a mono-space option:  Replace all delta-x's
    that are > a settable #.

61. Despite horizontal scrolling, clef, key, and time signature will always 
    be shown on the left end of the staves.  Note that this simplifies EZP.

63. Let GP Acc run on top of EZ-Score by tricking it into thinking that
    EZ-Score is SmpteTrack.

64. Under SECTION menu:  auto-space.

66. Re-design window rulers so that all ledger lines touch the work area
    boundaries.  Highest and lowest ledger line for each staff are longer
    than other ledger lines.

67. Wherever next/nxtc/prev/prvc packet() are called in a loop, instead use
    find_n_edit().  See #9 under "future versions".

68. Make symbol menus invert as mouse passes over each cell (like real menus).

71. Now that gr clipping really works, I can simplify various code (for
    example, left edge connectors), by setting clipping appropriately and
    doing oversized (less intelligent) graphics.

72  For Craig's sake, I need to guarantee maximum vertical pixel over/under
    flow = 30.  (# of pixels higher than lowest y-unit, lower than highest
    y-unit.)  Maybe during show_symbs actually set y-clipping to +/- 30 so
    that user can tell something has gone wrong.

74. Massive memory-efficiency optimization project throughout ALL code.

75. Optimize for speed.  Make a tree-diagram to determine which functions
    are called the most.  (hint:  nextpacket, prevpacket, fetchbp) and 
    highly optimize these.

78. A series of symbols: ./., .//., .///., etc.  The # of slashes would be
    an attribute.

86. Additional auto-scoring functions:

   -- auto-score measure N1-N2. (easy to do -- just increment a counter and 
      don't call add_to_sco() until the counter reaches the requested #) and 
      then auto-score (n2-n1+1) measures.
   -- allow double-size beams under certain circumstances:  4/4 should allow
      4 8th notes beamed.
***-- In autodial, right click on a midi channel button to "solo" it.
   -- a manual beaming "templet", also used for "auto-beaming" (see #95)
	-- Instead of quantize note-on and note-off:  Quantize note-on and duration.
	-- enharmonic handling (instead of alert box way of doing it)
	-- a minimum velocity (allows auto-score to ignore accidentally played notes
		sometimes).
	-- two levels of rest minimization:  (both coded now, one commented out)
	-- split by note # within chord.
	-- sustain pedal

90. Instead of "Delete Notes" under REGION menu:  "Delete..." followed by
    a dialog box containing (non-radio) buttons for different symbol types,
    including a button for ALL.

93. Two options:  thicken over-ties, and thicken under-ties.

95.  3 beam commands instead of one:

***-- beam (notes in region can be all beamed, or none beamed, or some beamed,
	   no effect if all notes in region are already beamed into one beamed group.
		This can also be used to break long beamed groups into shorter ones.
***-- Un-beam (works pretty much like it does now).
	-- Auto-beam:  Notes in region can be all beamed, or none beamed, or some 
		beamed, uses the current time signature and follows some rules or 
		uses manual beaming templet (see #86).  A section command?
***-- simplify beaming and tupleting -- the code is horrible. (grouping,
		auto-stemming, flipping, deleting, etc. all linked together.)

96.  Hide/Show mouse do nothing while gr_device==1.

99. Consistent mode parameter for all gr_ routines.  #define them:
     GR_OR, GR_REPL, GR_XOR.

102. In autodial, include mute status for each track.

103. In lyric-editor, shift-up/down moves an entire verse of lyrics up/down
     by yu +/- 2.  Watch out for collisions with already-existing verses.

104. For all future versions, remember to change the BADFILE error messages.

105. Get rid of unused rows and columns in SYM files.

106. Beam display much more intelligent:  It should understand division of
     beats.  See Gardner Read.

108.   max_of(n,arg1,arg2,arg3,...,argn)
       min_of(n,arg1,arg2,arg3,...,argn)

109.  #define BETWEENII(a,b,c) ( (a>=b) && (a<=c) )
      #define BETWEENIX(a,b,c) ( (a>=b) && (a<c) )
      #define BETWEENXI(a,b,c) ( (a>b) && (a<=c) )
      #define BETWEENXX(a,b,c) ( (a>b) && (a<c) )

110.  get rid of set_obj() and clr_obj() throughout?

116.  -- Slurs and ties shouldn't really be arcs.  Use a tapered shape.
      -- Allow diagonal slurs to be thickened.
		These both fall under one solution:  Thickening should be done at
		the gr_arc() level.  Arcs are a series of vertical lines; currently
		all are 1 pixel high.  Interpolate between end points and a user-
		settable middle.  At end points the vertical lines are 1 pixel high,
		at the midpoint they are a user-settable # of pixels.

117.  A command on the global menu to display the score capacity, size of
		current score, etc.

119.  Hardware key copy protection:
		
		If program has been installed
			If the correct key is connected
				Run
			else
				If the original disk is in drive A or B
					Run
				else
					Crash
		else
			If the original disk is in drive A or B
				If a key is connected
					Give the user the option of installing.  Then run.
				else
					Run
			else
				Crash

120.  During add_stretch():  key commands to move entire thing up/down left/
		right.

121.  ? Numeric keypad accidentals automatically attach themselves to the
		last note entered.  Talk to Tom Calderaro.

122.	Key commands equivalent to all symbols on symbol menus.

127. There should be no need for calc_del_x().  Instead, wherever it is called
	  there probably is another function that can return the same value.  In
	  general, avoid scanning repeatedly through the same section of thread.

131. During add_stretch() allow all symbols to be placed from right to left
	  or left to right.

132. Use unsigned throughout wherever appropriate.  #define UNS unsigned

133. I see no reason why delete-notes command shouldn't be allowed to cut
	  beams.  However, if you try it the program will hang.

134. Have a mouse-info option which would constantly display the note name
	  of the y-unit currently pointed at by mouse.  (Similar to the area in
	  the upper right corner of MTST's graphic edit screen.)  Note that this
	  is similar to what the play-mode mouse does.

135. Throughout the program, make use of the fact that the printer's aspect
	  ratio is 216 vertical by 120 horizontal (9/5).

136.	Generic text:
***-- allow imbedded spaces
	-- different kind of cursor
***-- allow access to strange ascii characters.  Note that mini text can be
		used for "half note = quarter note" kind of symbol.
	-- options: boxed, underlined, line A stuff
	-- continuation packets for longer than 10 characters.  Make this invisible
		to the user.  Most importantly, it must be set up so that printer
		justification doesn't pull the packets apart.
	-- variable # of fonts beyond the mandatory ones.
		At boot time, program looks for TEXT*.FNT in \SCREEN and \PRINTER.
		See #209.

137.  Split symbol families, for example notes might be 1-20 and 180-200.

138.  S_WAVY.

139.  A built-in mini-sequencer (on INSERT menu):  gives a count-in, records to 
      a buffer (a maximum amt of time?), select from several different tempos, 
      metronome, quantize into a second buffer.

141.  Attribute on S_GUITAR to set # of frets shown (default=4, others would
    be 1-3)

143.  MS will have diagonal tuplets along with diagonal beams

144.  Bezier curves for "free-hand" slur drawing.  Get

    Mathematic Elements for Computer Graphics, Rogers and Adams, McGraw-Hill.

145.  This is probably a very crazy idea:  Code many "find" functions so that
    they all share code, like generalized query functions in a database:
    find_n_edit(&findfunc,&editfunc).  In other words, the first pointer is to
    a filter function, and the second pointer is to an editing function.  The 
    find_n_edit function itself would contain super-fast scanning code 
    (similar to find_sig()).  This could eventually be developed into 
    MidiScore's so-called "super-editing" function (a la Personal Composer's 
    LISP thing).  This function could be used in MANY places throughout the 
    program; not just for editing.  For example, compress/expand.

146. Someone (Greg Welchel?) write a program that generates cue sheets,
    i.e. blank manuscript paper with bar lines, time sigs, metro marks,
    and some text.  Use HSW shared-data mechanism:  Put the generated score
	 data into my clipboard, then switch into Midi-Score.

147. In future versions of midi-score, allocate a number of bytes for a
    particular segment within the header, then read one of several alternate
    segments from file to that allocated area.  This potentially allows 
    versions of Midi-Score to write totally different file specs and still
    be upwardly compatible.

148. A "show clipboard" function:  While clipboard is shown, hide the mouse
	 and prompt for <Return> in window info line.  Enables/disables along
	 with "Clear clipboard."

149. Paste dialog:  A staff transformation map:

    1 -->  1 , 2 , 3
    2 -->  1 , 2 , 3
    3 -->  1 , 2 , 3
    (defaults every time to an upper-left-to-lower-right diagonal)
    The 3x3 matrix acts as though each row is a set of radio buttons and
    also each column is a set of radio buttons.

150. Change "Sound" menu to "Play".  Menu items are "Options", "To MIDI", and
	 "To SNG File".  In sound options, allow midi channel 0 = internal sound.
	 Thus, staves can be independently routed to midi or internal but never
	 to both.  "To SNG File" plays at infinite tempo.

151. "Re-notate" option after insert key or insert clef.  Following key
    signatures must be converted.

152. Check rhythm / re-bar.

153. Check range.

154. Percussion clef

155. 3 kinds of transpose, including transpose by octaves.

156. Region command:  "Change rhythm" affects note and rest durations by
    multiplying by nn/dd (nn=1-99, and dd= 1,2,4,8,16,32,64,128), or by
    setting all selected notes and rests to a particular duration.  Also
    for the latter, be able to type CTRL-numeric key.

157. Allow repeat bars within measures.  Repeat bars aren't REALLY bars, but
    they can be placed directly ON a bar if no symbols occur between the
    bar and the repeat symbol.

158. Playback:
   --  Improve internal sound quality:  at least a choice of envelope decay 
       time (0=organ, >0 = percussive
   --  play option:  "forward--> / <--esrever "
   --  Playback interprets dynamics, articulation, etc.
   --  Internal sound:  Each voice have its own timbre, transposition, etc.
   --  A legato %:  100% means a quarter note is 96 ticks.  75% means a
       quarter note is 96*75/100 = 72 ticks followed by 96-72 = 24 ticks
       silence.     0% could be called drum-machine mode:  each note is sent as 
       a note-on immediately followed by a note-off.
   --  Patch changes sent at start of playback, mono mode, etc.
   --  each voice has a base loudness (0=off) instead of just on/off.
   --  correctly interpret 8va notation
	--  Play loop feature (especially useful for demoes)
	--  Optionally output midi start/clock/stop.
	--  Optionally sync to incoming midi start/clock/stop.
	--  Be able to scroll backwards during playback, for repeats.

160. Gather all tools together in one place:  mouse modes, insert/delete space,
    etc.  Insert/delete space shouldn't really be on special symbol menu,
    because they are TOOLS, not SYMBOLS.  A "tool" is something that edits 
    the score without adding new symbols.

161. Allow multiple simultaneous time signatures?  Allow alternating
    time signatures.

162. Use "extended object types" and build handling into my do_dial routine.
    Examples:  Two new kinds of radio buttons -- (1) no more than 1 of, (2)
    no less than 1 of.  Normal kind is both of these.  Store these as bit
    fields, so normal radio button has both of those bits set, and new
    kinds have one bit set.  Normal non-radio buttons have neither bit set.
    Other object types:  (1) L-button selects it / R-button outlines it,
    (2) integer string, L-button decrements it / R-button increments it,
    extended object type also includes high / low limits for wraparound.

164. Region command for enharmonic shift:  CTRL *, CTRL -, CTRL + on numeric
	 keypad.

165. Add to note options:  Stem length (stored as +/- from the default
    value, so that old files will all come up as the default stem length).
	 Tie this in with beam slanting:  In other words, beam slanting is done
	 manually by increasing/descreasing stem lengths of start and end chord
	 within a beamed group?  Or a region command:  Select a beamed group, and
	 then request an amount of slant?

166. MS: Make sure that on a mono monitor, at least four staves can be
	  displayed.  Scroll up/down is by single staves.  A vertical scroll bar
	  as in ObjectMover ST.  No rulers in either margin (not necessary due to
	  constant note-display (see 134).

167. Somehow be able to horizontally move/copy a chord.  How about this:
    rubber-box the chord, then click on a region command called "move chord".
    The mouse turns into the chord, and you can move it anywhere on the
    screen horizontally, and you can click it anywhere (repeatedly) until you
    type a key (similar to guitar or chord symbol mode).

168.An idea:  Forget about PostScript printers until later; concentrate on 
	 Atari laser printer instead.  Handle all output exactly
	 like we do now, except the font would be huge.  There'd be a separate
	 program, EZPRINT which could print to either laser printer or dot matrix
	 printer depending on which one of two fonts has been loaded.  EZPRINT has
	 very few features other than part of the file menu, print menu, some
	 print preview features, etc.  Therefore there will be enough memory free
	 to load in a huge bit-image laser font.  Output is simply an extension of
	 the principle used in ez-score.  Three folders on disk 2:  SCREEN,
	 DOTMATRX, LASER.  Code so as to make the font completely flexible both
	 horizontally and vertically.  (In other words, extend SCR_MISC and PRT_MISC
	 files.)

169. Output to IFF file (example: Degas Elite)?

170. Test with laser printers at Alexander Publishing

171. Blit scroll

172. "Octaves" section command for 8va/8vb/15ma/etc. above/below a specified
	  staff.  (Affects stem-up or stem-down voice).

173. When transposing, if stem direction flips, then also flip tie direction?

174. For printer drivers:  Intersection of beam and stem should be 
    (a) halfway between two staff lines, or (b) one pixel above a staff line, 
    or (c) one pixel below a staff line.  Never ON a staff line.  
    See Gardner Read.

175. When allowing the user to customize symbols, remember that the 
    program has to be able to sensibly manipulated the customized symbols.
    For example, when customizing a note, the stem shouldn't be
    customizable.  MidiScore has to be able to find the stem for adjusting
    its length / beaming / etc.  Also, show the hot spot on the symbol
    editor screen and allow (maybe not always) the hot spot to be changed.
    Remember that although symbols are loaded from PLn files, other 
    constants are hard-coded:  # symbols per menu, x,y,w,h for each symbol,
    hot spot for each symbol, etc.

176. A region command called "legato" converts note+rest into longer (possibly
    tied) note.  Fills up spaces between successive chords within a voice
    or a staff.

177. Attribute on notes:  Number of time-augmentation dots.  Duration dot on
	 note menu.

178. Repeat-signs are NOT bar lines (sometimes).  For printout, don't number
    a repeat sign in the middle of a measure.

179. Midi real-time entry mode:  a slow sequencer with an audible metronome.
    Play-and-see a single voice on a single staff.

180. Midi-Score uses overlays?  Since Megamax is position-independent, this
    should be easy:  simply Fread and then jsr to the start of it.  Overlays
    must be compiled with a special init.o that doesn't really do anything
    except jsr main.  After reading in an overlay, patch the jump table.
    Have a generic "run program" command for future unknown uses.

181. For wherever applicable, L-click on menu command to execute the command;
    R-click on it to call up dialog box of related options.  There must be
    some standard way of indicating which menu entries are right-clickable.

182. Variable staff size.

183. Rehearsal mark display option:  square or circled.

184. Separate out fonts for individual applications: tuplets,
    endings, rehearsal marks, metronome marks, etc.  Provide some kind of
    system for using the same font for more than one application without
    having to load it more than once from disk (saves memory).

185. Be able to re-format in the MIDDLE of a score, corresponding to the
    start of any line on the printer.  Related to this:  Actually store
    line breaks and page breaks within the score data.

186. A stretchy:  the vertical bracket used to tell a pianist to play a
    chord with a single hand despite its being split across staves.

187. Automatically generate chord symbols, or verify chord symbols against
    the music.

188. Adopt quantization for each track from sequencer.  This would require a
    lot of work for Stefan.

189. Re-format must be much more elaborate:  how many staves, display which
    staves, in what order, left edge connectors, label (instrument) for each
    staff (and abbreviation), auto-stemming per staff, etc.

190. merge/unmerge staves (create stem-up/stem-down staff out of two other
    single-voice staves), very useful after autoscoring.

191. print options:  hide/show staff labels.
    
192. Develop a common user interface for staff-related things (re-format, play,
    auto-score, clear, etc.

193. When auto-scoring, adopt track names as staff labels, if auto-scoring at
    bar 0.

194. print batch command.

195. midiplexer

196. a very powerful forth-like text entry mode.  Give user direct access to
    thread:  user-interface for super-editing?

198. within key dial, allow user to click on the sample clef to change it.

199. Set up and document a data area accessible to accessories and concurrent
    (within switcher) programs.  Also available to future unknown overlays.

201. Bass guitar frames.

202. Beaming: diagonal, cross staves, cross bar lines, stem-up/down within
	 same beam, secondary beams, etc.

203. Look through stack of papers on my sink, look through MS doc disk, etc.

XXX204. Mouse scaling:  1/2-speed, double-speed.  Done simply by sending
	commands to IKBD.  Do this in a separate desk accessory.

207. Graphics primitives:  Lines, boxes, filled boxes, etc.  Each having
	 various attributes (thickness, style, etc.)  For example, dotted line
	 can be used for extension lines for 8va/8vb/Ped/etc.

211. Play loop:  Useful for in-store demoes, especially if it works with
	 screen chase.  Note that PLAYLOOP is already in ENVIRINFO.

214. Copy/Cut:  Select which staves.  Note:  This can cut stretchies.

215. Format twisted disks (works only with new ROMS).

216. Sell EZ-Print and SCREEN, DOTMATRX, and LASER folders separately, so that
	  people can laser-print ez-score files.

217. In Midi-Score, there is a text pallette analogous to chord and guitar
	  pallettes.  Add-chord, add-guitar, and add-text subsystems are handled
	  exactly the same.

218. HybriSwitch shared data area allow MTST/MS sharing. (bi-directional).

219. During add_chord() scroll screen forward/back if mouse touches screen
	 edge.

220. Blink lyric cursor.

221. Other symbols toggle just like notes do.

222. Locate to "null" bar # = locate to start.

223. Key of C = delete key signature at cursor's bar.

224.  During expand/compress do a pack_insert() for each bar -- i.e., expand/
    compress won't affect clefs/signatures.  This is an IDEA, not a bug.

225.  Midi Step entry and auto-scoring:  altered unisons.

226. Open and close braces are needed on specials menu (vertical stretchy)
	  used for grouping verses of lyrics.

227. Write laser driver based around a theoretical page description language.
	  The CNF's map the theoretical commands to actual printer commands
	  (HP, PostScript, Express, etc.)  Download a font containing all our
	  symbols, plus use pure graphics commands (line, arc, etc.).  The
	  current set of graphics and symbol-drawing (i.e. font drawing) commands
	  will become just a subset of the whole.  In other words, we have already
	  written the most complicated driver, the dot matrix / screen driver.
	  Dot matrix printers can be treated as just another case:  Their
	  CNF lists actual commands mapped to theoretical commands, just like for
	  laser printers, but somehow in my "theoretical page description language"
	  have a way of mapping a graphics function back into Midi-Score code.
	  In the case of dot matrix printers most or all of the actual commands
	  ARE mapped back into my code.

228. Right-click with delete mouse:  If symbol being deleted is a note, then
	 delete entire chord.

229. Symbol family filter for delete mode.

230. Page editor:  Using currently unused bytes in bar line packets, allow
	  user to manually set line and page breaks.  At a manual line break
	  optionally reformat and/or change staff_h.  At a page break optionally
	  change page layout.  These changes are accomplished through control
	  symbols attached to bar lines.

231. In Load CNF command, somehow show the current config.

232. Note toggle:  Inserting ANY note on an existing note will delete the
	  old note, even if their note values don't match.

233. Use one of the bytes in a note packet to hold midi velocity:  Use this
	  byte on playback, allow it to be edited, import from auto-scoring, etc.
	  Editing should be part of the play-mouse mode.  A section command to
	  generate dynamics and (de)cresc symbols based on average velocity of
	  notes within the section.

234. "New" command has 3 buttons:  Cancel, wipe score, wipe score and options.

235. a "compressed" format for scores:  Two new commands on file menu, load/
	  save SCC file.

236. Other note head styles:  Miniature (grace notes), slashes (must handle
	  dots correctly).

237. A control code for bar line:  Force bar # = something.  Useful for
	  restarting bar number count on printout after a multi-measure rest.

238. When pasting, don't wipe out rehearsal marks.  But put up alert and
	  wipe out any conflicting ones.

239. -- Allow 3 digits to right of decimal point in metronome marks.
	  -- Also, film click mode.  (Little camera icon instead of mini note.)

240. During add_stretch(), snap mouse to y-unit.

241. Page editor is a separate program.  It and MS share data bi-directionally
	 under HybriSwitch.

242. Midi-Score and Midi-Print should pseudo-multi-task.  You can print while
	 you're working on something else.  Requires HybriSwitch.

243. Using the latest version of custom form_do, I can exit on a key.  This
	  would be useful, for example, in selecting key signatures.  Obviously
	  this can be developed into a very powerful user-interface.
