
Anomaly Report:  Genifer 3.0 Templates for Clipper Summer '87

---[1]--------------------------------------------------------------------

PROBLEM:  After packing databases, the application crashes (or just
locks up).

COMMENT:  This was corrected in the Release B templates.  It has
also been incorporated if your PLINK86.GTL file is marked Release A1.

FIX:  Two changes must be made in the file PLINK86.GTL.  First, insert
the indicated two lines of code:

FILE {_main_menu}.OBJ,
<< for all menu-programs >>
  << if .not. [program is-main-menu?] >>
     {[program name]}.OBJ,
  << endif >>
<< endfor >>
     G_COLORS.OBJ,              <=== insert
     G_CHECKF.OBJ,              <=== insert
     G_UDF.OBJ,
     G_WINDOW.OBJ

Then delete two similar lines which appear immediately below:

BEGIN
<< for all programs >>
  << if .not. [program type] = "M" >>
  SECTION FILE {[program name]}.OBJ
  << endif >>
<< endfor >>
  SECTION FILE G_COLORS.OBJ     <=== delete
  SECTION FILE G_CHECKF.OBJ     <=== delete
END  

--------------------------------------------------------------------------


Anomaly Report:  Genifer 3.0 Templates for Clipper Summer '87

---[2]-------------------------------------------------------------------

PROBLEM:  After linking with PLink86, the F4 key does not invoke the
color selector.

COMMENT:  This was corrected in the Release B templates.

FIX:  Same as in #1 above.

--------------------------------------------------------------------------


Anomaly Report:  Genifer 3.0 Templates for Clipper Summer '87

---[3]--------------------------------------------------------------------

PROBLEM:  Your application crashes with the message "Undefined
Identifier" in the function UseError().

COMMENT:  This was corrected in the Release B templates.

FIX:  In the function UseError in G_UDF.PRG, change:

  parameters dbf_name

to:

  parameters dbfname

--------------------------------------------------------------------------


Anomaly Report:  Genifer 3.0 Templates for Clipper Summer '87

---[4]--------------------------------------------------------------------

PROBLEM:  Scrolling windows do not redisplay after the filter is turned
on.

COMMENT:  This was corrected in the Release B templates.

FIX:  Locate the function Filter in GENMNT.GTL and GENINQ.GTL and add
the indicated three lines of code:

    do Load{[program identifier]}
  << if _Scrolling >>                             <===
    win_redraw[WindowNo()] = .T.                  <===
  << endif >>                                     <===
    do PaintRec{[program identififer]} with .F.

  enddo && while setting

return  
  
--------------------------------------------------------------------------


Anomaly Report:  Genifer 3.0 Templates for Clipper Summer '87

---[5]--------------------------------------------------------------------

PROBLEM:  Scrolling windows do not redisplay after a Retrieve.

COMMENT:  This was corrected in the Release B templates.

FIX:  Locate the function Retrieve in GENMNT.GTL and GENINQ.GTL and add
the indicated three lines of code:

  if lastkey() <> K_Esc
  << if _Scrolling >>                             <===
    win_redraw[WindowNo()] = .T.                  <===
  << endif >>                                     <===
    select 0

--------------------------------------------------------------------------


Anomaly Report:  Genifer 3.0 Templates for Clipper Summer '87

---[6]--------------------------------------------------------------------

PROBLEM:  The application refuses to let more than one network user at a
time access a database file.

COMMENT:  One or more of the users does not have a workstation ID, which
is needed by the Clipper NETNAME() function.  In the Release B templates,
the NETNAME() function is not used.

FIX:  In the file G_SETUP.PRG, change:

  set exclusive (.not. empty(netname()))

to:

  set exclusive off

Then regenerate your main menu program, and recompile.

--------------------------------------------------------------------------


Anomaly Report:  Genifer 3.0 Templates for Clipper Summer '87

---[7]--------------------------------------------------------------------

PROBLEM:  The application crashes when you attempt to validate a numeric
or date field against another file.

COMMENT:  This was corrected in the Release B templates.

FIX:  First, rewrite the function Val_File(), in G_UDF.PRG, as follows:

  parameters value, val_table, val_field, udf_name, val_len, val_dec
  private old_area, is_valid, dummy, fieldtype
  old_area = select()
  select (select(val_table))
  fieldtype = type("value")
  do case
    case fieldtype = "D"
      value = str(year(value),4) + str(month(value),2) + str(day(value),2)
    case fieldtype = "N"
      value = str(value, val_len, val_dec)
  endcase
  seek value
  is_valid = found()
  if .not. is_valid
    if eof()
      go top
    endif
    * call the specified function (usually LIST)
    dummy = &udf_name
    if lastkey() = K_Esc
      * abort data entry
      keyboard chr(K_Esc)
    else
      * stuff the keyboard buffer with the selected value
      do case
        case fieldtype = "C"
          keyboard chr(K_Ctrl_Y) + &val_field
        case fieldtype = "N"
          keyboard chr(K_Ctrl_Y) + str(&val_field, val_len, val_dec)
        case fieldtype = "D"
          keyboard chr(K_Ctrl_Y) + dtoc(&val_field)
      endcase
    endif
  endif
  select (old_area)

return is_valid

---[ continued ]----------------------------------------------------------


Anomaly Report:  Genifer 3.0 Templates for Clipper Summer '87

---[ continued ]----------------------------------------------------------

Second, in the procedure InputRec, in GENMNT.GTL, change:

                ..."List{[program identifier]}('{[field val-alias]}')") ;
            << case [field val-type] = "L" >>

to:
                ..."List{[program identifier]}('{[field val-alias]}')",
                ...{[field #length]},{[field #decimals]}) ;
            << case [field val-type] = "L" >>

--------------------------------------------------------------------------


Anomaly Report:  Genifer 3.0 Templates for Clipper Summer '87

---[8]--------------------------------------------------------------------

PROBLEM:  When you use TLink as your linker, it fails to link.

COMMENT:  This was corrected in the Release B templates.

FIX:  In the file TLINK.GTL, change:

<< set output to "GENLINK.LNK" >>
{_main_menu}.OBJ +

to:

<< set output to "GENLINK.LNK" >>
...{_main_menu}.OBJ +

COMMENT:  It is also necessary to copy CLIPPER.LIB and EXTEND.LIB into
your output directory, since TLink will not look outside of the current
directory for .LIB files.  This fact was inadvertantly omitted from the
template documentation.

--------------------------------------------------------------------------


Anomaly Report:  Genifer 3.0 Templates for Clipper Summer '87

---[9]--------------------------------------------------------------------

PROBLEM:  If you delete all the zoom records for a particular primary
record, the maintenance program sometimes takes you to a non-related
record instead of bouncing you back to the primary database.

COMMENT:  This was corrected in the Release B templates.

FIX:  Insert the indicated lines of code in the procedure Go_Begin, in
GENMNT.GTL:

<< if _Scrolling >>
  win_redraw[WindowNo()] = .T.
<< endif >>
  set softseek off           <===
  do case
<< for all zoom-databases in program >>
    case table = "{[database alias]}"
  << if [database is-primary?] >>
      go top
  << else >>
      seek link_value[{j}]
  << endif >>
<< endfor >>
  endcase
  set softseek on            <===

--------------------------------------------------------------------------


Anomaly Report:  Genifer 3.0 Templates for Clipper Summer '87

---[10]-------------------------------------------------------------------

PROBLEM:  In Scrolling windows, variables don't always display the
correct values.

COMMENT:  This was corrected in the Release B templates.

FIX:  In the procedure UnPaint, in both GENMNT.GTL and GENINQ.GTL,
insert the indicated lines:

      << for all fields >>
        << if [field is-memory-variable?] >>            <===
      store {[field default-value]} to {[field name]}   <===
        << endif >>                                     <===
        << if [field is-display?] >>
      @ row_no,{[field #column]} say

--------------------------------------------------------------------------


Anomaly Report:  Genifer 3.0 Templates for Clipper Summer '87

---[11]-------------------------------------------------------------------

PROBLEM:  When the "Save Record?" prompt appears while adding new records,
the application displays the last record in the database instead of the
record you have just entered.

COMMENT:  This problem was introduced in the Release B templates.  It is
essentially cosmetic, and doesn't affect the integrity of the data.

COMMENT:  This was corrected in the Release C templates.

FIX:  In the function InputRec(), in GENMNT.GTL, change:

    if .not. aborted
      do PaintRec{[program identifier]} with .T.
      if lastkey = K_PgUp

to:

    if .not. aborted
      PaintSay{[program identifier]}(.T.)
      if lastkey = K_PgUp

--------------------------------------------------------------------------


Anomaly Report:  Genifer 3.0 Templates for Clipper Summer '87

---[12]-------------------------------------------------------------------

PROBLEM:  If you call a report from a sub-menu, the windows are not
properly closed after you exit the report and return to the main menu.

COMMENT:  This was corrected in the Release C templates.

FIX:  Remove the indicated code in the procedure Print in GENREP.GTL and
GENLABEL.GTL:

  set console on
  go record_no
  do PaintWin{[program identifier]} with .T.     <===

return

--------------------------------------------------------------------------


Anomaly Report:  Genifer 3.0 Templates for Clipper Summer '87

---[13]-------------------------------------------------------------------

PROBLEM:  The application allows you to add duplicate records if you are
adding while the filter is on.

COMMENT:  This was corrected in the Release D templates.

FIX:  In the procedure InputRec, in GENMNT.GTL, insert the indicated
code:

    * check for duplicate key value
    do case
<< for all zoom-databases in program >>
      case table = "{[database alias]}"
  << if [database is-duplicate-allowed?] >>
        select {[database alias]}
        duplicate = .N.
  << else >>
        key_value = {[database ndx-expression]}
        select {[database alias]}
        filter_str = dbfilter()                        <===
        set filter to                                  <===
    << if [database is-primary?] .and. [database #indexes] > 1 >>
        set order to 1
    << endif >>
        seek key_value
        if input_mode = "Modify"
          duplicate = found() .and. (recno() <> record_no)
        else
          duplicate = found()
        endif
        if filter_on[{j}]                              <===
          set filter to &filter_str                    <===
        endif                                          <===
    << if [database is-primary?] .and. [database #indexes] > 1 >>
        set order to ndx_order
    << endif >>
  << endif >>
<< endfor all zoom-databases >>

Make a second insertion near the end of that same function:

  if record_no > 0 .and. record_no <= reccount()
    go record_no
    if filter_on[select()] .and. .not. &(dbfilter())   <===
      * cancel the filter                              <===
      set filter to                                    <===
      filter_on[select()] = .F.                        <===
      Warning("Filter cancelled")                      <===
    endif                                              <===
  endif

return

--------------------------------------------------------------------------


Anomaly Report:  Genifer 3.0 Templates for Clipper Summer '87

---[14]-------------------------------------------------------------------

PROBLEM:  The cascading modify features does not update link fields on
the third zoom level in some applications

COMMENT:  This was corrected in the Release D templates.

FIX:  In the procedure Z_Modify(), in GENMNT.GTL, insert the indicated
code:

  private new_link
  do Load{[program identifier]}               <===

<< for all zoom-databases in program >>
  << if [database is-child?] >>
  if table = "{[database lnk-alias]}"
    select 0                                  <===
    new_link = {[database lnk-expression]}

--------------------------------------------------------------------------


Anomaly Report:  Genifer 3.0 Templates for Clipper Summer '87

---[15]-------------------------------------------------------------------

PROBLEM:  When you validate a one-character field against a List, the
pick list doesn't behave properly.

COMMENT:  This is due to an anomaly in the Clipper ACHOICE() function.
However, the pick list isn't really appropriate for one-character
character fields anyway.  Instead of validating against a List, validate
against an Expression.

If your field is called FIELD1 and the allowable values are A, B, and C,
the proper expression would be:

                             FIELD1 $ "ABC"

--------------------------------------------------------------------------


Anomaly Report:  Genifer 3.0 Templates for Clipper Summer '87

---[16]-------------------------------------------------------------------

PROBLEM:  If the application fails to link properly, no message (or an
erroreous message) appears to indicate this.

FIX:  In the files BLINKER.GTL, PLINK86.GTL and TLINK.GTL, change:

if errorlevel 1 goto END

to:

if errorlevel 1 goto LINK_ERR

--------------------------------------------------------------------------


Anomaly Report:  Genifer 3.0 Templates for Clipper Summer '87

---[17]-------------------------------------------------------------------

PROBLEM:  When you validate a field against a list, the application
refuses to accept any value.

FIX:  In the function InList(), in G_UDF.PRG, change:

return ("," + string_ + "," $ "," + str_list_ + "+")

to:

return ("," + string_ + "," $ "," + str_list_ + ",")

--------------------------------------------------------------------------


Anomaly Report:  Genifer 3.0 Templates for Clipper Summer '87

---[18]-------------------------------------------------------------------

PROBLEM:  If you place a scrolling field (i.e., one using the "@S"
picture function) in a scrolling window, the field doesn't display
properly.

COMMENT:  This is due to an anomaly in Clipper Summer '87; the "@S"
picture is treated differently in SAY commands and GET commands.

FIX:  In the procedure UnPaint(), in GENMNT.GTL and GENINQ.GTL, change:

  parameters row_no
  setcolor(clr_window)
  do case
      .
      .
      .
      @ row_no,{[field #column]} say
      .
      .
      .
  endcase

to:

  parameters row_no
  setcolor(clr_get)
  do case
      .
      .
      .
      @ row_no,{[field #column]} get
      .
      .
      .
  endcase
  clear gets
  setcolor(clr_window)

--------------------------------------------------------------------------


Anomaly Report:  Genifer 3.0 Templates for Clipper Summer '87

---[19]-------------------------------------------------------------------

PROBLEM:  When you Zoom from a scrolling window to another window, and
then Quit back out, the scrolling window isn't restored exactly as it
was before.

COMMENT:  This is a cosmetic problem and doesn't affect data integrity.

FIX:  In the procedure Zoom_In, in GENMNT.GTL and GENINQ.GTL, change:

  if .not. eof()
    do Go_Begin{[program identifier]}
  endif
  if change_win
    do FirstWin{[program identifier]}
  endif

to:

  if change_win
    do FirstWin{[program identifier]}
  endif
  if .not. eof()
    do Go_Begin{[program identifier]}
  endif


In the procedure Zoom_Out, change:

  if change_win
    unlock        <===  this line appears in GENMNT.GTL but not GENINQ.GTL
    do FirstWin{[program identifier]}
    do PaintTxt{[program identifier]}
  endif

to:

  if change_win
    unlock        <===  this line appears in GENMNT.GTL but not GENINQ.GTL
    do PaintTxt{[program identifier]}
    do FirstWin{[program identifier]}
  endif

--------------------------------------------------------------------------


Anomaly Report:  Genifer 3.0 Templates for Clipper Summer '87

---[20]-------------------------------------------------------------------

PROBLEM:  When you change index Order within a report program, the
Retreive option doesn't prompt you for the correct fields.

FIX:  In the procedure Retreive, in GENREP.GTL and GENLABEL.GTL, add
the indicated line:

  private record_no, search_val
  ndx_expr = lower(indexkey(ndx_order))
  Blank()
  do PaintTxt{[program identifier]}

--------------------------------------------------------------------------


Anomaly Report:  Genifer 3.0 Templates for Clipper Summer '87

---[21]-------------------------------------------------------------------

PROBLEM:  If you put lookup fields in a label, the application crashes
when you try to run the report.

FIX:  In the procedure Print, in GENLABEL.GTL, change:

  newline = newline + trim(transform({[field name]}, '{[field picture]}'))

to:

  newline = newline + ;
     trim(transform({[field alias]}->{[field name]}, '{[field picture]}'))

--------------------------------------------------------------------------

