Wed Mar 25 15:30:55 1992  Keith Moore  (moore@wilma)

	* Imakefile: add $(HENCE_LIBRARIES) to SYS_LIBRARIES define, so
	  imake.defs can link in local libraries (or add -L options)
	  when necessary.

	* misc.c [IMA_U370]: define _NLctab to get around brain damage
	  in the X11R4 libraries on the 370.

	* subproc.c [IMA_U370]: undef _BSD like on the RIOS, so signal
	  is declared to return void (*)() rather than int (*)().
	  Enable the broken_signal hack to use sigaction() rather than
	  signal().

Thu Feb 27 16:45:49 1992  Keith Moore  (moore@wilma)

	* trace.c (traceEvent) print out timestamps in trace event logs as
	  hh:mm:ss since the start of the program, not the number of seconds
	  since Jan 1 1970.

Wed Feb 19 13:25:32 1992  Keith Moore  (moore at wilma)

	* misc.c (setenv): new function for systems that don't
	  already have it.

	* widmain.c (gotDirectory): set "PWD" environment variable
	  to the new directory, to avoid confusing inferior processes
	  that look at such things (like Gnu emacs).

Wed Feb 12 16:13:06 1992  Keith Moore  (moore at wilma)

	Fixes from Peter Rigsbee:

	* widmain.c (directorySink, gotDirectory): make these
	  routines "static void"

	* symtab.h: add decl for st_Key ();

	* FileSelect.c (Initialize): add some casts to make picky 
	  compilers happy.

	* build.c.  move #include <pwd.h> to the top of the file
	  to work around build problem on CRAYs

	* costmat.c (cm_CheckGraph): pass "grf", not "grf->heads"
	  to gr_Empty.

Fri Feb  7 19:32:03 1992  Keith Moore  (moore at wilma)

	* build.c (mkmf_cb): add -DARCHSTR=\"$(ARCH)\" to CFLAGS
	  in generated Makefiles.

Thu Feb  6 00:10:18 1992  Keith Moore  (moore at thud)

	* patchlevel.h: changed to version 1.2 for release

Wed Feb  5 01:19:17 1992  Keith Moore  (moore at thud)

	* FileSelect.c: nuke one last offending debug printf.

	* build.c (mkmf_cb): don't write out rules to make a function
	  named "null".

	* funcdefs.y (scanSubGraph): fix missing argument to msg_Format
	  that was causing a core dump.

	* trace.c (startTrace): make "traceFile" and "graph" buttons
	  insensitive.

	* trace.c (stopTrace): make "traceFile" and "graph" buttons
	  sensitive again.

	* compose.c (start_compose): make "graph" button insensitive.

	* compose.c (stop_compose): make "graph" button sensitive again.

	* config.c (start_config): make "costs" button insensitive.

	* config.c (stop_config): make "costs" button sensitive again.

	* funcdefs.y (compareFunctions): disable type checking
	  unless TYPECHECKING is #define-d.

	* funcdefs.y: put all debugging printfs within #ifdef DEBUG ... #endif

Tue Feb  4 04:08:04 1992  Keith Moore  (moore at wilma)

	* pvmglue.c (pvm_Start): instead of setting label to "kill pvm",
	  make the widget insensitive.  This until we can get "kill pvm"
	  working correctly.

	* pvmglue.c (pvm_Done): instead of setting label to "start pvm",
	  make the widget sensitive again.

	* costmat.c (cm_CheckGraph): check for node->sub_name == NULL
	  before referencing the function name.

	 [ fixes to problems with getcwd(), caused by the fact that
	   getcwd () does a popen ("pwd") ]
	  
	* widmain.c (dir_cb): whenever a chdir() succeeds, store
	  the directory that we change to in heap space and
	  set currentDirectory to point to it.  If currentDirectory
	  was already non-NULL, free it first.

	* xsetup.c (setup): initialize currentDirectory to point
	  to the current directory as obtained from getcwd().

	* comn.h: define currentDirectory global.

	* widmain.c (set_directory, set_graphfile, set_costfile):
	  instead of calling getcwd(), use currentDirectory string.

	[ end of getcwd() fixes... ]

	* widmain.c (start_pvm_cb), execute.c (do_execute):
	  fix typo that was causing pvmHostFile to always be
	  ignored.

	* xsetup.c (resource fallbacks): change default for pvmHostFile
	  to /dev/null, so "start pvm" won't complain if user
	  hasn't specified it.

Mon Feb  3 00:09:36 1992  Keith Moore  (moore at wilma)

	* subproc.c (subproc_EventHandler): when a child dies,
	  poll it's output fd with select() for up to two seconds
	  to see if it still has data in the pipe for the client.

	* widgen.c (verify): make label widget in verify popup
	  resizable.

	* widmain.c (quit_cb): call compose_SaveLuser() and
	  config_SaveLuser()  before exiting to give user
	  a last chance to save graph and cost matrix files.

	* compose.c (compose_SaveLuser): new function to check
	  if graph is unsaved, and ask the user if he/she wants
	  to lose it.  called immediately before exit.

	* config.c (config_SaveLuser): like compose_SaveLuser(),
	  but for modified cost matrices.

	* config.c (start_config): if cm_AddNamesFromGraph modifies
	  the cost matrix, print a msg so user will have a clue as
	  to why she has to save the changes before exiting.

	* costmat.c (cm_AddNamesFromGraph): return nonzero value
	  if cost matrix was modified.

	* fix various things so htool works on a NeXT box.

Sun Feb  2 00:08:52 1992  Keith Moore  (moore at wilma)

	* fix lots of pointer mismatch errors detected by Sequent's
	  picky compiler.

	* build.c (mkmf_cb): move -DIMA_$(ARCH) to CFLAGS.

	* misc.c (getcwd) [IMA_SYMM]: fix typo that caused getcwd()
	  emulation to always fail on Sequents.

	* build.c (getHome): new function to find user's HOME env
	  variable or, failing that, his home directory, to be
	  passed on the make command line.

	* build.c (mkmf_cb): add -DIMA_$(ARCH) to compilation rules
	  in generated Makefiles.

	* FileSelect.c, FileSelect.h: add "filename:" label to the
	  left of the "selected file" text box.

	* costmat.c (cm_AddNamesFromGraph): new function to
	  scan a HeNCE graph and define any functions that are missing
	  from the cost matrix.

	* config.c (start_config): call cm_AddNamesFromGraph when
	  entering config mode.

	* eaccess.c (eaccess): nuke a debugging printf

	* widgen.c (fileVerify): nuke some debugging printfs.

	* FileSelect.c: nuked lots of printfs and cleaned up lots of
	  obsolete #ifdef-ed out code.

	* hostmap.c (hmap_ClearWindow): new function, called by
	  hmap_NukeHosts to clear the hostmap popup window.

Sat Feb  1 18:35:43 1992  Keith Moore  (moore at wilma)

	* trace.c (checkThings): if trace file has changed, call
	  hmap_NukeHosts () to clear out the old host icons.

	* hostmap.c (hmap_FreeProcList): new function, used by
	  hmap_ResetHosts() and hmap_NukeHosts() to free up
	  an entire process list that is associated with a host.

	  (hmap_ReadIcon): set the refcount to 1 if we read a
	  host into an icon struct.  Someday perhaps we'll actually
	  use it.

	  (hmap_FreeIcon): new function to free up a struct icon
	  as well as the pixmap it points to.

	  (hmap_NukeHost): new helper function to nuke a single host

	  (hmap_NukeHosts): new function to nuke an entire host list.
	  Intended for use when we change trace files.

	* hostmap.h: add a refcount field to struct icon decl.

	* execute.c (do_execute), widmain.c (start_pvm_cb):  if fopen
	  fails on pvm host file, fopen /dev/null instead.

	* costmat.c (cm_BuildPvmHostFile): if "in" pointer is NULL, don't
	  try to copy old host file.  (This probably isn't needed, since
	  the /dev/null stuff should suffice.)

	* xsetup.c (setup): when setting file name variables from
	  resources, call texpand() to do tilde-expansion.

	* execute.c (do_execute): don't fail if pvm_hosts file
	  does not exist, just print a warning message.

	* config.c (stop_config): if cost matrix has been modified,
	  make sure the user wants to leave without saving.

	* config.c: notice whenever a cost matrix has been changed,
	  and set the isModified field via the CellChanged callback.

	* costmat.h: add isModified field to cost matrix structure

	* costmat.c (cm_New, cm_ReadFile, cm_WriteFile): reset isModified
	  to zero.

	* name of the sub.defs file is now set via the X resource
	  "htool.subDefsFile". Tilde-expansion happens before the
	  resource is used, so that the complete name of the
	  sub.defs file gets passed to editors and the like.

Wed Jan 29 16:17:06 1992  Keith Moore  (moore at wilma)

	* funcdefs.y (compareFunctions): improve error messages
	  that result from type mismatches between the declared
	  result type of a function and the variable the result
	  of a function is assigned to.

	* funcdefs.y (buildFuncDecl): determine the type of the
	  function as used by looking at the type of the variable
	  that the return value of the function was assigned to.

	* funcdefs.y (scanSubGraph): declare return parameters on
	  PIPE and FANOUT nodes.

Mon Jan 20 14:33:08 1992  Keith Moore  (moore at wilma)

	* msg.c (msg_Format [HAVE_STDARG]): fix misspelled identifier.

	* hostmap.c (hmap_ResetHosts): in the loop that deletes host info,
	  was refering to a value after having free'd it.  fixed.
	  (found by par@teak.cray.com).

Thu Jan 16 15:24:43 1992  Keith Moore  (moore at austin)

	* misc.c (getdtablesize): new function for HP/UX
	  on SNK.  htool compiles on snakes now.  (even
	  if pvm doesn't work there yet!)

	* FileSelect.c (get_new_filter_val): use malloc()
	  to allocate space for filenames, rather than storing
	  them in a local array.

	* pvmglue.c (pvm_Start): add -sb to xterm startup
	  to always ask for scrollbars.

Wed Jan 15 17:41:28 1992  Keith Moore  (moore at austin)

	* ran through the RT's ansi-c compiler and applied
	  various fixes for ansi-C compilers.

	* before "__" is defined, do a #ifdef__/#undef__/#endif
	  this for CRAYs but is just a good idea in general.

	* subproc.c (subproc_EventHandler): cast 2nd argument
	  to read() to char *.

	* subrpoc.c (subproc_SendEvent): cast 2nd argument to
	  write() to char *.

	* costmat.c: move #include of costmat.h to the end of the
	  list of #include files, to placate ANSI C compilers.

Mon Jan 13 15:13:09 1992  Keith Moore  (moore at wilma)

	* FileSelect.c: change label of "select" to "ok".

	* FileSelect.c: use eaccess() instead of access()

	* eaccess.c: new file.  implements eaccess(), which is a
	  version of access() that uses the effective uid instead
	  of the real one.

	* compose.c, xgraph.c, xsetup.c, xcomn.h, xgraph.h: integrated
	  Reed Wade's patches to (a) set colors of HeNCE nodes with
	  resources, not with hard-wired constants, (b) do cool node
	  animation in trace mode, (c) add a help popup to compose
	  mode.

Fri Jan 10 01:24:38 1992  Keith Moore  (moore at wilma)

	* xgraph.c (xgr_DrawLegend): draw a line between "Node Exited"
	  and "Warning in Graph Program" nodes in the legend popup.

	* xgraph.c (xgr_DrawNode): always use special bitmaps
	  when drawing normal nodes; not just in monochrome mode.
	  (fix due to Reed Wade)

	* xsetup.c (setup): write out greeting banner including
	  version #.  (moved from cre_mainwid() in widmain.c)

	* subproc.c: if IMA_RIOS and _BSD is defined, nuke the _BSD
	  definition.  This is so it can compile on RIOSes with
	  a patched version of X11R4 installed (instead of X11R5).
	  No promises as to whether it actually works in this configuration.
	  (IBM gets the brain-damage of the week award.)

	* funcdefs.y: lots of fixes relating to scanSubProc and
	  its children.  expr_Type and param_Type moved over from
	  exp.c and param.c, respectively, because at least param_Type
	  needs to know about the symbol table kept in funcdefs.y.
	  If I ever rewrite htool I'll build the symbol table in
	  parallel with the graph during parsing.

	* exp.c (expr_Type): moved to funcdefs.y

	* param.c (param_Type): moved to funcdefs.y

Thu Jan  9 14:48:56 1992  Keith Moore  (moore at wilma)

        * rb/rb.c (rb_Empty): return 1 if tree is NULL.  
	  (rb_First, rb_Next, rb_Prev, rb_Last): return NULL if arg is NULL.
	  [ now the tree search functions do reasonable things on NULL trees]

	* funcdefs.y (scanSubGraph): don't attempt to traverse children
	  of a node if n-nchildren == 0.

	* funcdefs.y (nukeParamDecls): check to make sure that tree is
	  not NULL before traversing it.

	* funcdefs.y (nukeFuncDecls): check to make sure that tree is
	  not NULL before traversing it.

	* widgen.c (fileVerify, filever, verify): use
	  transientShellWidgetClass instead of overrideShellWidgetClass
	  when creating dialog box popups.  (fix due to Peter Rigsbee)

Wed Jan  8 16:50:01 1992  Keith Moore  (moore at wilma)

	* patchlevel.h: created.  Defines HTOOL_VERSION as 1.1

Tue Jan  7 19:09:32 1992  Keith Moore  (moore at wilma)

	* parse.y: when defining a loop control parameter, implicitly
	  and automagically declare it NEW.

	* FileSelect.c (set_selection): new function to find and
	  highlight selection in list-of-files text window, if it
	  appears there.

	* FileSelect.c (SetValues): call set_selection() when setting
	  the value of "selection" resource.

	* widgen.c (fileVerify): if the name buffer contains a filename,
	  set the "selection" resource of the file select widget to
	  that file name.

	* FileSelect.c (check_file_flags): if FS_MustBeWritable is
	  set, and there is no '/' in the file name, use "." as the
	  directory to check for write permission.  Also return a
	  more meaningful error message if the directory does not
	  exist.

	* tilde.c (tfopen): new function to do fopen() with tilde
	  expansion.

	* hostmap.c (hmap_ReadIcon): use texpand on the file name
	  containing a HeNCE icon before passing it to XReadBitmapFile().

	* hostmap.c (hmap_ReadIconList): use tfopen so tilde-expansion
	  will work on the name of the file containing the names of
	  the files where icons are.

Fri Jan  3 16:22:43 1992  Keith Moore  (moore at wilma)

	* build.c: when calling mkwrap, generate tmp subdefs file
	  containing only those function decls needed for this
	  particular graph.  (uses subdefs_WriteDecls).

	* funcdefs.y, funcdefs.h: don't nuke declarations in
	  subdefs_CheckGraph().  Define a function called
	  subdefs_NukeDecls() to do that job.  Export a function
	  subdefs_WriteDecls() to actually write out those
	  decls that are needed for a particular graph; these
	  are now set as a side-effect of subdefs_CheckGraph().

Thu Jan  2 00:41:50 1992  Keith Moore  (moore at thud)

	* FileSelect.c (check_file_flags): new function to
	  do more checks for validity of the file.

	* FileSelect.c (do_fileselect): if check_file_flags()
	  fails, put a message in the feedback label and
	  don't select file.

	* FileSelect.c (new_filter): nuke old contents of
	  feedback label when computing new filter.

	* costmat.c (cm_BuildPvmHostFile): now uses two-pass
	  algorithm.  Adds any hosts that were missing from the
	  master pvm hosts file to the host file passed to pvmd.

	* pvmglue.c (pvm_BuildHostFile): move function to
	  costmat.c and rename to cm_BuildPvmHostFile.

	* widgen.c (fileVerify): tilde-expand the result before
	  returning to the caller.

	* FileSelect.c (get_new_filter_val): sort filenames;
	  handle tilde prefixes

	* FileSelect.c (get_new_filter_val): always call match_flags
	  with full path name of file (not directory-relative)

	* FileSelect.c: add ability to filter out files based on
	  flags (now defined in FileSelect.h) as well as on name.

	* FileSelect.c (set_select): put complete path name in selection
	  text window (not just directory-relative name).

	* FileSelect.c (do_fileselect): don't build complete path name
	  here; do it in set_select().

Wed Jan  1 02:33:02 1992  Keith Moore  (moore at austin)

	* Imakefile: changed to generate funcdefs.lex.out and parse.lex.out
	  from funcdefs.lex and parse.lex, instead of funcdefs.l.c from
	  funcdefs.l and parse.l.c from parse.l.  Combined lex and yacc
	  building of parse.c and funcdefs.c into a single rule each.
	  This to get around brain damage in the SunOS "make" command.

	* funcdefs.y, parse.y: changed to include "xxx.lex.out" instead of
	  "xxx.l.c"

	* widgen.c (fileVerify): new file routine using Reed Wade's
	  FileSelect widget

	* FileSelect.c, FileSelect.h, FileSelectP.h: implementation
	  of Reed Wade's FileSelect widget

	* tilde.c, tilde.h: code to expand tildes in filenames

	* funcdefs.y, funcdefs.h: code to do type checking on HeNCE
	  graphs, and compare the use of HeNCE node functions with
	  the declarations in a sub.defs file.

	* rb/rb.c (rb_SetValue): new function

	* various .c files: use new fileVerify() routine instead of
	  old filever() routine.

	* build.c (mkwraps_cb): call typeCheckGraph() (in funcdefs.y)
	  before writing wrappers.

	* compose.c (critic_cb): call typeCheckGraph() if gr_Critic()
	  succeeds.

	* exp.c (expr_Type): new function to determine type of expression

	* exp.[ch], rb/rb.[ch]: redo for new-style function prototypes

	* param.c (param_Type): new function to return type of a parameter

Mon Dec 30 19:43:15 1991  Keith Moore  (moore at wilma)

	* parse.y: remove ANSI-C style function declarations, leaving
	  only the Classic C style decls.

Sat Dec 21 00:32:13 1991  Keith Moore  (moore at wilma)

	* xgraph.c: change names of all routines to begin with xgr_XXX

	* graph.c (gr_CopyGraph): copy sub_names when copying a node.
	  Now trace displays the sub_name as well as the node #.

	* graph.c: remove ugly bimodal (ANSI and Classic) function
	  declarations.  Always use Classic function declarations.
	  (but be careful about float and short parameters...)

	* xgraph.c (gr_XDrawNode): if tracing, draw in subroutine
	  name if available.

	* costmat.c (cm_ClearPvmFlag, cm_CheckPvmFlag): new functions.

	* costmat.c (cm_HostIsPresent): set PVM flag as a side effect.

	* pvmglue.c (pvm_BuildHostFile): have the cost matrix package
	  check to make sure that all hosts that are in the cost matrix
	  are also in the pvm hosts file.  Complain if any hosts aren't
	  there.

	* execute.c (do_execute), widmain.c (start_pvm_cb): check return
	  value from pvm_BuildHostFile() and don't startup pvmd if there
	  is an error.

Fri Dec 20 17:40:18 1991  Keith Moore  (moore at wilma)

	* execute.c (do_execute): instead of always reading
	  the globally-defined pvm hosts file, generate a temporary
	  one each time we start up a pvm.

	* widmain.c (start_pvm_cb): instead of always reading
	  the globally-defined pvm hosts file, generate a temporary
	  one each time we start up a pvm.

	* new variable/X resource "pvmHostFile" which contains
	  the name of the "master" pvm hosts file.

	* execute.c (do_execute): use pvm_BuildHostFile to write
	  out a minimal pvm hosts file for this graph, before
	  starting pvm.

	* pvmglue.c (pvm_BuildHostFile): new function that, given
	  a "master" pvm hosts file, builds a minimal pvm hosts file
	  containing just the hosts needed to run the HeNCE program,
	  as specified by the cost matrix.

Thu Dec 19 18:00:53 1991  Keith Moore  (moore at wilma)

	* costmat.h (cm_HostIsPresent): new function to determine
	  whether a host is being used in the cost matrix.

	* changed the names of all routines in costmat.c to look like
	  cm_XXX, as well as all of the references to them.

	* hostmap.c, hostmap.h: add code to keep track of which processes
	  are currently running on which machines.  Print a list of
	  running process below the icon on the host map.

	* misc.c (strerror): new function to emulate POSIX strerror() 
	  on systems that don't have it.

	* moved vprintf implementation from msg.c to misc.c

	* hostmap.c, trace.c: remove all occurances of hmap_HostEvent()
	  rename hmap_HostEventX() to hmap_HostEvent().
	  add id and instance number args to hmap_HostEvent().

Tue Dec 17 14:25:55 1991  Keith Moore  (moore at wilma)

	* misc.c: add a getcwd() in terms of getwd().
	  Needed for DYNIX, but might be useful elsewhere.

	* msg.c: add a version of vsprintf for Symmetry, because
	  DYNIX doesn't include it in libc.a

Fri Dec 13 11:21:59 1991  Keith Moore  (moore at tonka)

	* subproc.c: added #defines for WEXITSTATUS and WTERMSIG
	  if they aren't defined in <sys/type.h>.  Mostly for
	  DYNIX.

	* subproc.c (subproc_SigHandler): declare "union wait" for
	  machines that need it.

	* add casts to returns from rb_Value to satisfy
	  sequent C compiler.

Wed Dec 11 15:40:04 1991  Keith Moore  (moore at wilma)

	* param.h: add nodeWhereDeclared element to Param struct
	  (to be used in sub.defs file generation)

	* param.c (param_New): initialize nodeWhereDeclared.

	* change every occurance of strchr() or strrchr() to use
	  index() or rindex(), respectively, to be compatible
	  with the declarations in <X11/Xos.h>

	* *.h: check every parameterized macro to make sure that
	  parenthesis are used whenever they should be.

	* xincl.h: add <X11/Xos.h> to the list of files included.

Thu Dec  5 01:49:42 1991  Keith Moore  (moore at wilma)

	* created an Imakefile to hopefully make it easier to compile
	  this stuff.  Seems to work on SUN4, PMAX, and RIOS anyway.

Wed Dec  4 15:47:46 1991  Keith Moore  (moore at wilma)

	Fixes suggested/inspired by peter@teak.cray.com:
 
	* subproc.c, subproc.h: change type of return value of
	  subproc_SigHandler to "void", and remove "return 1"
	  statements.  This to match the prototypical sig handler.

	* *.h: do #ifdef __\n#undef __ \n#endif everywhere
	  before #defining __.  This is to prevent a conflict
	  on the cray.

 	* widgen.c (get_mousxy): cast last pointer to (unsigned int *)
	  to match prototype.

 	* hostmap.h: remove argument in prototype to hmap_Refersh().

	* pvmglue.c: remove "extern int errno" in case definition of
	  errno in <errno.h> causes a conflict.
	
	* trace.c (rewind_cb): delete "extern int errno" definition and
	  #include <errno.h> at BOF.

	* pvmglue.c (pvm_Start): get xterm command from an X resource,
	  instead of assuming that (the correct) xterm is in your path.

	* comn.h, xsetup.c: define xtermCommand variable and initialize
	  it from the xtermCommand resource. 

	* Makefile: put '-' in front of all ranlib commands

Sat Nov 17 15:21:12 1991  Keith Moore  (moore at wilma)

	* graph.c (gr_ResetNodeAndChildren): add missing argument
	  in recursive call to gr_ResetNodeAndChildren().

Thu Nov 14 12:20:50 1991  Keith Moore  (moore at wilma)

	* trace.c (trace_event): simulate DONE events
	  on ENDPIPE nodes.

	* trace.c (trace_event): on FINISH event, set all
	  nodes to DEAD.

	* graph.c (gr_ResetGraph): modified to take an extra
	  state parameter insted of assuming ST_NOT_BEGUN.
	  Everybody that called it was also modified.

	* xgraph.c (gr_XDrawNode): add some extra spaces to
	  the count of running/idle nodes in so as to be sure
	  and cover up the previous display.

	* hostmap.c (hmap_HostEventX): check to see if
	  host info pointer is NULL before processing event.
	  This happens if the event corresponds to the null()
	  procedure being executed, which doesn't happen on any 
	  machine.

Wed Nov 13 12:32:29 1991  Keith Moore  (moore at wilma)

	* trace.c (traceEvent): handle special nodes in a
	  semi-reasonable fashion.

	* xdraw.c (xdraw_Text): use XDrawImageString rather than
	  XDrawString.

	* xgraph.c (gr_XDrawNode): move text alongside of node,
	  instead of at its baseline, because arcs tend to enter
	  at the bottom and leave at the top rather than at the
	  sides.

	* xgraph.h: new file with function prototypes for xgraph.c

	* xgraph.c (gr_XDrawNode): if how is negative, draw as for
	  tracing; otherwise, draw as for compose.

	  (gr_XDrawGrf): add third argument "tracemode" which says
	  to draw as for tracing.  If tracemode = 0, draw as for
	  compose.

	* trace.c, compose.c: change calls to gr_XDrawGrf to add
	  new third parameter.

	* trace.c: change calls to gr_XDrawNode to use trace mode
	  drawing (how == -1).

	* graph.c (gr_SetState): reset numRunning and numIdle
	  counters of each node to 0 whenever gr_SetState() is
	  called.

	* graph.h: add numRunning and numIdle fields to
	  node structure.  These are for tracing.

	* graph.c (gr_NewNode): initialize numRunning and numIdle
	  when creating a node.

	* subproc.c: add a fake signal() function to possibly
	  fix RIOS brain damage, where a SIGCHLD isn't getting
	  delivered when a child dies.

Tue Nov 12 03:27:21 1991  Keith Moore  (moore at wilma)

	* config.c: change "new host" button to "new entry"
	  button, with corresponding changes in function names.

	* trace.c (start_trace): don't run checkThings() until
	  setting up the canvas for drawing traced graphs.

	* execute.c (do_execute): make sure graph is not
	  empty before writing out cost matrix.  The checkgraphcost()
	  routine in costmat.c only marks hosts that are "needed"
	  to execute the graph. If the graph hadn't been specified,
	  only the local host appeared in the pvm hosts file.

	* widmain.c (start_pvm_cb): write out pvm hosts file
	  before starting pvmd from "start pvm" button.

Mon Nov 11 15:08:18 1991  Keith Moore  (moore at wilma)

	* tf.c (tf_SetFile): after reading START event, seek back
	  to the start of that record before returning.

	* trace.c (trace_ChangeGraphFile): similar to
	  trace_ChangeTraceFile, below.
	
	* widmain.c (grfile_cb): call trace_ChangeGraphFile when user
	  specifies a new graph file.

	* trace.c (trace_ChangeTraceFile): new function that asks
	  permission to change the trace file, or lets trace module
	  know that the file has been changed.

	* widmain.c (tracefile_cb): call trace_ChangeTraceFile when
	  user changes trace file.

	* trace.c (rewind_cb): call gr_SetState() to reset the graph to
	  its initial state when rewinding.

	* graph.c (gr_Empty): new predicate that tells whether a graph
	  is empty.

	* gr_SetState: new function to set the state of every node in the
	  graph.

	* trace.c: use gr_Empty() to check whether there is a graph before
	  doing a fwd or fwd_step.

Thu Nov  7 00:47:09 1991  Keith Moore  (moore at wilma)

	* build.c (mkmf_cb): don't define CC, FC, CFLAGS, or FFLAGS;
	  fix a typo in fortran compile rule.

	* trace.c: make (rewind,stop,fwdstep,fwd) buttons
	  a radio group, and make them set the stop button
	  whenever their function is done.

Wed Nov  6 00:18:12 1991  Keith Moore  (moore at wilma)

	* widmain.c (tracefile_cb): add logic to select the name of
	  the trace file.

	* trace.c:
	- rewrite trace code to use tf.c library
	- use bitmap buttons instead of text
	- add "forward step" button
	- add "monitor mode" button

	* tf.c (tf_ReadEvent): use xfgets.  If it returns NULL,
	  seek back to the beginning of the record before returning.
	  (to support monitor mode).
	  
	* build.c (mkmf_cb): if language == C, mv cw_xxx.o (not cw_xxx.c)
	  to w_xxx.o (reported by adamb).

	* parse.y (sconst): get parsed string from lex_string, not
	  yytext.  Also, don't save a malloced copy of the string,
	  since the lexer has already malloced it. (reported by adamb)

	* lex.l: when parsing string constant, leave parsed string in
	  lex_string. (reported by adamb)

	* popups.c: gone.  merged into hostmap.c and trace.c

	  (Some of the stuff that is now in hostmap.c should probably
	  go in xdraw.c)

Tue Nov  5 22:45:04 1991  Keith Moore  (moore at wilma)

	* tf.c, tf.h: new module to manipulate trace files.

Sat Nov  2 19:05:31 1991  Keith Moore  (moore at wilma)

	* xsetup.c: define a resource traceFile to set the default
	  HeNCE executioner trace file.

	* widmain.c: add dummy command button to set trace file.

	* trace.c (trace_event): read names of machines from
	  trace file, instead of from cost matrix.  (uses a
	  new trace file record just implemented in the
	  executioner.)

	  Implemented new trace record types MACHINE (define
	  machine) and VNODE (virtual node expansion).

	* compose.c: fixed some places where the composeSubprocCount
	  wasn't being updated correctly.

	* subproc.c (subproc_RunInChild): new helper function to
	  start a subprocess using execvp() with its file
	  descriptors dup2()ed in the right places.
	
	  (subproc_Run): new function to run a child process without
	  using a shell.

	  (subproc_Spawn): rewritten to use subproc_RunInChild().

	  (subproc_Popen): rewritten to use subproc_RunInChild().

Fri Nov  1 16:33:57 1991  Keith Moore  (moore at wilma)

	* build.c (mkmf_cb): change generated makefiles to do a
	  "cc -c cw_XXX.c ; mv cw_XXX.o w_XXX.o" rather than
	  "cc -c cw_XXX.c -o w_XXX.o".  The latter breaks on some
	  SysV-ish boxen.

	* pvmglue.c: added pvm_Stop() routine to kill pvmd.
	  (doesn't work yet, though).  pvm_StartStop () now
	  toggles the legend in the "start pvm"/"kill pvm"
	  button.

	* widgen.c (message): increase size of message window
	  to 40000 (was 4000)

	* critic.c (gr_Critic): if graph is NULL, return error.

Thu Oct 31 17:40:17 1991  Keith Moore  (moore at wilma)

	* pvmglue.[ch]: new module to interface with pvm

	* widmain.c: added "start pvm" button, instead
	  of having "execute" button start up pvmd.

Wed Oct 30 00:25:01 1991  Keith Moore  (moore at wilma)

	* compose.c: improve checks for existing subprocesses
	  on various command buttons.  #if 0 ... #endif'ed out
	  some debugging code.

	* build.c: fixed command buttons so they stay "on"
	  while the associated command is running.  The "whenDone"
	  callback for the associated subprocess turns them off.

	* ran everything through gcc -ansi -pedantic.  Munged
	  graph.h so that it uses __() macro instead of
	  #if FuncPr ... #endif to declare formals of function
	  prototypes.  Minor changes to other files to fix
	  type mismatches, etc.

Tue Oct 29 13:49:18 1991  Keith Moore  (moore at wilma)

	* build.c: change various routines to use subproc_Popen()
	  instead of popen().

	* subproc.c (subproc_ChildData): Xt passes the UNIX fd
	  by reference, not by value.  Fixed.

	* widmain.c (cre_mainwid): make the Form widget that
	  encloses the row of buttons resizable, so that
	  it will stretch when the legends of the buttons
	  change.  (Reed's fix)

	* popups.c, trace.c, xsetup.c, comn.h: define variable
	  "iconList" which is the name of the file containing
	  machine -> X bitmap file mappings (default "htool_icons").

	* xsetup.c (setup): initialize pvmdExecPath variable from
	  X resource htool.pvmdExecPath. (bug fix from adamb)

Mon Oct 28 15:02:31 1991  Keith Moore  (moore at wilma)

	* widmain.c, widgen.c: add Reed Wade's code to support
          a scrollable message panel.

	* Makefile: add rule to "make" rb.h by linking it
	  from rb/rb.h

Fri Oct 25 14:50:03 1991  Keith Moore  (moore at wilma)

	* compose.c: change code that edits node implementations
	  (i.e. C or FORTRAN code) to use the new subproc stuff.

	* subproc.c (subproc_Count): new proc to count
	  the number of managed subprocesses.

	* compose.c (stop_compose): don't exit compose
	  mode if there are editing subprocesses.

Thu Oct 24 22:47:24 1991  Keith Moore  (moore at wilma)

	* graph.h: add NF_EDITING flag to struct node decl.

	* subproc.c: new module that manages subprocesses
	  while handling X events.

	* compose.c: rewrite node editing stuff to use
	  new subprocess code, so you can edit more than
	  one node at a time.

Wed Oct 23 16:55:30 1991  Keith Moore  (moore at wilma)

	* execute.c, xsetup.c: make location of pvmd
	  an X resource (e.g. "htool.pvmd: /tmp/pvm/pvmd")

	* parse.y: disallow NEW decl unless it specifies
	  a type.

Tue Oct 22 18:59:56 1991  Keith Moore  (moore at wilma)

	* trace.c (cre_cmdpanel): make "hosts" and "usage"
	  buttons toggle their visible state.

Mon Oct 21 10:41:30 1991  Keith Moore  (moore at wilma)

	* build.c (mkmf_cb): if language == FORTRAN,
	  arrange to compile and link fmain.f, which
	  is produced by the "mkwrap" program.

	* (various): change language variable to
	  be an enum (defined in comn.h) rather than
	  a char *.

	* build.c (mkwraps_cb): use popen() rather than
	  system() to run "mkwrap" command, and put the
	  error messages in the dialog window.

	* popups.c (hosts_cb): build host map when hosts
	  button is pressed, so hosts get displayed before
	  execution starts.

Fri Oct 18 16:09:48 1991  Keith Moore  (moore at wilma)

	* trace.c (trace_event): recognize START and FINISH
	  events, and reset host map when these occur.

	* xbm/genhost.xbm: invert bitmap so that it looks
	  right on the screen.

	* build.c: added "make install" button.

	* hostmap.c, hostmap.h, popups.c: added Reed's
	  modifications of my modifications of Bob's code
	  to do a map of executing hosts.

Thu Oct 17 00:46:54 1991  Keith Moore  (moore at wilma)

	* build.c: added "make" and "make clean" buttons.

	* build.c (mkmf_cb) : additional support for
	  FORTRAN node programs in generated Makefiles.

	* unparse.h: fix bugs in declaration of function
	  prototypes on non-ANSI-C compilers.

	* xdraw.c (was xdrawing.c): renamed functions
	  to be of the form xdraw_XXX.  Added functions
	  to draw icons.

	* xdraw.h: function prototypes for xdraw.c

	* hostmap.c: new file with functions to draw a
	  pseudo-map of the hosts while tracing.

	* hostmap.h: function prototypes for hostmap.c

Fri Oct 11 13:20:51 1991  Keith Moore  (moore at wilma)

	* build.c (mkmf_cb): add SHELL=/bin/sh to generated
	  Makefile for SysV compatibility.

Wed Oct  9 17:34:27 1991  Keith Moore  (moore at wilma)

	* build.c (mkmf_cb): use locally-defined X resources
	  for the locations of various files and directories
	  used in the generated Makefile.

	* xsetup.c: add some additional resource definitions
	  (with fallbacks) for Makefile generation

	* comn.h: define global variables for the newly-defined
	  X resources.

	* ../mkwrap/wrap.y: generate filenames like
	  cw_XXX.c instead of w_XXX.c, to be compatible
	  with Bob's Makefile generator.

	* parse.y (const: fconst): make floating point
	  constants TYPE_DOUBLE instead of TYPE_FLOAT.
	  This because we are passing a pointer to a
	  double instead of a pointer to a float, on calls
	  to expr_Const().

	* parse.y (fconst: TK_FLOAT): declare atod() to return
	  a double, in case system include files fail to do this.

	* unparse.c (unparse_input_decl): if parameter
	  type is TYPE_ARRAY, look at the array struct
	  to determine the proper type.

Tue Oct  8 19:34:08 1991  Keith Moore  (moore at wilma)

	* compose.c (cre_cmdpanel): fix translations on radio
	  buttons so that a second press on an already selected
	  button doesn't toggle the button appearance again.

	* build.c (mkwraps_cb): hack to call "mkwrap" command
	  via system() until we get the wrapper generation
	  code integrated.

Mon Oct  7 00:13:25 1991  Keith Moore  (moore at wilma)

	* costmat.c (checkgraphcost): rewrite to fit new HeNCE
	  data structures (from dagtool code).

	* execute.c (do_execute): resurrect Bob's old dagtool
	  execute code and adapt for HeNCE.

	* compose.c (compose_move_arc): was re-drawing the old arc
	  instead of drawing the new one.

	* critic.c (checkForCycles): be sure to return 0 if no cycles
	  were detected.

	* parse.y (parse_ResetLexer):
	  New function to reset lexical analyzer back to initial state.
	  Called each time parse_Node or parse_Program is called.

	* compose.c (compose_edit_node):

	  - offer to re-edit the node program while the node program fails
	    to parse without errors.

	  - Don't pass temp file name on call to parse_Node ().

	  - if node parse is successful, set node state to ST_NOT_BEGUN.

	* compose.c (cleanup_cb): don't cleanup graph
	  if it has a loop.  (as determined by gr_HasCycles)

Sun Oct  6 23:23:31 1991  Keith Moore  (moore at wilma)

	* xsetup.c (xsetup): add call to msg_SetWriteFunction()

