#
# $Id: TODO,v 1.2 2000/02/20 19:09:59 kline Exp kline $
# things to be done list.
#

%%% On Project managemrent (taken from a GNU document):

  Software project management has five functions: 

  1.To define goals and keep everybody pointed in the same direction. 
  2.To monitor and make sure crucial details don't get skipped. 
  3.To motivate people to do boring but necessary drudgework. 
  4.To organize the deployment of people for best productivity. 
  5.To marshal resources needed to sustain the project. 

+++


Lines|tasks prepended with an asterisk indicates job-completed.

30july97:: Xlib version done as far as can be reasonably done
after 8 months.  Beginning Xt/Xaw/Xaw3d port.


20sep97::
*##check that all vars are listed as externs where necessary. ::20sep97
*##break main.c into at least 2 functions and rename muuz.c   ::20sep97

*##look for ways to break up parts further, and note or begin breaking ::25sep
  *( note:: find Xt to display and Xt to window and Xt to gc samples in ex13)

*>>Idea: have the control window, the prep window and the user window all
  take up the top 1/5 of the app.  There could be three commandWidget 
  buttons to switch from one to the other.


***create flash window with form outline.


11jan98:: *Set up pre-programmed string//display windows...
	  Next: get audio working with screen flashings::
	       Can worry about the flash timings being off by ~ 1/3 
	       later on.

	  Decide how-to get a pre-programmed entry going.
	       1:: exactly what can use the user set by himself
		   while a prep selection is playing??

	  *Bring in a pop-up error-handling routine with [  OK  ] response.

29jan98:: Get audio exec//kill working with flashings && Mode button.
	  Try simple preprogrammed flashings with 3 state-changes.
	    
	    [[ 
	       Idea: if I want program to flash 60 times at 4Hz, 
	       then 20 times at 8Hz, and 40 times at 16Hz:: will
	       simple for() loops work?
	    ]]

 now what am i doing? i am trying to delay each flash;//trying to get 
 a flash, inc flashcycylecount and have that match hertz*seconds.

 first, get timeout_proc() to flash. --30jan98; 13:00 hours

By 05feb98:: got the Pause() timeout mechanism to work, nearly 
	 perfectly.  And now, having understood this, I should
	 be able to use a similar algo to effect flashes.

	 Generally, just reset the ``interval'' (from 1 to 40)
	 and the duration.  In Pause(), the testpause is set for
	 20 seconds.  

	 for each freq from 1 to 4
	 do
		call autoflash|preprogrammedflash with 1-4 and the
		     number of seconds endurance.
	done


		for ( 1 to 4)
			autoflash (freq, 20); /* freq for 20sec each */

		and into autoflash()

		autoflash(freq seconds)
		{
			seconds *= freq;

			while (!done)
			/*
			 * flash code
			 */

			if (count++ != seconds)
				continue;
			else
				XtRemoveTimeOut(flashtimeout);
				return;

		}


	Something along these lines ought to work.  Ihope, Ihope.

	what stringdata passed to preptimeout_proc() by XtPointer?

	Following ints or character data considered:

	PrepData needed					    data-type:
	freq: 1-40						signed char
	seconds: 1  to 4M					ulong
	colors  say max-ever of 64 signed char 1:128 		signed char
	pitch:  say max-ever of 8 octaves  			signed char
	volume: 1-100 in 10's  					signed char
	screenflashesform: 1 to 64, max-ever			signed char

	unused1							signed char
	unused2							signed char
	unused3							signed char


	total 16bytes per state change.  Figure 100 to 1000 max per
	program gives 1600 to 16000 bytes of struct required for each
	pre-programmed essay.

	Question: howto init each individual struct entry? An array of
	1-100, maybe? then pass the array to Test(struct prep play[])...?





18feb98... 
	
	Switch in Test() and preptimeout...() to select a 
	global progRelax[][] or progLearn[][] or progFun[][]
	&c, and put the test program into relaxation.c
	in fast_unwind() to be picked up by Test().

	work on:: resetting color of flashform to blue;


24mar98...

	Mumbling about things-audio....  

	Can I take the beats code out of timeout_proc() with
	a static int touched_oncrce = 0;
	trick?  This would obviate kill-restarts unless there
	were a change.  

	Maybe move it to the callback where the Frequency is
	touched//changed.

	Hmm.

27mar98ff

	to be added:: if (playing) killbeats() and playing = do_beats()
	code in pitchdown() and pitchup() callbacks.

	change o1 to lower_o or <whatever> and rename all low_o to
	low_octave...

	consider a typedef toggle that will be on or off.

	set up volume stuff to work....


16apr98ff

	check for any function that may be boolean and change for
	sake-of-clarity.

	Also, consider renaming vars and timeout functions:: better
	names for all.  clarity and consistancy.

	review pre-programmed stuff and finish translating one
	from cmu//muuz.

	write a pre-programmed ``fun'' program.  
	  [[ keep both pretty short ]]


10oct98ff

	when a program is already playing, (flashing), disable
	changing categories or programs until SSTOP is selected
	to stop the playing.   ...be sure that STOP does stop 
	the playing.


11oct98 
	add confirmit() to misc funs and drop inn to quit() in callbacks.c
31oct98
	Fixed fonts to NCS Bold in permleft window; fixed the button sizes
	to be 26,26,26,25-Quit in size. Look at XtNvspace'ing these at 6pixels

01nov98
	Fixed the blue_color fields on Control and Prep/Light-Sound windows.

	--Must_do: fix Pause when running a Prep program like at present from
	  the Control-Panel.

	  Move around buttons on Control and Prep Windows.

29dec98 enlarge labelDesc and set up a few trial Descriptions/LS-program.
        make all `char *str[] = '  ;  strings TimesBold or NCS and get the
	largest strings to fit correctly in all controlWidgets windows.

30dec98 rest of controlWidgets  (got all of 1st screen finished on 29dec98);
        and labelDesc with Bold NCS12 text.

	Figure first two or three of these, and a char *blank= "   ... ";
	string to blank the entire frame.

	19feb99: try to use ClearDisplay() or whatever Xlib fn() did this
	rather than using blanks.


        D*19feb99 Add code to change Volume display as each prep plays!!(28mar)
        D* from a 2D array to 1.  For unknown reasons, having a declaration:

	     D* ``struct programInstance progCreativity[][100];''

	D* screws up when the inner dimension == 1.  Furthermore, the two-
	D* dimension array is not necessary.  One will surely suffice so 
	D* progCreativity can be redeclared:

	     D* ``struct programInstance progCreativity[100];''

	D* Few mods should be required other than in prepengine.c and
	D* the prep *.c files.  ...

	D* Hopefully.

	D* This is a project for the weekend: 26, 27, 28 February,  Lay 
	D* foundation today (25feb99).

== Code-cleaning tasks:

28feb99 Resumed code-clean, var re-naming.
        D* Also, moved 3 control panel assemblies rightward...


04-06mar99
	D* put all non-local (global) headers into global.h; kept locals 
	D* individually in the source.  Also added #ifndef __HEADER_H__
	D* to all local header files to straighten the build.

	  ((can be cleaner:: 15mar99. i can delete xforms.h from most
	    src files, &c.))

08mar-ff 
	D* Straighten out the assembly formatting.

12mar99    completed C-to-C++ transformation!

   by 28mar99: added classes: 
		getDisplayValues ((any better name?????))
			to return *display, GC, *visual, drawable, &c

		flashForm 
			to setForm (color) [GREY | SLATEGREY] much flashing
			guts simplification coming.

		mixerControls
			to handle the many  mixer functions; isolate them.

		setAudioValutes
			to take care of things-audio.

		initReInitialize  (planned)


#define PASSE_
1) fix remaining small logic bugs ( switching to <-> from prep-controlpanel, &c.
2) do audio, video, audio+video  logic  (begun:: 30mar99)
   2a) more code-clean, incl renaming vars and getting rid of unnecesary externs

D*3) 3-way switch: cpanel, prep, user-created frames:: how to switch to each 
   D*and now re-draw if we are already there. (29mar99)

4) port v2 siggen stuff, eval howto add it to the XtTimeOut() code and C++'ize.
   port over PD and copyright SDK code and eval.  i want to wind up with code
   that uses jim jones algorithms disguised into C++ obfuscations. 
   4a) more code-clean, incl renaming vars and getting rid of unnecesary externs
   4b) if his new v2 siggen works, with the timeout functions then bundle it 
       and 

5) write the actual L+S programs.

6) revise plan for re-sizing screen for vsmall, small, med-large, and large 
   CRT-sizes.

7) subdivide callbacks.c into at least 2 files; can i consolidate the 
   [yes/no] [confirm/cancel] stuff?  ...

8) final, pre-alpha release that thoroughly cleans code.

	if vol is off and play&audio :: print error
	   OR
	on VOFF , have mixer set to 01 of 100

#undef PASSE_

  (01aug99)

  Before Pre-alpha release (0.25p) this November.

  finish the do-able prep's;
  remove error|trace messages OR integrate debug c++ stuff from work
    and convert messages to the debug fmt.

  code-clean
  global vars for 800x600, 1024x768, and 1280x1024 pix screen. (outline)

#ifdef BLUESKY

(1). goggles|headset additions
(2). finish auto-program
(3). dos/lose and apple/mac ports.  ((shareware))
#endif // BLUESKY


28aug99:
  
  Add to TOUR, finish program.msg() from [f]printfs and [f]puts; 
  add #define DONE 0.25 or whatever to more preps.

  test and re-write any bad-sounding prep beats;
  finish remaining preps.

  Code cleanup!

sep99-dec99:
  
  finish remaining prep
  revise any lousy-sounding preps.

    +++this should be a few hours' hacking MAX 01may00  (hopefully....)

04sep99  bug that XMuuzPrepInformation() popup does not go away if user 
	 hits STOP; it should, and it should reappear with each (re)-PLAY
	 new-selection.
	 Also, a new, identical popup should NOT appear after each PAUSE or
	 STOP and re-PLAY.  (I've begun by making the mods to "shell", the
	 top-level popup widget renamed to "pi_shell"

	fun.c: alpha-ready
	energize.c:  relaxinto (0.0), workout(0.0), rampup(0.0),
			powerboost(0.0), erotic(0.37), highenergy(0.25),
			zoom(0.25).

	creative.c: all 6 prep entries are Not done (0.0)
	relaxation.c: fast_inwind (0.30), tranquility (0.25), power_relax(0.30),
		stress_relief(0.25), pain_relief(0.29), relax_return(0.25),
		cool_calmness(0.23).

	learning.c:  logical(0.31), languages(0.0), preparation(0.30),
		assimilation(0.0), before_study(0.0), retain_after(0.21).

	meditation.c:  zazen(0.25), sesshin(0.23), earthmeditation(0.0).
		aum(0.0), kundalini(0.0), awake_rest(0.0).

	sleep.c:   nap(0.0), goodnight(0.0), relaxinto(0.0), sweetdreams(0.0),
		knockout(0.0), sleep_wake(0.0).


18sep99  Check for /dev/mixer, dev/dsp, and BEATS; should either quit with
         error reason or (perhaps eventually), inform user of status asking
	 if he wishes to use muuz in video-only mode   if sound is nonexistant.

	 quit if no access to muuzbeats binary+++ 01may00


Long range: Winter 2000
  
  Port xaos color cyclying code to Xt/3X./ directory.
  Write user documentation; expand TOUR and TOTORIAL and README.
    Add code to announce unimplemented prep'd selections//programs.

15-16jan00  Expand docs for Atty Brown.  Maybe checkout code addition.

            ##Vsoon: translate muuzbeats.c to C++ and simplify it max!
	    Discover signal//kill() bug.  Maybe replace SIGINT with
	    SIGKILL or SIGCHILD.  Code walkthru and add printf's to
	    show pid of beatsPid that is keeping dev/dsp/ open.
	    ... (??)!!!


jan00::     More on man page documentation; likewise on TOUR, TUTORIAL,
	    and README, too.

	    For this months, documentation is an issue...

	    Letter to Atty Brown by eod-of-month.

to do before 1st alpha port  (by/before 01jun00):

  D_ (hopefully)+ clean up menubar width size :: the Help button is nearly 
     off screen on SunOs
  
  D_ + straighten out help button files; now they may point to a test or 
    non-existant files

    ---Underway::Next:: begin filling out the help documentation.

  D_ + draft own sharewareish license based upon john bradley's, perhaps.
    and finished inclusing #include <copyright.h> in all src files.
  
  D_+ add an About button to menu1 dropdown.

  CHANGED this:
  + Write a small test program to look for /dev/mixer (and maybe exercise it),
    and check for Xaw3d and whatever else is required.   PopUp an error window,
    or an OKAY window if all-set to exec muuz ...

  D_ CHANGED to the addition of FatalErr functions for hopefully rare cases
  where /dev/mixer or /dev/dsp are not available.

Remaining before posting muuz-0.20:

	LICENSING, COPYING docs....

	Write documentation!!   // On orange panel:: Make red??

03mar00:  Before first port, figure out howto ADJUST "Mode" and "Volume"
          controls to let users adjust how they play back the preprogrammed
	  offerings.

	  *) an ``adjust|no-adjust'' button  made active only in PreP
	     screenmode  or STOP/PLAY/ADJUST/PAUSE  (maybe not)

	   DONE::  04mar00 (17:15)  (!!)

	   The rest to-do is to figure out how to implement the mode/vol
	   ADJUSTMENTS within prepengine.c




[[ Long term ]]

  Port amulet input widgets for user-programmed create-own mindmachine programs.
  Create text+GUI popup shells for help-text scroll frames (from Xlib)

[[ End Longterm ]]


   Figure out howto automatically resize the font as i resize the
   height and width.  

1st port to be muuz-0.27.1  

for 0.27.2 clean up error output class stuff.
         mode code cleanup: get rid of all { extern xxx; } dcl.
	 more docs.
	 one addtl prep
  center warning.
  Imakefile

//for 0.27.3 figure out howto implement the ADJUST feature.
         more docs.
	 more code cleanup
	 perhaps adjust typedefs; get rid of toggle type. <thinkcarter>
	 one addtl prep

//for 0.28.1 auto-resize font.
         one addtl prep + fix any "sour-sounding" preps there now.



