GENSCRNX VERSION UPDATE LOG 1.7a ------ New: *:CLICK 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 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 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 SIZE : *:NOWCLAUSES AT SIZE #WCLAUSES AT 1,1 SIZE 10,30 or *:NOWCLAUSES AT SIZE #WCLAUSES AT {{VPOS}},{{HPOS}} SIZE {{HEIGHT}},{{WIDTH}} Note: The {{}} 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 STYLE : *: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(, [[ | ], [expL2] ] The character expression that's searched for. | The name of the memo field snippet to search of the current record. If is .F., the COMMENT memo field searched. If is .T., the SETUPCODE memo field searched. If is passed instead of , the memo field memo field searched. If is .F., search uses match words. If 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 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 *: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 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 Inserts file at top of .SPR code before DO CASE of cross-platform block. If #:INSERTTOP appears more than once due to cross-platform snippets containing the same code, the 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 {{}} 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 . 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 {{}} 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: {{< }} 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 {{ :: [] [:: ] }} Insert code from a screen or library object. 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. 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 is null, the COMMENT contents will be returned. is the option method name. If is included, the text block specified by the matching method defined by *:METHOD ... *:ENDMTHD is returned. New: *:METHOD Place at start of code to mark beginning of method code. New: *:ENDMETHOD Place at end of the code that follows *:METHOD to mark ending of text. Fix: Fix for incorrect generation of Setup snippets when screen sets contain more than one screen that are pre-processed by GENSCRNX. Fix: Proper execution for multiple *:INSOBJ directives. 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'. Notes: *:OBJNAM has been renamed to *:DEFOBJ. For an example, refer to the COLOR text object in the sample screen CUST4.SCX. --------------------------------------------------------------------------- 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 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: Improved error handle routine Cancel, Ignore, Suspend options Error line can be copied from error window into the clipboard Display of current open database, ALIAS, and record number New: Improved warning handle routine Cancel, Ignore, Suspend options 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 New: *:OBJNAM For use with the objdata() function for object locating at compile time. Fix: *:IF and *:INSTXT works properly for SAY(Refresh) objects. Code is inserted in both Screen Layout and Read Show sections. Fix: Building from projects with non-normal ordered records Fix: Temporary .SCX, .PJX, and .MEM file names created during GENSCRNX are unique instead of fixed for network compatibility. Fix: Proper output of Setup snippet for cross-platform screens when the snippets are different and PLATONLY=ON in the CONFIG.FP/CONFIG.FPW or a public variable _PLATONLY='ON' Fix: Fix for *:SIZE directive with EDIT objects and refreshed SAY objects Fix: Fix for *:SIZE directive with refreshed SAY objects Fix: Fix for *:INSSCX directive when object is smaller than template Notes: The *:NOSIZE directive is ignored for EDIT objects Notes: For WINMOVE.PRG driver, specify *:SCXDRV2 WINMOVE in Setup snippet Notes: For NOSIZE.PRG driver, specify *:SCXDRV3 NOSIZE in Setup snippet Notes: For 3D.PRG driver, specify *:SCXDRV5 3D in Setup snippet Notes: The following .PRG files previously contained in GSXSAMPL.ZIP sample code are now contained inside of GENSCRNX: OBJDATA.PRG, OBJSAY.PRG, OBJPOS.PRG, LIBDATA.PRG The above files should be deleted if the exist from previous GSXSAMPL.ZIP sample code. --------------------------------------------------------------------------- 1.4a ------ Fix: _SCXDRVn and _SPRDRVn in CONFIG.FP/CONFIG.FPW for cross-platform screens Fix: GENSCRNX should pre-process .SCX if _SCXDRVn is in CONFIG.FP/CONFIG.FPW even when no GENSCRNX directives exist in the .SCX Fix: Building from projects with header record not RECNO()=1 Fix: Proper output of Setup snippet for cross-platform screens when the snippets are different ---------------------------------------------------------------------------