anchor.diff:      Print(" Subgroup generators : ", sgens, "\n");
     fi;
     
  -  # If option "outfile" is set then we only want to produce an ACE input file
  -  optval := ValueOption("outfile");
  -  if optval<>fail and IsString(optval) then
  -    infile := optval;
  -  else
  -    infile := ACEinfo.infile;
  -  fi;
  -
     GetOptionValue := function(defaultvalue, list)
       # Check among options (a CALL_ACE variable defined above) for any 
       # settings of the known option synonyms in list. The latest such
  
positive.code:   #options := [3, [""]],
    oo   := [2, IsInt],       # "oo" and "order" are synonyms
    order := [2, IsInt],
    outfile := [7, IsString], # This is a GAP4-introduced
                              # option (not an ACE option)
    #parameters := [3, [""]], # decommissioned ACE option
    path := [4, [0,1]],
    pmode := [4, [0..3]],
    psize := [4, x -> IsZero(x) or 
                     (IsEvenInt(x) and IsPrimePowerInt(x))],
    #sr := [2, [0,1]],
    #print := [2, x -> (IsList(x) and Length(x) <= 3 and
    #                  ForAll(x, IsInt)) or IsInt(x)],
  
negative.code: ##    "tmpdir"  . . the path to the temporary directory for ACE i/o files
  ##    "infile"  . . the path of the ACE input file
  ##    "outfile" . . the path of the ACE output file
  ##    "banner"  . . the path to the file where ACE's banner is directed
  ##    "version" . . the version of the current ACE binary
  ##    "scratch" . . a field for storing temporary data
  ##
  ACEinfo := rec( binary := Filename(DirectoriesPackagePrograms("ace"), "ace"),
                  tmpdir := DirectoryTemporary()
                ); # to store file and directory names
  ACEinfo.infile  := Filename(ACEinfo.tmpdir,"in");
  ACEinfo.outfile := Filename(ACEinfo.tmpdir,"out");
  ACEinfo.banner := Filename(ACEinfo.tmpdir,"banner");
  
  PrintTo(ACEinfo.infile, "\n");
  # Fire up ACE with a null input (ACEinfo.infile contains only a "\n")
  # ... to generate a banner (which has ACE's current version)
  Exec( Concatenation("cd ", Filename(ACEinfo.tmpdir, ""), "; ",
                      ACEinfo.binary, " < in > banner") );
  # For now use ACEinfo.scratch to record an input stream
  ACEinfo.scratch := InputTextFile(ACEinfo.banner);
  # Grab the first line of banner, which begins like: "ACE N.nnn   "
  ACEinfo.version := ReadLine(ACEinfo.scratch);
  CloseStream(ACEinfo.scratch);
  # We just want the N.nnn part of the first line of banner
  # ... ACEinfo.scratch now records where N.nnn starts
  ACEinfo.scratch := PositionSublist(ACEinfo.version, "ACE") + 4;
  ACEinfo.version := ACEinfo.version{[ACEinfo.scratch ..
                                      Position(ACEinfo.version, ' ', 
                                               ACEinfo.scratch) - 1]};
  
  #############################################################################
  ####
  