GENSCRNX VERSION UPDATE LOG



                                 2.0
                                ------


New:  Modifications for GENSCRNX to be fully compatible with FoxPro 2.6.

New:  wordsearch() is a function used by GENSCRNX drivers to locate a
      directive setting in a memo field or character string.

      FUNCTION wordsearch
      PARAMETERS find_str,searchfld,ignoreword,returnmline,occurances

      wordsearch(<expC1> [, <expL1|expC2>] [, <expL2>] [, <expL3|expN1>] [, <expN2>)

      <expC1>
      The character expression that is searched for.

      <expL1> | <expC2>
      The name of the memo field snippet to search of the current record.
      If <expL1> is .F., the COMMENT memo field searched.
      If <expL1> is .T., the SETUPCODE memo field searched.
      If <expC2> is passed instead of <expL1>, the memo field <expC2>
      memo field searched.  If <expC2> represents a character string instead of
      a memo field, include the m. alias with the variable name.
     
      <expL2>
      Flag for search match whole word setting.
      If <expL1> is .F., search uses match words.
      If <expL1> is .T., search does not use match words.

      <expL3> | <expN1>
      Option for returning directive text position and length.
      If <expL3> is .F., the wordsearch returns normal word search character
      value.
      If <expN1> is included, <expN1> must be passed by reference using the @
      symbol before the variable name to force wordsearch() to set the variable
      to the string lenth upon return.

      <expN2>
      Occurance number of expression that is searched for.
      If <expN2> is included, wordsearch() updates the <expN2>th occurrence of
      <expC1>.  If <expN> is ommitted, wordsearch() updates the first
      occurrence of <expC1>.  If <expN2> is 0, wordsearch() updates the last
      occurances of <expC1>. If <expN2> is less than 0, wordsearch() will be
      forced to not find a match.
     
      Example:
      m.str=wordsearch('*:3D')
      The string m.str would contain CHR(0) if '*:3D' was not found in
      the COMMENT snippet of the current record.
      The string m.str would contain the characters following *:3D if
      '*:3D' was found.  If the line contained '*:3D INSET', then
      m.str would contain 'INSET'.

      Example:
      m.str=wordsearch('#INSERT','VALID')
      The string m.str would contain CHR(0) if '#INSERT' was not found in
      the Valid snippet of the current record.
      The string m.str would contain the characters following #INSERT if
      '#INSERT' was found.  If the line contained '#INSERT BEEP.PRG', then
      m.str would contain 'BEEP.PRG'.

New:  wordstuff() function in GENSCRNX allows directives to be inserted,
      updated, and removed from a memo field or character string.

      FUNCTION wordstuff
      PARAMETERS stuff_str,insflag,insbefore,searchfld,occurances

      wordstuff(<expC1> [, <expL1>] [, <expL2>] [, <expL3|expC2>] [, <expN>])

      <expC1>
      The character expression of the directive to be updated.

      <expL1>
      Flag for removing or inserting directive line.
      If <expL1> is .F., the first <expC1> directive line is removed.
      If <expL1> is .T., the <expC2> directive is inserted or updated.

      <expL2>
      Flag for inserting before or appending new directive if required.
      If <expL2> is .F., any new line will be appended at the end.
      If <expL2> is .T., any new line will be inserted at the beginning.

      <expL3> | <expC2>
      The name of the memo field snippet to search of the current record.
      If <expL3> is .F., the COMMENT memo field searched.
      If <expL3> is .T., the SETUPCODE memo field searched.
      If <expC2> is passed instead of <expL3>, the memo field <expC2>
      memo field searched.  If <expC2> represents a  character string instead 
      of a memo field, include the m. alias with the variable name.
     
      <expN>
      Occurance number of the directive to be updated.
      If <expN> is included, wordstuff() updates the <expN>th occurrence of
      <expC1>.  If <expN> is ommitted, wordstuff() updates the first
      occurrence of <expC1>.  If <expN> is 0, wordstuff() updates the last
      occurances of <expC1>.  If <expN> is less than 0 and <expL1> is .T.,
      wordstuff() will be forced to not find a match and a new directive
      line will be created based on <expL2>.
     
      Example:
      =wordsearch('*:3D RAISED',.T.)
      The string '*:3D RAISED' will be inserted into the Comment snippet.
      If the Comment snippet already contained a *:3D <expC> directive, the
      new *:3D RAISED directive will replace the old setting.
      
      Example:
      =wordsearch('*:3D')
      The first *:3D directive line found will be removed.

      Example:
      =wordsearch('*:IF m.flag',.T.,.T.)
      The string '*:IF m.flag' will be inserted into the Comment snippet.
      If the Comment snippet already contained a *:IF <expL> directive, the
      new *:IF m.flag directive will replace the old setting.  If the Comment
      snippet did not contain a *:IF <expL> directive, the *:IF m.flag will be
      inserted at the beginning of the Comment snippet based on the 3rd
      parameter equal to .T.

New:  *:BUTTON <function>
      Adds invisible button with a Valid snippet that calls the function
      specified.  The () after the function name are only required if
      parameters are passed.  In the Windows platform, *:BUTTON supports SAY,
      text, box, and picture objects while in the MS-DOS platform, *:BUTTON
      supports SAY, text, and box objects. 

New:  *:DISABLE <expL>
      Places the following code in the Read Show clause:

      IF <expL>
        SHOW GET <var> DISABLE
      ELSE
        SHOW GET <var> ENABLE
      ENDIF

New   *:ENABLE <expL>
      Places the following code in the Read Show clause:
      IF <expL>
        SHOW GET <var> ENABLE
      ELSE
        SHOW GET <var> DISABLE
      ENDIF
      
      Note: If *:DISABLE <expL1> and *:ENABLE <expL2> exist, then:
      IF <expL1>
        SHOW GET <var> DISABLE
      ENDIF
      IF <expL2>
        SHOW GET <var> ENABLE
      ENDIF

New:  *:VISIBLE <expL>
      Places the following code in the Read Show clause:
      IF <expL>
        SHOW GET <var> ENABLE
      ELSE
        SHOW GET <var> DISABLE
        @ objpos() CLEAR TO objend()
      ENDIF
           
New:  *:AUTORUN SAVE
      New SAVE clause for auto execution of .SPR without closing the .SCX
      in the screen builder.

New:  *:SCREENSET <file>
      Multi-screen set without using project or selecting screens manually
      from the Generate dialog.
      
      Example:
      To build a screen set using the second and third screen as SCX2.SCX and
      SCN3.SCX, place the following in the Setup snippet:
      
      *:SCREENSET SCN2
      *:SCREENSET SCN3

New:  *:SETUPMTHD [<method name>]
      Places code froman object's Comment snippet into Setup snippet after
      #SECTION 2

      Example for placing code after #SECTION 2 from within an object's Comment
      snippet:

      *:SETUPMTHD
      *:METHOD Setup
      WAIT 'This line will go after #SECTION 2' WINDOW NOWAIT
      *:ENDMTHD

      Example for placing code after #SECTION 2 from within an object's Comment
      snippet using specific method name:

      *:SETUPMTHD Test
      *:METHOD Test
      WAIT 'This line will go after #SECTION 2' WINDOW NOWAIT
      *:ENDMTHD

Fix:  *:CLICK works properly for SAY objects.

New:  wordsearch() has been modified to have options for seaching an particular
      word occurance and also for return text position and length as an option.

Fix:  *:INSSCX and *:INSOBJ work properly with *:SCXDRV4 and *:SCXDRV5 drivers.

Fix:  *:IF, *:SIZE, and *:DEFAULT (using if2(), size2(), and default2()) work
      properly withn an *:SCXDRV5 drivers.


New:  *:INSTXT and *:IF used new FoxPro 2.6 directives to avoid having to
      postprocess the generated .SPR file.

New:  GENSCRNX Error Mode displays function call stack.

Fix:  *:PICTURE <.ico list> properly uses FULLPATH() for ,, wildcards.

Fix:  *:OUTFILE defaults to .SPR extension when no extension is included.

Fix:  *:NOSCNOBJ properly defaults when no GET objects exists.

Fix:  MVCO=, MVCOU=, and MVCOUN= are valid for MVCOUNT= in CONFIG.FP/FPW.

Fix:  Fix for preprocessing screen set from project no storing the screen
      names in order.

Fix:  Mac platform FONT=Geneva,10,0 considered default font for *:BASOBJ

Fix:  Mac platform PICUTURE="@3K" considered default picture for *:BASOBJ

Fix:  Mac platform properly creates new FOXSCX.DBF if file name contains
      CHR(32) or CHR(39).

Fix:  trimext() function enhanced to properly process various directory names.


3D driver 2.0:

New:  When using FoxPro 2.6, post processing of .SPR is not required.

Fix:  *:FRAME3D has improved visual appearance based on Microsoft GUI standards.

Fix:  Fix for 3D checkboxes when picture contains a dot ('.') character.


DragDrop driver 2.0:

New:  *:IconTxt <expC>
      (Windows and Mac only)

      Property controlling the default drag icon text below any dragging
      .ICO/.BMP picture using DragIcon.

New:  m.IconTxt  (C)  (w)
      Text below picture of the object being dragged.  m.IconTxt can be set
      to any character sting during a drag event when a .ICO/.BMP picture is
      currently the DragIcon.  Setting m.IconTxt to a null string will restore
      the IconTxt to the default setting.
      Example:
      To change the drag object text below the current DragIcon picture to the
      character string "Name", execute the following during any event:
      m.IconTxt=Name

New:  m.IconTxt0  (C)  (r)
      *:IconTxt setting of the object being dragged.


SPRTOSCX 2.0:

New:  If AutoGenerate parameter is .T., the .SCX was preprocessed by GENSCRNX,
      and the scree was built from within a project, then the project will
      be reopened and built if any changes occur.

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


                                 1.8
                                ------


New:  *:PICTURE <expC>
      Replaces object PICTURE clause with <expC>.  <expC> can be any 
      character expression, including variable names or FoxPro functions.
      Although *:PICTURE was available in version 1.7b, *:PICTURE can also
      be used to create multi-state .BMP/.ICO pictures for check boxes,
      radio buttons, and push buttons (Windows platform only).


      Example:
      To force a tri-state picture check box:
      *:PICTURE erase01.ico,erase02.ico,clear.ico
      
      Example:
      To force a dual-state picture check box without respecifying the
      currently set off mode picture:
      *:PICTURE ,fax2.ico

      Note:
      If the first .BMP/.ICO file name in the comma separated list is left
      out as in the above example, the picture current set by the screen
      builder will be used as the off mode picture.  This way changing the
      off mode picture can be done in the screen builder without having to
      also change in the Comment snippet.

New:  Support for multiple *:FUNCTION/*:ENDFNCT text blocks in the Comment
      snippet.

New:  {{@ <expC> }}
      Retrieve a directive at compile time.  The @ that follows the open
      braces is the command that performs a wordsearch() operation in the
      Comment or Setup snippet searching for the directive specified by
      <expC>.  {{@ <expC> }} can be included in the Comment snippet and the
      file inserted can contain other GENSCRNX directives and also may contain
      any {{<expC>}} expressions to be evaluated.

      Example:
      If the following command was in the Valid snippet of a GET object that
      had a *:IF m.p>5 in the Comment snippet:

      WAIT 'IF: {{@*:IF}}' WINDOW NOWAIT

      then the resulting code in the .SPR would be:

      WAIT 'IF: m.p>5' WINDOW NOWAIT

      Example:
      If the following command was in the Comment snippet of an object:

      {{Button1::@*:IF}}

      then the object would use the *:IF directive specifed in an object
      containing *:DEFOBJ Button1 in the Comment snippet.

      Example:
      If the following command was in the Setup snippet of an object:

      *:SCXDRV5 3D
      *:ALL3D {{MAIN.All3D_Setting::@*:ALL3D}}

      while a library MAIN contains an object called All3D_Setting that
      contained *:ALL3D 4 in the Setup snippet then the 3D driver would
      use a shadow of 4 pixels as the default for all 3D objects.  The
      Setup snippet would result in the following:
      
      *:SCXDRV5 3D
      *:ALL3D 4

      The above technique can be used to control default settings in a
      globally to have muliptle screens use the same directive settings.

New:  *:IGNOREBRACES
      Ignores all {{<expC>}} expressions.  *:IGNOREBRACES cam only be
      declared in the Setup snippet and overrides *:BRACES and *:NOBRACES.


New:  GENSCRNX now contains functions evlstr() AND evlmsg() to support the
      modified evltxt() function.

Fix:  GENSCRNX sets CARRY OFF, DECIMALS TO 9, and NEAR TO OFF and restores
      to original setting when complete.

Fix:  GENSCRNX properly generates #:SECTION 3 code after the GET m.scnend.

Fix:  GENSCRNX properly generates #:SECTION 3 for cross-platform screens.

Fix:  GENSCRNX properly generates a screen from a project when the screen
      does not contain records of the current platform.

Fix:  GENSCRNX properly ignores text that follows *:INSTXT on the same line.

Fix:  GENSCRNX properly process *:INSTXT for two consecutive objects that
      contain the *:INSTXT directive.  This fix will also include cases when
      one object contained a *:INSTXT directive while the next object had
      a 3D effect generated by the 3D driver that used *:INSTXT to insert a
      procedure call to 3DBOX.PRG.

Fix:  DragDrop driver 1.2 can be used with a window of any font.  Versions
      prior to version 1.2 required the window font of MS Sans Serif,8,N.
      
New:  *:FRAME3D [<expC>]

      Specify text using <expC> to be placed in the top left corner of a
      box.  If *:3D is not specified for the box object, *:3D INSET will
      automatically be used.  If the first character of <expC> is an @, the
      following characters will be evaluated at runtime.

      Examples:

      To specify a 3D INSET box will frame text set to "Customer":
      *:FRAME3D Customer

      To specify a 3D RAISED box with frame text set to "Invoice":
      *:3D RAISED
      *:FRAME3D Invoice

      To specify a 3D  INSET box with frame text set to a runtime variable
      called m.myframe1:
      *:FRAME3D @m.myframe1


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


                                 1.7c
                                ------


Fix:  GENSCRNX properly generates screens from project when a screen set
      contains screens from different directories.

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


                                 1.7b
                                ------


New:  *:PICTURE <expC>
      Replaces object PICTURE clause with <expC>.  <expC> can be any 
      character expression, including variable names or FoxPro functions.
      
      Example:
      To force a data driven PICTURE clause for an object using a variable
      called m.mypict, place the following in the Comment snippet:
      *:PICTURE m.mypict
      
New:  *:REFRESH
      Replaces object REFRESH clause with .T..  *:REFRESH will override the
      refresh setting for a SAY object and can also be used to allow a
      picture to be refreshed in the Read Level Show using either SHOW GETS
      or SHOW GETS OFF.
      Note:  Using both *:REFRESH and *:PICTURE <variable name> with a
      picture from file object can allow picture fields to be refreshed at
      runtime.
      
Fix:  GENSCRNX properly executes if SET DELETED is set to ON when
      generating a screen.

Fix:  GENSCRNX enhanced to ensure drivers and preprocessing are executed
      properly from a project.  Previously there were rare cases when the
      3D.PRG driver was not properly adding the 3D effects when building
      from a project.  GENSCRNX 1.7b contains added logic to prevent these
      conditions from re-occuring.

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


                                 1.7a
                                ------


New:  *:CLICK <function>
      Adds invisible button with a When snippet that calls the mouse click
      function specified.  The () after the function name are only required
      if parameters are passed.  In the Windows platform, *:CLICK supports
      text, box, and picture objects while in the MS-DOS platform, *:CLICK
      supports text and box objects. 
      
      Example:
      To have a function called myfnct() exectuted from a mouse click on the
      object, place the following in the Comment snippet:
      *:CLICK myfnct
      
New:  GENSCRNX automatically creates two null invisible button at row,col 0,0
      as the first and last GET in the Screen Layout.  Each screen of a screen
      set will have two null invisible buttons with the name corresponding to the
      screen set.  Since the invisible button's When is set to .F., the objects
      are null objects and have no effect on the generated screen.  The purpose
      of this is to allow generic reference to the first or last GET object in
      any screen of a screen set.  For example in a screen set with one screen,
      the first GET would be m.scnobj1 and the last GET would be m.scnend1.
      Example:
      _CUROBJ=OBJNUM('m.scnobj1')

      Example:  The first GET of the first screen of a screen set would have
      an invisible button at 0,0 called m.scnobj1 while the second screen of a
      screen set would have an invisible button called m.scnobj2.

New:  *:SCNOBJ and *:NOSCNOBJ
      *:SCNOBJ specified in the Setup snippet enables the invisible button
      m.scnobjn above to be generated.  Although it is generated by default,
      *:SCNOBJ can be used to override a SCNOBJ=OFF setting in the
      CONFIG.FP/CONFIG.FPW files.
      *:NOSCNOBJ specified in the Setup snippet disables the invisible button
      m.scnobjn above to be generated.  *:NOSCNOBJ can be used to override a
      SCNOBJ=ON setting in the CONFIG.FP/CONFIG.FPW files.
      *:NOSCNOBJ is automatic when either the #NOREAD directive exists in
      the Setup snippet or no GET objects exist for the screen.

Fix:  GENSCRNX properly handles the *:SIZE and *:NOSIZE directives for EDIT
      objects.

Fix:  GENSCRNX enhanced to ensure drivers are executed properly from a project.
      Previously there were rare cases when the 3D.PRG driver was not properly
      adding the 3D effects when building from a project.  GENSCRNX 1.7a contains
      added logic to prevent these conditions from re-occuring.

Fix:  GENSCRNX functions for updating object snippets like instxt1() and instxt2()
      both act identical now.  Both functions will update the Comment snippet only
      while GENSCRNX handles the updates automatically.  The reason both functions
      where left in even thought they are identical is for backward compatibilty.
      Existing drivers should not have to be updated and this is just knowledge
      base information only.

Fix:  *:BASLIB and *:INCLIB are no longer case-sensitive when referencing a library
      name.

New:  The wordsearch() function has been enhanced for improved performance when
      parsing.  The string being searched must be in column one which means it
      cannot be indented with spaces, tabs, etc.

New:  The updpsr() function has been enhanced for improved performance when
      updating an .SPR file.  The larger the .SPR file generated, the more
      increased performance from previous versions.

New:  The 3D effects driver 1.6 for GENSCRNX (3D.PRG) supports a RAISED clause
      for any object.  Previous versions only supported raised lines and boxes.
      The two ways to obtain raised beveled 3D effects are:
      In the Setup snippet:
      *:SCXDRV5 3D
      *:ALL3D RAISED
      or
      In the Comment snippet of a object to have raised 3D beveling:
      *:3D RAISED

New:  The 3D effects driver 1.6 for GENSCRNX (3D.PRG) will require GENSCRNX 1.7a
      or later.  They will both be available simultaneously.

New:  The 3D effects driver 1.6 for GENSCRNX (3D.PRG) supports the REFRESH clause
      for SAY objects when using *:3D for chisled 3D effects.  If the SAY object
      is not set to refresh mode, the 3D box will overwrite the SAY object when
      the screen is executed.

Fix:  GENSCRNX's thermometer properly displays and refreshs text that has
      a length greater than the thermometer window.  This is only a
      cosmetic fix to prevent leftover characters in the thermometer
      window.


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


                                 1.7
                                ------


New:  GENSCRNX now supports multiple drivers per driver hook number to be
      specified in the CONFIG.FP/CONFIG.FPW files.

New:  *:DRVOFF <file>
      Specified in the Setup snippet to disable any driver setting that is
      specified in the CONFIG.FP/CONFIG.FPW.  The number of *:DRVOFF
      directives specified in the Setup snippet is unlimited and the
      files included are retained for all screens in a screen set.  If
      *:DRVOFF is specifed in the Setup snippet in a screen set, then all
      screens following in that screen set will inherit the *:DRVOFF for
      the specified driver.
      Example:
      If the 3D.PRG is specified in the CONFIG.FPW as _SCXDRV5="3D.PRG",
      for the 3D driver to be executed globally for every screen, then
      specifying *:DRVOFF 3D in the Setup snippet would disable the 3D
      driver for that screen.

New:  GENSCRNX creates comments in the Setup snippet as that include the
      the following information at compile time.
      Example:
      *           This program was preprocessed by GENSCRNX.
      *--GENSCRNX 1.7
      *--Screen    C:\SAMPLE\CUST2.SCX
      *--Project   C:\SAMPLE\SAMPLE.PJX
      *--FOXSCX    C:\FOXPRO25\FOXSCX.DBF
      *--Platform  DOS
      *--Time      08/25/93 20:29:46

New:  *:NOWCLAUSES <clause list>
      Removes a list of clauses from the DEFINE WINDOW command of a screen.
      Any list of clauses can be removed (except COLOR) by listing the name
      of each clause separated by a space delimiter.

      Example:
      Add following line in the Setup snippet to remove all FROM, TO, AT,
      SIZE, FONT, and STYLE clauses will be removed from the DEFINE WINDOW
      command:

      *:NOWCLAUSES FROM TO AT SIZE FONT STYLE

      To directly add any of the removed clauses, use GENSCRN's #WCLAUSES
      directive.
      
      Example:
      Add following lines in the Setup snippet to add a custom
      AT <row,col> SIZE <height,width>:

      *:NOWCLAUSES AT SIZE
      #WCLAUSES AT 1,1 SIZE 10,30

      or

      *:NOWCLAUSES AT SIZE
      #WCLAUSES AT {{VPOS}},{{HPOS}} SIZE {{HEIGHT}},{{WIDTH}}

      Note:  The {{<expC>}} evaluates any expression and replace its result
      as source code.  In the above example, the field names are referencing
      the .SCX header record which contains the screen layout window data.

      Example:
      Add following lines in the Setup snippet to add a custom
      FONT <fontface> STYLE <fontstyle>:

      *:NOWCLAUSES FONT STYLE
      #WCLAUSES FONT m.myfontface STYLE m.myfontstyl
      
New:  wordsearch() function in GENSCRNX now supports any memo field snippet
      of the current record instead of only the Comment and Setup snippets.
      wordsearch() is a function used by GENSCRNX drivers to locate
      directives in any snippet of the current .SCX record.

      wordsearch(<expC1> [, <expL1|expC2>] [, <expL2>])

      <expC1>
      The character expression that's searched for.

      <expL1> | <expC2>
      The name of the memo field snippet to search of the current record.
      If <expL1> is .F., the COMMENT memo field searched.
      If <expL1> is .T., the SETUPCODE memo field searched.
      If <expC2> is passed instead of <expL1>, the memo field <expC2>
      memo field searched.
     
      <expL2>
      If <expL1> is .F., search uses match words.
      If <expL1> is .T., search does not use match words.

      Example:
      m.str=wordsearch('*:3D')
      The string m.str would contain CHR(0) if '*:3D' was not found in
      the COMMENT snippet of the current record.
      The string m.str would contain the characters following *:3D if
      '*:3D' was found.  If the line contained '*:3D INSET', then
      m.str would contain 'INSET'.

      m.str=wordsearch('#INSERT','VALID')
      The string m.str would contain CHR(0) if '#INSERT' was not found in
      the Valid snippet of the current record.
      The string m.str would contain the characters following #INSERT if
      '#INSERT' was found.  If the line contained '#INSERT BEEP.PRG', then
      m.str would contain 'BEEP.PRG'.

Fix:  GENSCRNX forces SET POINT TO '.' throughout the duration of compiling
      and returns SET POINT TO back to its original after completion.  This
      was added for international support when SET POINT TO is not set to its
      default value during development.

Fix:  GENSCRNX forces SET TRBETWEEN OFF throughout the duration of compiling
      and returns SET TRBETWEEN TO back to its original after completion.

Fix:  GENSCRNX properly executes multiple drivers per driver hook number.

Fix:  GENSCRNX properly surpesses same file from being called more than one
      per driver hook number.

Fix:  GENSCRNX properly pre and post processes all screens in a screen set
      containing more than one screen.

Fix:  GENSCRNX properly executes the platform only check box in the
      Generate dialog setting.

Fix:  GENSCRNX properly disables the *:OUTFILE <file> directive when the
      screen is being generated from a project.  Since FoxPro's Project
      Manager internally stores the expected output file specified in the'
      .PJX file, the generated file must match this file name or the
      project will halt building.

Fix:  GENSCRNX properly reads the CONFIG.FP/FPW files when tab characters
      exist.

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


                                 1.6b
                                ------


New:  *:GENSCRNX <file>
      *:GENSCRNX is used to specify which program is used to generate 
      screen code.  *:GENSCRNX overrides any _GENSCRNX in the
      CONFIG.FP/CONFIG.FPW files.  If both *:GENSCRNX and _GENSCRNX are not
      specified, the default setting is GENSCRN.PRG located in FoxPro's
      start-up directory.  *:GENSCRNX can be used to specify a modified
      GENSCRN needed for a particular screen rather than changing _GENSCRN
      before generating a screen.

New:  *:DELOBJ
      Delete screen object at compile time after pre-processing is complete.
      Use *:DELOBJ for objects that need to reside in the .SCX database
      during pre-processing but not in the .SPR file at run-time.

Fix:  The insertion of a file using #:INSERTTOP <file> when one platform
      of source code is generated is placed after the .SPR file comment
      heading rather than before.  This is not a functionality fix, but
      rather a cosmetic fix.

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


                                 1.6a
                                ------


New:  #:INSERTTOP <file>
      Inserts file at top of .SPR code before DO CASE of cross-platform
      block.  If #:INSERTTOP <file> appears more than once due to
      cross-platform snippets containing the same code, the <file> will
      only be inserted into the .SPR once.  This allows header files
      containing #DEFINE directives to be inserted once per .SPR file
      instead of one per platform inside the DO CASE block.

New:  The AUTORUN function can now be set by either adding AUTORUN=ON in
      the CONFIG.FP/CONFIG.FPW file or setting a public variable
       _AUTORUN='ON'.  Placing *:AUTORUN in the Setup snippet overrides
       AUTORUN=OFF in CONFIG.FP/CONFIG.FPW.  Placing *:NOAUTORUN in the
       Setup snippet overrides AUTORUN=ON in CONFIG.FP/CONFIG.FPW.

New:  The *:EVLTXT directive is automatic and is no longer a GENSCRNX
      directive.  Evaluation of any {{<expC>}} command contained in memo
      fields are automatically evaluated.

New:  *:PJXSET
      Place in the Setup snippet before the *:PRG directive or any *:SET
      directive to force the project information to have priority settings
      when building the screen from a project.
      Example:
      If the following was in the Setup snippet of a screen:
      *:SET MODAL ON
      *:PJXSET
      *:SET READCYCLE OFF
      Then if the screen was generated from the Screen Builder, the READ
      would contain the clauses MODAL and CYCLE no matter what the check
      box settings were set to before selecting <Generate>.  If the screen
      was generated from a project, the READ would contain MODAL no matter
      what the settings were set to in the project but the CYCLE setting
      would be set to whatever the project setting was set to.

New:  When using *:BASOBJ and snippet type is different between library
      and screen surface, the procedure snippet is automatically placed
      into the Cleanup snippet as a unique function and the function
      name is added to the expression.

Fix:  *:IF works properly when used with *:INSSCX or *:INSOBJ directives.

Notes:  If #SECTION 1 is in the Setup snippet, then #:INSERT and #:INSERTTOP
        must be placed after the #SECTION 1 statement.

Notes:  If COMPSPR=ON and DISPSPR=ON and an .ERR file is created forcing
        GENSCRNX to display the .SPR and .ERR files, then the window with
        the .SPR file must be closed before re-generating the .SCX when
        SHARE.EXE is loaded to avoid a sharing violation error.

Notes:  GENSCRNX automatically searches the Setup snippet and Comment
        snippets for any *: or {{ characters to determine of the .SCX
        database needs pre-processing.  Therefore, if any {{<expC>}} need
        to be evaluated and are not in the Setup snippet or Comment
        snippets, they may not be evaluated properly.  If the GENSCRNX
        error mode appears or pre-processing is not being performed when
        it needs to be, simply place *: on any line in the Setup snippet
        to force GENSCRNX to pre-process the .SCX database.

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


                                 1.6
                                ------


New:  *:AUTORUN
      Automatically releases screen after generation and executes generated
      file.  *:AUTORUN is automatically disabled if either a compiled file
      is not properly generated or a compile error was detected via the
      COMPSPR=ON.

New:  *:COMPSPR
      Overrides COMPSPR=OFF in CONFIG.FP/CONFIG.FPW.

New:  *:DISPSPR
      Overrides DISPSPR=OFF in CONFIG.FP/CONFIG.FPW.

New:  *:ENDFNCT
      Place at end of code that follows *:FUNCTION to mark ending of text.
      *:ENDTXT is now used with *:INSTXT and is not used with *:FUNCTION.

New:  {{< <file> }}
      Insert a file at compile time.  The < that follows the open braces is
      the command that evaluates the contents of a file and inserts the file
      at that location.  Note:  The inserted file may contain {{ <expC} }}
      to be evaluated.
      
New:  {{ <expC1> :: [<expC2>] [:: <expC3>] }}
      Insert code from a screen or library object.  <expC1> is the
      library.object name just as in *:DEFOBJ, *:BASOBJ, etc.  Note if the
      library name is not included, the object is searched for specified by
      the *:INCLIB and *:BASLIB directives in the Setup snippet.  Also, if a
      matching object is defined via the *:DEFOBJ directive on the surface
      screen, that object will have proirity over any matching library
      objects.  <expC2> is the string to be evaluated.  After the .SCX
      record is matched, any string can be evaluated (ex. 'VALID' to return
      the Valid snippet).  If <expC2> is null, the COMMENT contents will
      be returned.  <expC3> is the option method name.  If <expC3> is
      included, the text block specified by the matching method defined by
      *:METHOD <name> ... *:ENDMTHD is returned.

New:  *:METHOD
      Place at start of code to mark beginning of method code.

New:  *:ENDMTHD
      Place at end of the code that follows *:METHOD to mark ending of
      text.

Notes:  GENSCRNX default behavior does not add * Start of text and * End
        of text messages for the *:INSTXT directive for enhanced
        performance.  To add the commented text (as in version 1.5 and
        earlier) either set OUTTXT=ON in the CONFIG.FP/CONFIG.FPW file or
        set a public variable _OUTTXT='ON'.

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


                                 1.5
                                -----


New:  #:SECTION 3
      Used in Setup snippet (like #SECTION 1 | 2) to insert code after GETs
      and before READ in the Screen Layout.  For an example, refer to
      CUST5.SCX.


New:  *:FUNCTION <function name>
      Used in Comment snippet of object to automatically insert a function
      into the Cleanup snippet.  Function needs to be written just like a
      typical FoxPro UDF except that *:FUNCTION is used instead of FUNCTION.
      GENSCRNX will automatically remove the *: from *:FUNCTION.  Only on
      *:FUNCTION can exist per Comment snippet.


New:  *:ENDTXT
      Place at end of the code that follows *:INSTXT or *:FUNCTION to mark
      ending of text to be inserted.


New:  *:SAVESIZE
      Used with *:DEFOBJs to force the SIZE information to be retrieved from
      the library when the object is based in a screen.  For an example, refer
      to the PHONE object in the MAIN library (LIBMAIN1.SCX).


New:  *:SAVEPICT
      Used with *:DEFOBJs to force the PICTURE information to be retrieved from
      the library when the object is based in a screen.  For an example, refer
      to the CONTROL_BAR_ object in the MAIN library (LIBMAIN1.SCX).
      

New:  *:BASBEFORE
      Used with *:DEFOBJs to force any inherited expressions or procedures to be
      inserted before rathre than appended after to any screen surface code.


New:  Referenced library objects can mix expressions and procedures.  The
      expressions are automatically converted to IF/ENDIF blocks.  For example,
      if a Valid object is in the library as an expression and in a screen
      surface is inheriting that object but has a procedure Valid snippet, the
      expression from the library will be converted to an IF/ENDIF block and
      appended to the screen snippet (unless *:BASBEFORE which will force the
      library expression to be inserted before).  If *:BASOBJ is used to
      inherit snippet(s) from a library and the snippet type of the screen
      object snippet is not equal to the snippet type of the library object
      snippet, the snippet that is a function is automatically converted
      into a procedure and appended to obtain the same functionality.


New:  *:PRG
      A Setup snippet directive called *:PRG that is used to automatically
      change the .SPR extension to a .PRG extension and also add the
      #NOREAD PLAIN directive to the Setup snippet.  The *:PRG directive
      used in conjunction with screen objects with the *:INSTXT directive
      will allow a .PRG file to be created that has no GETs, SAYs, or READ,
      while the screen builder Object Order controls the order of the FoxPro
      source code generated in the .PRG file.


New:  Warning message defaults to cancel GENSCNRX
        To override, set AUTOHALT=OFF in the CONFIG.FP/CONFIG.FPW


New:  A function in GENSCRNX to allow a public variable or CONFIG.FP/
      CONFIG.FPW setting to globally enable/disable drivers.
      Example:  To disable the 3D driver globally:
        1)  Place 3D=OFF in the CONFIG.FPW file
        2)  Set a public variable _3D='OFF'
        Note:  The public variable overrides the CONFIG.FPW setting


Fix:  *:IF and *:INSTXT works properly for SAY(Refresh) objects.  Code is
      inserted in both Screen Layout and Read Show sections.


Fix:  Temporary .SCX, .PJX, and .MEM file names created during GENSCRNX are
      unique instead of fixed for network compatibility.


Notes:  The *:NOSIZE directive is ignored for EDIT objects

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