Record of Report of WildLIFE from version 1.02
Started 7/31/2019 6:30pm CT
Working in Ubuntu 18.04 Linux

Created WildLIFE-4.01 Directory
Created WildLIFE-4.01 Subdirectory
Copied Life-1.02.tar.gz into Subdirectory
Unpacked to Life-1.02 Subdirectory
Rnamed it to WildLIFE-4.01
Unpacked Life-1.02.tar.gz again
chmod -R u-w Life-1.02
Copy Life-2.33 to WildLIFE-4.01/WildLIFE-4.01
Unpacked to Life-2.33 Subdirectory
chmod -R u-w Life-2.33

I worked my way through the source file by file from 1.02 using the Makefie.
I use option "111" of ./ee - it delete all ".o" files.
I believe dependencies not correct in my Makefile - this assures everything compiled.
My computer so fast it seems not worth while to fix Makefile.

For each ".c" file
I added

#ifdef REV401PLUS
#include "defs.h"
// These are all ".h" files from my version 2.33
// A lot of work had went into trying to make these correct
#endif

#ifdef REV102
.... whatever includes were there already.
also in many cases global declarations. - I was not so careful
I think compiler would tell of any conflicting declarations.
#endif

Also - I am not using "configure".
My code is hoped to work on any 64 bit Linux or cygwin without "configure."
I copied Makefile in WildLIFE-4.01 to Makefile.orig (to make sure saved)
I copied Makefile from 2.33 Source directory to 4.01 Source directory
Also "ee" and "ee?"
Also copied defs.h, def_const.h, def_glob.h, def_macro.h, def_proto.h, def_struct.h

Made ee writable and added Port.txt
Copied mk.sh & made writable.
Added "./" before Try in Makefile in regexp

The following fields were changed mainly to make searching easier.
The compiler would give errors if the changes were made incorrectly.

Also in goal
a was changed to aaaa_1
b was changed to bbbb_1
c was changed to cccc_1

Also in pair_list
a was changed to aaaa_2
b was changed to bbbb_2

Also in stack
a was changed to aaaa_3
b was changed to bbbb_3

Also in triple_list
a was changed to aaaa_4
b was changed to bbbb_4
c was changed to cccc_4

Also in int_list value was changed to value_1

Also in residuation value was changed to value_2

Also in psi_term value was changed to value_3



The following defines replace enums:
#define   undef_it 1
#define   predicate_it 2
#define   function_it 3
#define   type_it 4
#define   global_it 5
#define   block_it 6

These had been an enumeration in 1.02 - now they an integer defines.
They are sometimes cast to a pointer. (def_type)
Also field "type" in "definition" structure was changed to "type_def"

Where I worked we did not use enumerations.
And it is used as pointer - I did not feel compfortable with enum as pointer.
My defines are cast with (def_type) to pointers when compared

changed "true" & "false" to "lf_true" and "lf_false" (avoiding possible conflicts)

Added following -- seems I eliminated these in 233

#define Infoline   if (NOTQUIET) infoline
#define Warningline if (warningflag) warningline

#ifndef NOTRACE
#define Traceline  if (trace) traceline
#else
#define Traceline  if (0) traceline
#endif

Im memory statistics (and some othee places) added "l" in format strings (for longs)

ptr_psi_term quotedStackCopy(ptr_psi_term p); // Reverted - ptr back in arg REV401PLUS - it was wrong in 2.33 

changed char *arg_v[ARGNN]; // Modified DJD in built_ins.c

following defines used to indicate comparison function rather than
passing function pointer which is difficult when function parameters differ.

#define STRCMP  1L 
#define INTCMP  2L
#define FEATCMP 3L

in ptr_node general_insert(comp,keystr,tree,info,heapflag,copystr,bkflag)
used
      // revised logic not using function pointer
      if (comp == INTCMP) cmp=intcmp((long)keystr,(long)(*tree)->key); // REV401PLUS cast
      else if (comp == STRCMP) cmp=strcmp(keystr,(*tree)->key);
      else if (comp == FEATCMP) cmp=featcmp(keystr,(*tree)->key);

and in ptr_node find(comp,keystr,tree)
      // revised logic not using function pointer
      if (comp == INTCMP) cmp=intcmp((long)keystr,(long)((struct wl_node *)tree)->key);
      else if (comp == STRCMP) cmp=strcmp((char *)keystr,(char *)((struct wl_node *)tree)->key);
      else if (comp == FEATCMP) cmp=featcmp(keystr,((struct wl_node *)tree)->key);

Replace DEFRULES with (ptr_psi_term)DEFRULES

change several locals from "eval" to "eval_2" because of conflict with a define

true & false changed to lf_true & lf_false

Used error.c from 2.33 - it is much work to change from varags.h to stdarg.h

Used sys.c from 2.33 - wanted to at least skip till later - types of changes were different.

I #ifdef'd out raw.c - and attempted nothing with the x-windows code - yet anyway.

Copied a bit of argument code from 2.33 for lib.c & life.c

Also, I added many casts - I tried to note all with "// REV3401PLUS cast"
Similar for other changes - I did not comment the field aaaa_1, ..., value_1, ...changes however or type_def, (def_type) or ..._it changes, however.'
They all follow the same pattern.

After 1st clean compile got segmentation fault.

Added

#define dennis_debug(str) printf ("This is line %d of file \"%s\" in function \"%s\" str = %s.\n",	__LINE__, __FILE__,__FUNCTION__,str);

And tracked problem down.

I had missed ckanging true & false to lf_true & lf_false in 1 file (built_ins.c I think).

I have had no more run time errors.

I copied Test Suite from 2.33 to new place - separate.

It runs wild_life in my path (new one).
Some results match exactly.
Most do not - but differences seem mostly white space.
Reponses are coming back on one line instead of multiple lines.
One test seemed stuck - removed it for now.

I will try removing white space in test suite.

after removing whitespace
84 match perfectly
310 out differ
42 err differ

Noticed indent level seemed sometimes to increment by sizeof long instead of 1

Added paren around level+1 in login.c
then 
161 match perfectly
225 out differ
42 err differ

Thought quotedStacCopy might be wrong - had made a change.
On investigation - it is not used - #if'd it out.

I #ifdef's out any remaining externs - they all should be in headers.
Made no difference.

Started going through .c files putting back initializations of globals.
After list.c - switching header (thare had not been any compiler errors)
got:

echo 406 Total Tests completed
echo 162 Total Tests match
echo 244 Total Tests differ
echo 224 Total Tests out differ
echo 41 Total Tests err differ

After completing moving initializations:
echo 406 Total Tests completed
echo 379 Total Tests match
echo 27 Total Tests differ
echo 4 Total Tests out differ
echo 25 Total Tests err differ

Systematically going through all files for which there are .o files.
Removing "dead" code & checking fo anything missed.

Discovered missing initializations in error.c
After fixing:

echo 406 Total Tests completed
echo 392 Total Tests match
echo 14 Total Tests differ
echo 4 Total Tests out differ
echo 12 Total Tests err differ

Completed going through files.
Found a few more missing initializations - but they did not affect tests.

Added back the test that was getting stuck - it now passed.

Results now:

echo 407 Total Tests completed
echo 393 Total Tests match
echo 14 Total Tests differ
echo 4 Total Tests out differ
echo 12 Total Tests err differ

Examined output some
Added "END Abort" message in built_ins.c in long abort_life(nlflag)
Then have:

echo 407 Total Tests completed
echo 401 Total Tests match
echo 6 Total Tests differ
echo 4 Total Tests out differ
echo 4 Total Tests err differ

Examined these cases.

1 -- condpred -- refout file missing -- checked - also missing in 1.02
2 -- dupfeat  -- 4.01 gives line number error is near -- reference does not
3 -- eoftest2 -- out differ in ">" - err - 4.01 gives syntax error'
4 -- eoftest  -- out different -- err - dfferent errors
5 -- testslc  -- out differ -- Files may be missing -- think this superlint?
6 -- testsl   -- get slightly different warning messages -- another superlint?

I should go over sys.c - I am still using 2.33 version.
I see little reason to study error.c - I worked it over a lot before.

Not really using arity.c or raw.x or xpred.c or xdisplaylist.c currently.

