  IMPLEMENTED and REMOVED IDEAS (03/29/88)

A *** to the left of the idea # means it has been implemented.
A XXX to the left of the idea # means it has been removed from the ideas list.

***1.  Throughout program, use window's info line for temporary prompts:
    during add_stretch(), add_chord(), add_guitar(), get_file() (no goofy
    item title hacking), play ("type any key to stop playing") -- any time
    the program is in a "mode".  Write a routine for doing this:  
    do_prompt(&string).  When done, simply call infoline().

***2.  Two kinds of delete:  click bow and arrow to delete without closing up,
    click bow and arrow while holding down shift key(s) to delete WITH
    closing up.  Similarly, two kinds of insert.
    
XXX3. A "continuous" delete mode:  while holding down the control key, whatever
    the delete-mode mouse icon touches gets deleted; you don't need to
    click a mouse button.  This can be combined with shift key (see above).

	 -- the redraw would be slow and ugly

***4.  [OK] should be default exit object in FORMDIAL

***5   Move cursor left/right:  If cursor is pointing at last bar on screen, 
    and curs_bar_n<last_barn, move right = scroll forward 1 bar.  If cursor is
    pointing at first bar on screen, and curs_bar_n > 0, scroll back 1 bar.

XXX6.  Disk format 9 or 10 spt.

	This just invites problems, due to GEM Desktop not being able to copy 10
	spt.

***7.  "Delete ending(s)?" alert box should have 3 options: cancel / delete /
    replace.  If replace is selected, go on to endgdial.

XXX8.  These would require a conversion utility for current files:

    -- For clefs, adjust y_hot so that yu = middle C.  This can be very 
       convenient in later versions.
    -- Have a single symbol for S_CLEF, with the treble/bass/alto/etc. in one 
       of its special bytes.  This simplifies code throughout.

	Too late now.

XXX10. To save about 6K:  Totally re-do the formdial dialog box -- a single
    large touch exit.  Use drawstaff() and putbrace() and putbracket() to
    draw examples in it.  Click on it to cycle through the 4 available
    score formats.  Get rid of stuff in pseudat2, main/startup.  Re-code
    ex_reform(), getformat() still returns STAFFMTn which are defined in
    defines.h (theoretically the only change required is in getformat()).

	Not worth the effort.

***11  Make sure data structure can handle beamed non-flagged notes.

XXX14. Craig suggests:  divide options:  (1) those saved with SCO file, (2)
    miscellaneous options saved in EZSCORE.INF.  The latter (and no other)
    options should be the ones in the MISCDIAL.  The "New" command would
    set all environment options to their defaults, but would not change
    the miscellaneous options.
	 
	 See #112.

***15. (Carefully) instead of local arrays, use register pointer variables
    pointing to genbuf.  This can only be done if the function calls no
    other functions.  Assume genbuf trashed through a function, or if
    function A calls function B and function B calls no other function
    and does not use genbuf, then put a comment in function B warning me,
    and go ahead and use genbuf in function A.

XXX18. In BPMDIAL:  instead of clicking on the invisible note box, click on
    an arrow (as in chord dialog box).

XXX19. Now that rests have voice bits, the grouping functions can be
    simplified.  For example, othervoice() is much simpler.

	No:  othervoice() is already VERY simple, and grouping functions don't
	depend on rests' voice bits.

XXX23. "New" sequence dialog boxes should default to current score's leftmost
    values, before the current score gets erased.
	 
	 See #112.

***24  RNGEDIAL:  Make the 6 buttons touchexits, clicking on one in addition to
    selecting it would also move cursor to the corresponding edit field.

***26. -- Region command:  "Change Note Heads" -- choose between normal, x,
		 diamond, invisible, miniature.
	 -- combine slashes with invisible to make rhythm notation

***28. Text on Special menu:  Uses fonts from options menu.  Packet includes
    font number.  (Note:  These fonts could be proportional.)  Text ascii
    must be >=32 and <=127.  Can be ANY height.  During entry make sure
    that text can be rapidly repeated in various places on screen (for
    doing fingering -- I think Degas' text technique would work).

XXX29. Number attribute on repeat, repeat2, whole rest, dotted whole rest.
    These are NOT repetition factors; they are counts for the readers' 
    convenience, so they have no effect on playback.
	 
	 Use text for this.

***32. Typing in lyrics:  space is NOT used for centering previous text;
    control-space is.  Thus, you can have more than one word under a single
    note.  Multiple verses sharing same chorus?  Can be ANY height font,
    proportional.  Ascii must be >=32 and <=127.

***34  Insert/delete space key commands:  numeric ) and (, respectively.
    (Select the symbol; don't actually do the command.)  Note on DOC.
    Also, numeric */-/+ for natural/flat/sharp (typing - or + while
    current symbol is already flat or sharp (respectively) will cause
    double flat and double sharp, and vice versa.)  Use non-numeric '+'
    for mouse cross hair on/off.  Allow shift-ins and shift-clr/home as
    left and right mouse buttons.

***35. Gr_dline() should input a thickness parameter.   Will be needed for
	 diagonal beaming.  Also then I can add a "thickness" special byte to
	 hairpins and S_LINEs (handled exactly same as slur thickness in
	 add_stretch() ).

XXX41. Shrink BL3 files by eliminating unused rows and/or columns:  rests,
       ornaments, articulations, measures.
		 
		See #105.

***42. Type undefined chord/guitar function key:  go into chord/guitar
    editor (instead of ignoring it) - thus you don't need to constantly
    go to the symbol menu to create a variable chord.

***45. New METRDIAL:  3 radio buttons - [ common time ] [ cut time ] [ other ]
    Next to the 3rd button there is a NN / DD display.  You can L/R edit
    on the digits within NN (each digit wraps around), and you can L/R edit
    the DD (cycles through 1,2,4,8,16,32,64 with wraparound).  No mention
    anywhere of "numerator" or "denominator".  Also, DO allow duplicates
    (makes alternating time sigs easier).

XXX46.  Quit:  Give user option of going directly to save command.

	No:  That's not how Atari programs work.

***52  DRIVDIAL:

    -- set current drive button to default exit, so that you can <return>.
    -- use exits instead of touch exits.
    -- disable buttons for drives not set in the drive map.

***53  Implement a real Sorabji award for EZ's release version:  different
    message for different situations, don't leave system in an unknown state.

***54. Do set/get path for each drive individually.  No need to have global
    variables, GEM stores them.

XXX55. Joke:  fake crash from info-dial:  

    addr= 0xffffffL & *(long*)(0x30L);
    search by words forward from addr -- jsr (with d1 = # bombs-1 )
    to the 2nd word whose high byte is $61.

	 As Craig would say, this is STUPID.

***56. In duplicate rehearsal mark error message, tell which bar # has the
    duplicate.

XXX57. Be able to position cursor by clicking within cursor scroll area.

	You'd have to be the laziest person in the world to need this.

***59  Conditional compiles:  (1) demo, (2) A-Lock, (3) Sync Box protected.

***60. You can't put the same symbol exactly on top of itself.  That is
    equivalent to deleting the symbol via the erase-mode mouse.
	 Miscellaneous option to disable this feature.  Note: particularly useful
	 from midi step entry.

XXX62. Get rid of w_start nonsense -- min delta-x at start of score should be
       2 throughout (#define a constant).
		 
		 See BUG #149.

XXX65. Optimize getfile().

	See #74.

***69. Cannibalize _init(), like I do to startup() -- if it's long enough to do
    anything with.

XXX70. Gr clipping is slowing down show_symbs().

XXX73. Re-think all of this:  calc_data(), currscreen, b_/p_start, x_left/right,
    findsymbs(), etc. etc. Test findsymbs() thoroughly throughout.

	I must have gotten really paranoid when I wrote this.

XXX76. By looking through my notation textbooks, document what EZ-Score CAN'T
    do.  then go through this list and document how to fake some of them.

XXX77. Flip region:  Also flip tie directions?

	Bad design:  Would require an option to enable/disable, but that would
	be too confusing.

***79. Use flip-region command to break chords into stem-up/stem-down.  Very
    important after auto-scoring.

***80  Copy protection:  use trace vector as saveA4.  Foil templemon by
       checking what's at $502.

***81. Use 8x8 font for rehearsal marks and lyrics, at least on the printer.

***82. Play-mode:  L-click = play single note, R-click = play all notes in a 
    column on a single staff, shift-L-click = play all notes on a staff
    having same stem direction, shift-R-click = play all notes in a column
    on all staves.

***83. get_range(&title,&b1,&p1,&b2,&p2,overlap):  If overlap not 0 check for
    overlap errors and retry on error.  Printer driver should call get_range
    with overlap=1.  Most section-editing commands also should, except
    clear staff.

***84  loadscore() should have two error messages: BADMINVERS and BADMAJVERS.
    EZ-Score versions are 10-1f, Midi-Score are >=20.

XXX85. <Control><Space> = locate to bar 0.

	See #107.

***87. Keep all text together, make it easy to translate into other languages

***88. Global array of tree addresses, indexed by tree # defined in ezscore.h.
		#define NTREES in ezscore.h.

XXX89. Be able to scroll backwards during playback, for repeats.  See 158.

***91. Hot keys for switcher.

XXX92. findbp() based on a binary search, instead of linear.

	Simply won't work.

***94.
   -- Metronome mark packet should include y-unit, edited from BPMDIAL in
		terms of # ledger lines above the top staff.
	-- Endings and rehearsal marks should have delta-y (# ledger lines above 
		the top staff) bytes in bar line packets.  Don't display them if out
		of current format (similar to ornaments).

***97.
--   24-pin dot matrix printer support:  Use all 24 pins.
--   Wide carriage printer support.
--   Arbitrary vertical spacing in CNF files (handle 144, 180, etc.)

***98. Channelize for midi thru

XXX100.  We must supply different GDOS fonts for Europe and/or include a
      font editor for distributors.

	Not my problem.

***101  Get rid of key commands on menus.

XXX107. Key commands for locate to start / end of score.  Must be executable
     by a single hand.

	Not needed.

***111.  Use a single set of images for the four format boxes within FORMDIAL.
      In color, draw every other scan line.

XXX112.  "New" command should have a 3-button alert box: score / score+options /
		Cancel.  Score = wipe out score.  Options = return options to
		what they were when the program booted up (after an autoload file, if
		there was one).

		I found a better way to do this.

***113.  A single function for doing mouse auto-repeat.

XXX114.  Handle midi-input in mididial same as in autodial.  In both places,
     allow mouse click to abort the input.  See #212.

***115.  Have a scroll operation which sets b/p_start to b/p_lastbar.  R-click
		with right click misc option set to 0.  This would be the default
		value for this misc opt.

***118.  <Shift>0-9 on numeric keypad = a horizontal (de)increment for mouse.
      Right-shift = increment, left-shift = decrement.  Important application:
      Preset proportional spacing for notes/rests/bars.  Obviously, assign a 
      quarter note's space to <4>, etc.

XXX123.  Inside gr routines, sort x1,x2,y1,y2 into nondescending order.  Then
		throughout the program there is no need to do stuff like
		gr_vline(x,min(y1,y2),max(y1,y2))
	
	Too slow.

***124.  Use no charw variables, instead get all info through strprolen().

***125.	Use no charh variables, instead get all info from FNT headers.

***126.  Reorganize key commands for region commands.

XXX128. Print Option for bidirectional printing, or make it automatically 
		part of either rough and/or draft modes.
		
		Most printers will ignore bidirectional printing in graphics mode.

***129.	Redraw screen "panic button":  LRSHIFT-R.

***130. S_LINE should be allowed to become perfectly vertical.


***140.  Allow stem lengths >=0 in stemnote() - will be necessary for diagonal
   	   beaming, probably.

XXX142.  Italics and parentheses attributes on S_CHORD (always 0 in EZ-Score).
    Within the chord font, include italicized chord parts at a fixed
    offset from the non-italicized.  Use generic text for this.

XXX159. Beaming:  beam according to the existing x-spacing.  For example, if
    you placed 8 8th notes like this --  xx xx xx xx -- and then beamed
    all of them, the program would beam them in pairs.  But if you placed
    them like this -- xxx xxx xx -- the program would beam them as 3+3+2.

	Use "manual beaming template" instead.

***163. A "xx note = yy note" symbol.  Used for changing/maintaining tempo
   	 during meter change.  Can be done with generic text.

XXX197. region command to replace duration values of notes and/or rests.
			See 156.

XXX200. While inserting a note (any symbol?) ledger lines appear/disappear
    beneath/above the symbol.  See 134.

XXX205. Separate outchar() for screen (line-A) and printer (thru gr_block).

***206. No need for nested switches in do_menu().  Switching on msg[4] is good
	  enough.

XXX208. Allow bar #s to be printed at ANY bar line.  Use generic text.

XXX209. One of the TEXT* fonts should be the italics used for Italian.  See 31.

***210. Continue mouse cross hair through add_text/chord/guitar/slur/
			hairpin/etc.

212. In MIDIDIAL and AUTODIAL, when waiting for midi input, write a prompt
	("Input a midi note, type a key to abort") somewhere within the dialog box.

***213. During add-chord mode, be able to edit the chord with key commands:
	 minor/major, 7th, major 7th, raise/lower the root, etc.
