This log summarizes development of G7 since the last update of the G7 Help files. Copyright: Inforum 2016 Web Site: www.Inforum.umd.edu 10/10/08 Modified CreateVamFile() to work properly when called from the command box. 7.3757 10/17/08 Fixed a bad problem with ctrl, where the group was not processed properly. 10/18/08 Increased size of GString arrays in csum and chain. Fixed some memory freeing problems. 7.3758 10/22/08 Fixed up matin5 routine. 10/23/08 Fixed up additional serious problems with ctrl routine. 12/22/08 Fixed a file-delete problem in flowctrl.cpp. 1/6/09 Made listnames command print available macro series when listing names for a vam bank with vammode=='a'. Previously, only the vector names were printed. Also, add "ln" as a shortcut for listnames. Added case-sensitive sort option 's'; reverse order of sort 'r'; vam file only 'v' or Gbank only 'g' when vammode is 'a': listnames [-srgv] <bankletter> [mask] Note that vector elements are not quite in order, since the sort is alphabetical (e.g. ...out19 out2 out20...). Can add additonal options later, like case-insensitive sort. 7.3759 2/21/09 Fix false error message when creating a new workspace series with "xl read." Rework GUI control of InterDyme models, including IdBuild, Fixer, MacFixer, IdRun, Tables, and Express Tables. 7.376. 3/4/09 Enable creation of new spreadsheet documents with XL command. The commands {(xl open wb), (xl create [wb])} will start XL, create a new workbook, and insert one blank worksheet. Enabled "xl save [<filename>]". "xl create wb <filename>" will create a new spreadsheet of a given name. Added "xl create ws [<sheetname>]" that inserts a new worksheet to the right of the active sheet. Added "xl name ws <sheetname>" to set the name of the current worksheet. Implemented passing of array to Excel for WriteNumberArray() function. Added "up" and "left" directions for "xl write" command. Fixed bug in ColumnMinusOne() function. 3/5/09 Fixed bug in "xl read" optional dates. Fixed bugs in ColumnMinusOne() and ColumnPlusOne() functions. Implemented receiving of array from Excel for ReadNumberArray() function. 3/10/09 Significantly revised Excel code to split G7 interface from Excel class. Added "xl column width <column> <width>". 4/15/09 Made r command return an error when missing data are encountered. When an editor is not saved and the G7 window is closed and the editor prompts for saving and the user cancels, made G7 stay open. G7.377. Began improvements to bank open window. Closed some memory leaks. 4/20/09 Added <eval(<expression>,<date>)> function to if-else routine. 4/24/09 Modified pause: pause [<message>], where <message> is one word (possibly in quotes). Made "return OK" actually return. Made fadd skip to next on "continue". 5/13/09 Fixed up the Run Dyme config. Improved the Tables config. Fixed bug when 'look' is run from script. Fixed launch of console from menu for Vista systems. Fixed inelegant treatement of cancellation from "Execute" menu item and button. 5/14/09 Changed File | Directory and Change Folder button to load the current working directory when they open; previously, they loaded the location of G7.exe. Implemented Font Dialog (previosly existed, but did not work) for graphs. Allow title and subtitles to be italic, bold, underline, strikeout, but not other graph text. Add Bold and Size settings for G7 main window to greg.ini, and store graph and editor font settings (size settings have no effect in graphs). Improve G7 main menu titles. 5/15/09 Implemented Redo in Editor. Improved editor menu arrangement. Load editor font from greg.ini, and implement editor font settings in all editor windows. Fixed bug in Editor Close. Eliminated false "modified" when font settings are implemented or when text is loaded from file. In G7 button bar, reorder the buttons. Eliminate the "Execute" button, and respecify the Run button to check for a file name in the Execute box; if present, run it, otherwise prompt for a file name. 5/20/09 Fix up some numerical problems in log graph. Add dialog for running IdBuild. Redo Dyme Run dialog. Change process for running Dyme models. Now, there is a check box in the dialog for running IdBuild (this is no different than running IdBuild from the menu), and for configuring Fixer and MacFixer. If the fixer boxes are checked, then those dialogs will open and the contents used to construct cfg files, but the programs will not be run. Instead, Fixer and MacFixer now will be called from Run.Bat, which will be executed by G7 in order to run the model. Run.Bat either must be supplied by the user, or G7 can construct a batch file with a button click, using information supplied in the Run Dyme window. It still is possible to use the old IdBuild->MacFixer->Fixer->Run Dyme sequence, but it is not preferred. The new way follows the standard Inforum sequence of setting the model configuration, copying historical banks to model banks, running the fixers, running the model, and then saving the model files. Plus, the new way reduces the number of menu selections needed to run the model. 5/21/09 Fix up the dir command. Fixed bug in look. Switched scaling to false for many windows (Bank Open, (Mac)Fixer, Run Dyme, Tables). 6/17/09 Correction to indexing in XL (problem with excelIntToColumn: AA). 7/1/09 Minor adjustment to column indexing function excelColumnPlusN(), with corresponding adjustment to function calls. Fixed problems with reading "up" and "left." Improved "xl missing" to recognize negative number arguments. Add detection of Excel error codes (e.g. returned when trying to read a cell with a divide-by-zero error) in the "read" command; insert a missing value, print a warning, and continue. G7.379 7/10/09 Fixed a bug in the show command that would cause trouble when executing "show" from the command box. Probably related to Ono's bug report, addressed 8/8/08. 7/28/09 Fixed group routine in do loop to handle cases like (1-97 (1-1) ), where (1-1) was not skipped properly. Instead, the exclusion routine was setting 1-97 to zero, because processing of the first "1" was setting the first element to zero, and so the processing of the second "1" was done improperly. There are problems with the routine, and they need to be redone! 7/31/09 Built new fills routine for do loop. Needs more work to fully integrate new system, both in RunCmdFile and any other function that calls the function. Need to convert other fills routines to use similar technology. New method builds groups using doubly linked lists. Should avoid the bugs that still plague the old routine. Added excelColumnToInt routine. Worked to debug groups commands, and made do loop handle such groups. Previous code was intended to handle such groups, but was not implemented properly. Previously, the group was read as a number, but now the group is specified like ":Manufacturing" as with other implementations. Modified getlist function because it was not printing properly, but the problem might originate elsewhere. Note that code for groups is buggy and full of leaks and needs to be checked. 8/6/09 Debugged the groups commands. Fixed groups.bin file open problem. Fixed memory leaks. 8/14/09 Redirected RunCmdFile() and excelGetGroup() to use new fills() routine. Adjusted xl vecread and xl matread accordingly. Need to implement new fills() in GVamFile.cpp. 8/17/09 Reworked vmake routine, fixed bugs and implemented new fills() function. Updated p123 function to use new fills() routine. That should complete the transition of the old fills() routine to the new, so I removed the old fills() routine. Still need to switch the old fill() routines (fill() in rhs.cpp and GroupHome->fill()) to fills(). 8/18/09 Made the GroupHome::fills() routine use the new fills() routine. Modified all calls to use dynamic arrays in the new format. Needed to adjust various GroupHome routines to use the dynamic, compact arrays. Updated ctrl, gidmake, fillrowdef(), gmatdat, scale. Modified pscale(). 8/19/09 Resurected vam test routine from 2003, and it turned up bugs. Changed vupdate abrev. from vu back to vup. Fixed up vmake. Ran into trouble in RAS; did not have time to fix. 8/20/09 Debugged RAS command. 8/21/09 In Editor, introduced the opening of a filename that is selected in the text of the editor window. NOTE: RAS seems to work with packed matrices, but it always scales the rows and columns to sum to 1.0. Is this desirable? It is not documented. Full matrices are not scaled in this way. NOTE: ras does not operate on groups with packed matrices. Made graph return on error. 8/28/09 Added @stdev() function to compute the sample standard deviation. Fix bug in dates in @mean() function. 9/2/09 When running Build, check whether Model.bat exists; if not, create it with standard entries. Print macro model window parameters to GReg.ini. 9/4/09 Fix buffer overflow in Vam title command. G7.38 9/14/09 Made minor bug fix in Run Dyme window. Changed title of button. 9/28/09 Fixed error message in Function command. G7.3801 10/1/09 A serious problem was discovered with the new fills() routine, which parses all group specifications (in group, do, @csum, xl, and many other routines); specifically, the bug was in the matching function (e.g. for "1-5 (2 3)", 2 would not be excluded properly). This is puzzing because of extensive testing on the original, which seemed to work well. Fixed up the matching function. Wrote extensive test routine, which the revised version seems to handle properly. G7.3802 10/13/09 Fixed a problem in the date-reading routine for xl commands. If only one date was given, to specify a single period, the ending date could be corrupted - where the ending date should be equal to the starting date. Fixed a small bug in the show command. Improved display of row and column titles in the show command. Corrected a small problem in the examples for the xl matread routine in the Help files. G7.3803 10/14/09 Made some changes to the pmloadcmd command (and slight changes to functions it calls) while attempting to prevent buffer overflows and memory leaks. Impose a strict maximum length of 32 for file name and path in the pmfile command; previously, this was not enforced, but it probably allowed buffer overflows. 10/15/09 Fixed a bug in the printing of Build.cfg when clicking OK or Save in Model | Run IdBuild. Reworked the printing when clicking OK to allow interuption of the process if an error is discovered. 10/19/09 Improved the error messages in the ctrl command. Fixed problem with ctrl call to pscale routine. The problem was that we feedi a vector length to pscale, but the ctrl routine also operates on macro banks such that vector lengths are not defined. G7.3804 10/21/09 Added optional flag for the ls command, extending the work of 10/19/09: Format: ls [-<flag>] <x> <y> <date> [direction] <flag> may be a: use x = a + b*y b = x{date}/ AVG(y) * sign( x{date}*AVG(y) ) a = x{date} - b * y{date} where AVG(y) is calculated from fdate1 to <date>, if direction is 'b', or from <date> to fdate2, if direction is 'f'. This is useful when y{date} is close to zero so that scaling parameter b is large, thus scaling x excessively. If AVG(y) is close to zero, then b = x{date} * sign( x{date}*AVG(y) ). 10/27/09 Improved parsing of lines in the Look window. 11/09/09 Identified a problem in pmfile, and possibly a source of memory leaks elsewhere. Added storecmd() to pmfile. This also fixes a problem where previously-loaded vector data could be lost. Changed punch5 to read from default vam file by default; previously, it looked to bank a. 11/10/09 Check matrix type in pmfile; return error if not "packed." When closing a vam bank after punch5-ing a packed matrix, G7 reported errors. See the comment on 2/22/08. There seems to be a problem with writing packed matrices in writearow(). Modified the for loop to stop when reaching end of array -- this seems to fix the problem. In formpmh(), initialize np to zero. 7.3805 11/16/09 In @csum(), when no arguments are given and no bank letter is specified, report a problem if DefaultVam has not been specified. Reading from a vam bank is necessary to determine the range of sectors, assuming that the user has not suppied them. 11/19/09 Fixed bug that failed to start a new line at end of period for punch5. 12/10/09 Fixed minor bug in vmatdata so that the default is set properly for [<skip>]. Fixed a bug in setting the optional first-column position in the show command. 7.3806 01/06/10 Added "xl print missing [<value>] to specify a missing value code for printing spreadsheet data. 01/07/10 Set up "xl write" to employ the decimal setting from the format command, thus controlling the number of decimals displayed in a spreadsheet. 01/20/10 Added "CMD.EXE" to the search path for the DOS window; this is needed for Win7. Corrected buggy code for DOS menu item. The code for the menu item and the "dos" command (without arguments) were synchronized. Reduced printing in lint command when addprint==n. Added checks in vamcreate to avoid overflows. 01/21/10 Increased buffer sizes in @csum routine. 01/22/10 Added +=, -=, *=, and /= to f and vf commands. Currently, the LHS series must exist to use these operators. Make interpolation for vectors and matrices work for both missing values and zeros. Interpolation of time series still works only on missing values. 01/27/10 Fixed up the "xl mkseries" command. Tried to fix the problem with F10 in the editor, where the editor mangled execution (with F10) of selected text following an error. 01/28/10 Began work on getsum. Rewrote the routines for to rely on Matrix and Pmatrix matrix classes. When groups are specified, assume that a partial sum for all rows/columns is desired. Add documentation for the ability to form partial sums by specifying a group: getsum <matrix> r|c [<group>] <vector> 01/29/10 Added ability to specify a bank letter for the source matrix in getsum. Target vector still must be in the default vam bank. 02/02/10 Added ability to specify additional arguments after the argument filename in fadd command: fadd <script file> <argument file> [<arg> [<arg>] ...] Began experimental work on chop(). First, allow chop() to return ERR if it finds trouble; this will need watching and more development. If implemented properly, it should allow the user to kill a routine if an argument (e.g. %2) is out of bounds. Second, began work to generalize the types of arguments that G7 can process. For example, %{%1+%2}, %{%1*%2}, %{%1/%2}, and %{%1-1} are allowed. Much more work and testing is needed. 02/03/10 Added routine for writing vector data to Excel spreadsheets: xl vecwrite < vector > < v ( index ) > < c ( cols ) > < r( rows ) > < direction > [< start > [ end ]] Added "xl font <c1><r1><c2><r2><setting>", Valid settings include bold, italic, underine, left | center | right | justify, top | vcenter | bottom | vjustify. 02/06/10 Added color support to xl font command: None, Aqua, Black, Blue, Cream, Dark Gray, Fuchsia, Gray, Green, Lime green, Light Gray, Maroon, Medium Gray, Mint green, Navy blue, Olive green, Purple, Red, Silver, Sky blue, Teal, White, Yellow. Added pitch. Typeface options Times New Roman, Arial, and Courier New, -t <"typeface">. 02/08/10 Added "xl formula <row> <column> "<formula>", such as "=sum(A1:A10)". 02/15/10 Improved handling of bank-open failure for workspace banks. Modified return code in g.cpp select() when chop() hits end-of-file. 02/18/10 Fixed a bug in the Hodrick-Prescott filter routine. 02/23/10 Improved error reporting and did preventative maintenance in vmatdata. 02/24/10 Improved error reporting in the f command. Tweaked feed() to deal with arguments that appear at the end of a file. G7.3808 03/02/10 Fixed bug in xl mod, where the strings were not stored. 03/08/10 Tweaked error checking in f command. 03/09/10 Added some checks to the graphing routines to protect against too many series. 03/17/10 Cleaned up titles printed by the gtitle command. Fixed serious bugs in getsum, when forming partial sums. 03/18/10 Added %xlcol(<int>) function to convert a number to a spreadsheet column letter sequence. Improved reliability of the "xl formula" command, where sometimes it would not print the formulas. Worked on bug in excelColumnPlusN function, where 'z+0' and similar arguments were not handled correctly. 03/22/10 Fixed a problem when opening a workbook; now, look up the first sheet name and request it by name to avoid "Cannot open sheet" errors. Reworked %date, %time, and %xls keyword handling. Reworked handling of return codes in docmd(), and added TEXTREPLACE control over feed(). Changed return codes in feed()-chop(): if error is encountered in feed(), return BREAK instead of ERR, and then return appropriate code from chop(). Fixed an EOF problem in feed(). Fixed up the "xl read <column> <row> string integer" routine. Added TEXTREPLACE control over processFile() (used for trycmd() and ifcmd()). Polished 2/24/10 work on EOF in feed(). Determine spreadsheet file type by extension; common types are CSV, and XLS is the default. Need to complete this and find map between actual extension standards and the file types. 03/23/10 Modified "xl save <wb|ws> [<filename> [<filetype>]]" and "xl create [<wb|ws> [<name> [<filetype>]]]", where the filetype may be specified when the "wb" option is chosen, and the filetype may be one of the following: AddIn (.xlam), CSV (.csv), CSVMac (.csv), CSVMSDOS (.csv), CSVWindows (.csv), DBF2 (.dbf), DBF3 (.dbf), DBF4 (.dbf), DIF (.dif), Excel2 (.xls), Excel2FarEast (.xls), Excel3 (.xls), Excel4 (.xls), Excel5 (.xls), Excel7 (.xls), Excel9795 (.xls), Excel4Workbook (.xls), IntlAddIn (.xla), IntlMacro (.xlsm), WorkbookNormal (.xls), SYLK (.slk), Template (.xltx), TextMac (.txt), TextMSDOS (.txt), TextPrinter (.txt), TextWindows (.txt), WK1 (.wk1), WK1ALL (.wk1), WK1FMT (.wk1), WK3 (.wk3 ), WK4 (.wk4), WK3FM3 (.wk3), WKS (.wks), WQ1 (.wq1), UnicodeText (.txt), Html (.html), XLS (.xls) The default will be the XLS format. If no filename extensions is specified by the user (i.e., only the root name is given), then the extension shown in parentheses will be appended. Added TEXTREPLACE control over feed() for functioncmd(), iccmd(), and textcmd() (then removed controls on iccmd() and textcmd() -- needs more review). Tweaked use of the 'matchreturn' argument in feed(); if matchreturn==' ', then feed will read to the end of whitespace. In feed(), when TEXTREPLACE==true, treat %% as % character to be added to the buffer, without argument replacement. Added an optional 'matchreturn' argument to chop() so that it can pass the argument to feed. In the main chop() operation in select(), break reading upon reaching whitespace. This should allow better control over interpretation of variables (%1, %2, ...). 03/24/10 After chop() in select(), set inbuf[0]='\0' and pinbuf=inbuf; this forces a subsequent refilling of the buffer and allows routines like dos() to run properly. Do the same for processFile(). Need to implement processFile() and flushtobracket() widely. Need to make 'matchreturn' handle multiple values (e.g. " \t}" so that "do{text %1" will break at '}'). 03/26/10 Fixed some limitations in reading packed matrix data when the matrix row exceeded 1900. Made the reading of the packed matrix text file more robust. Began work on feed(). 03/27/10 Reworked feed(). Revised (rolled back code for) some calls to feed() and chop(). Introduced createFileBtwBrackets() routine to create a temporary file and copy script from between {} into it. Made processFile() (used by if-else and try-catch) and functioncmd() use it; still need to make do, dos, etc. use it. 03/29/10 Debugged feed() and docmd(). Added TEXTREPLACE=2 setting to allow replacement of %1 if available and otherwise treat as regular text, and implemented in chop() (#), iccmd(), textcmd(), coloncmd(), and geteol(). Again fixed up excelColumnPlusN(). Cleaned up doscmd() a little, but more work is needed. Made docmd() use createFileBtwBrackets() routine. 04/13/10 Continued work to debug string commands, chop, and feed. Fixed a long-standing buffer overflow vulnerability when reading "" in chop. Also, allow the buffer length to be passed to chop, with the previously-assumed 78 as default. 04/14/10 Attempted to correct a bad check in vmake. Replace '\t' with ' ' in Look window; a better fix would be to display them properly. 04/15/10 Modify chop to clear the remainder of a "" string when the string length exceeds the buffer size. Modified RunCmdFile() to allow an option to toggle addprint after reading arguments; this should help to control printing for user functions and similar routines for which we impose special controls on addprint (i.e. the user's setting might be TRUE, but G7 switches it to FALSE for the processing of the function). 05/25/10 Changed MAXVAR from 100 to 500, where MAXVAR is the maximum number of variables allowed in regressions. 05/28/10 Made listvecs routine more like listnames: lv [-s][-r] [pattern] where s==sort and r==reverse sort. 06/10/10 Modified string routine to require that RHS text be wrapped in quotes, allow string names on RHS, and allow addition of strings with '+' operator (str s = "hello, world", str t = s + "!"). 06/18/10 Modified error handling in RunCmdFile() to ensure that the routine will stop and return an error code when upon finding problems. G7.3810 07/17/10 Revised scale routine to simplify, to fix bugs, to improve treatment of default dates, and to relax limitations (like a 500 row/column limit on matrices). The default date range still is specified by the fdates but now is adjusted for start and end dates of the default vam file. G7.3811 07/19/10 Fixed some file reading problems in that have plagued pmatin for many years. Improved ability to process packed matrix text files that contain blank lines, comments, etc., and substantially improved error detection and handling. Added explicit ability to handle sequential pmatin commands; if the subsequent "pmatin" command refers to the same packed matrix, then continue to read data, and otherwise stop reading, finish compilation of the current matrix, and return so that G7 can try to process the next matrix in the file. G 7.3812 07/20/10 Fixed a bug in @csum(x), where index limits are set by default if x is in the default vam file and no index limits are specified. Previously, there was a bug in the determination of whether a default vam file had been declared. Fixed a minor annoyance in the Editor Replace utility, where the replace operation was not starting until the end of selected text. 07/21/10 Added FindMode feature to Bank Open utility. Reworked the Bank Load utility extensively. Fixed a problem with "findmode" reporting, which incorrectly reported "vammode" settings instead of "findmode" settings. 07/22/10 Added Default Vam control to bank control GUI. Further work required to polish the bank load GUI. 07/23/10 Modified "editor" command to disallow multiple editor windows to be opened with the same file. Previously, opening a file multiple times would lead to crashes. Made same change to file open routines in the editor window. In editor save routines, reset the window caption with file name. 07/27/10 Moved the listvecs routine out of the vamfile class. This allows "lv" to be called for non-default banks. Fixed several bugs. Revised the syntax to allow an optional bank letter: lv [-s][-r] [<bank letter> [<pattern>]] or lvc [-s][-r] [<bank letter> [<pattern>]] 07/28/10 Fixed a bug in scale (control series index) that was missed on 07/17/10. In "xl vecwrite", ensure that vam bank is open before attempting to read from it. 07/29/10 Improved function of Editor Open routine for opening a file specified by selecting text in the editor window and typing <ctrl-o>. Fix size limitation and memory corruption problems in ctrl when controling a long list of series. 08/02/10 Improved control of "Not Found" window in the Look window's Find dialog. 08/03/10 The ls command was altered on 3/23/06 to allow a series to be read from a Vam file, modified, and stored again in the Vam file. Now, disallow this except in the case that the bank is the default Vam file. When a bank letter is given, then the following routine is implemented: 1) if the bank is open and it is a Vam file, then a) if it is not the default Vam, then complain and return a error, and b) if it is the default Vam bank, then store the result to the bank. If the bank is not an open Vam bank, then strip the bank letter and store the result in the workspace as "<root_name><sector_number>". Introduced similar procedure for ctrl command, which until now stored all results to the workspace. This procedure needs additional review. In gaddcmd(), limit the printing of error messages to actual problems found in the gadd command; do not print add command error messages when a problem is found in the script processed by the add routine. Did same for the do command and for the if command. G 7.3813 08/05/10 Fixed bug with lv when no bank letter was specified. 08/05/10 Added control for command box on main window: autocomplete <[on]|[off]> or autocomplete <[yes]|[no]>. Still need to add the setting to greg.ini. G 7.3814 08/10/10 Began update of G7 code to incorporate ExcelClass and Font class developments from Compare. Fixed bug with Table-window Browse routine. 08/11/10 Fixed bug with "%{%1+1}" where the final '}' was reappearing in the script. 08/12/10 Fixed bug in feed subroutine so that "#%1" was expanded only if possible. Modified lvc to avoid printing blank lines. Extensively reworked xl font routines to integrate Compare font developments. Added GFont class from Compare. For now, removed '-t' and '-c' options. xl font <col> <row> <col> <row> .... Sets font for specified range only. xl setfont .... Sets default font. Fixed some problems with printing missing value codes to spreadsheets. 08/13/10 Revised the Bank Open GUI extensively, though the features have changed little. In Excel.cpp getDatePair(), add check for decreasing dates. Added AutoComplete to G7 main menu and added the setting to greg.ini. G 7.3815 08/17/10 Added %NARGS keyword to provide the number of currently-specified arguments. Added %eval(<expression>,<date>). Added safelog mechanism for @log(). 08/18/10 Added %strcmp(,),%strcmpi(,),%strncmp(,,),%strncmpi(,), with same syntax and return values as in C. Changed error return codes in expand() utility (in Utility.cpp). When such an error is returned to feed(), the troublesome line of script gets printed, now followed by a newline so that subsequent error messages get printed on a new line. Check for additional return codes in select() and clean up the code. Modified return codes for textcmd() (consider same for do, if, try, dos). 08/19/10 Updated cprintf() to make it almost identical to printf(). Updated do() and createFileBtwBrackets(). Added getword() routine for use by variable expansion routines, and employed this to generalize the %strXcmpX() functions. 08/20/10 Added ability to call other %-variables within a %{}. Save Editor background color to greg.ini. Fixed the ability to implement stored graph-placement settings by manually resetting the position of new graph objects in plcmd(). Store Top and Left positions of main window. Added GREG.INI settings for graph button bar. Added saving of the G7 Editor position, but this routine is not entirely satisfactory; instead, should add an Editor menu item to record the current size and position as the default. Replaced with an Editor menu item to store the present size and position to greg.ini. Added %strlen() and %strstr(,), strnset(int ch, size_t n) [limited to 90 total characters], all which are similar to the corresponding C routines. 08/21/10 Fixed the graph positioning problem. When G-Error dialog box closes, return control to the command box. 08/25/10 Modified EdStart() to check whether a file already is open in the Editor. In Tables dialog, assign a default setting (Actual) for comparisons between data banks. Added safelog(), safeexp(), safesqrt(), and rewrote existing double versions as dsafelog() and dsafeexp(). Implemented in various places. 08/27/10 Attempt to bring the graph window to the top, then bring the button bar to the top and give it the focus, when drawing graphs. In show routine, increase buffer for float->char so that a bad float will not cause overflow when converted to a string. Fixed problem in GDates.cpp, where the G7 printf() function was not visible to the compiler. Added 2-series restriction for scatter plot. Tested graphs (.,m,l,s) with 7 series, and all seem OK, though the legend will display only 6 series names. Modified legend printing to accomodate 7 series names. Plugged memory leaks in the graphing routines. In mcopy, add checks to make sure that the source and destination banks are open before reading. 08/30/10 Error message in bankcmd() was using the wrong string with the wrong message and a '%s' instead of a '%d', leading to access violations in its call to printf(); changed to correct string. Also, the routine continued to run after encountering an error; now stop and return an error code immediately. Also, upon bank load failure, the bank object was not destroyed, leaving a memory leak. In Compare GUI, change buffer length for bank boxes to 100. In routines to handle '%' functions, variables, and keywords, add checks for whether the word is located within a comment before printing an error message; if commented, return an error code within the parsing routine, but do not print an error message within the low-level parsing funtions that process '%'. Debugged '%%'. G 7.3816 08/31/10 Fixed ExcelClass problems in which some range pointers were getting assigned using xla rather than xlws; this caused trouble for those functions, most often for font and related functions. 09/01/10 Fixed bug in depad(). Fixed up %eval(,). G 7.382 -- Hikone release 09/15/10 Fixed problems in vamfile destructor. 09/22/10 Fixed problems in compressed bank and hash bank constructor which were leading to problems in the destructor. 09/29/10 Modify maximum line length in vecpunch() to improve consistency with vmadatcmd(); this needs more work to improve flexibility with large vectors. 09/30/10 Fixed a problem with reloading a file in the G7 Editor. 10/04/10 Fixed up the cc command. G 7.38201 10/05/10 Made minor change in attempt to fix bug reported by Josef Richter, though the problem has not been reproduced. G 7.38202 10/14/10 Made improvements to show-command column titles corresponding to row titles changes in 10/13/09. Allow "edit", in addition to "add", on last line of g.cfg. 10/23/10 Tried a change in Advanced Compiler settings from Data Alignment == Byte to Double Word; ran into trouble and reversed the change. Changed Compiler setting from Cache Precompiled Headers to Use Precompiled Headers. Need to watch and do more work. Began work to eliminate warnings and possible corresponding problems. Resumed work on xl chart routines. 10/28/10 Modified the xl worksheet-open routine to properly identify worksheets that might be named with a number. 11/10/10 Added "name" to the sob.cpp matrix destructor to plug memory leak and fixed related problems in the constructors. Added check of date range to getsum(), taking into account fdates and the start and end dates of the source and target vam files. Added initiallizion of an array in getsum. 11/11/10 In vf command, add range checks for LHS row and column indexes. Corrected a bug in vc command (in vaddsub()), where vector sizes were not checked properly before adding or subtracting. In mmult, added ability to make either RHS argument a constant; currently, only works with & operator and in other special cases. 11/12/10 In mmult, change behavior for / when dividing by zero: return the numerator value instead of 0.0. This is consistent with treatment in the f and vf commands. Added check of date range to mmult, taking into account fdates and the start and end dates of the source and target vam files. In mmult, add > and < operators that will assign the greater or lesser value of the arguments to the LHS; this is a temporary tool until we build mmax-mmin or equivalent commands. 11/16/10 Extended capability of mmult to handle constants on RHS with support for all operators (see 11/11/10). 11/17/10 In vc command, added ability to set temporary fdates, as with f and vf commands. 12/01/10 Fixed bugs and erroneous messages in @chwt() command. 12/03/10 Added load(), store(), and related routines to SOB Vector<> class. Began work to add the ReSector class; currently, it includes rs create <filename> [<Number of Columns> <Maximum Number of Sectors>] rs formagg <Number From> <Number To>] rs aggvector <Number From> <Number To> <Input Vector> <Output Vector> <Split Vector> ] 12/06/10 Continued work to add the ReSector class; added rs ctrlvec <Number From> <Number To> <Detailed Vector> <Aggregate Vector> rs rdctrlvec <Number From> <Number To> <Detailed Vector> <Aggregate Vector> 12/07/10 Added store() and related routines to SOB Matrix<> and the G7 Pmatrix classes. Continued work to add the ReSector class; added rs crossaggvector <Number From> <Number To> <Number In Between> <Input Vector> <Output Vector> <Split Vector> rs aggmatrows <Number From> <Number To> <Input Matrix> <Output Matrix> <Split Vector> rs aggmatrows <Number From> <Number To> <Input Packed Matrix> <Output Matrix> <Split Vector> rs aggmatrix <Number From> <Number To> <Input Matrix> <Output Matrix> rs ctrlmatrows <Number From> <Number To> <Input Matrix> <Output Matrix> rs ctrlmatrows <Number From> <Number To> <Input Packed Matrix> <Output Packed Matrix> rs ctrlmat <Number From> <Number To> <Input Matrix> <Output Matrix> rs ctrlmat <Number From> <Number To> <Input Packed Matrix> <Output Packed Matrix> rs crossaggmatrows <Number From> <Number To> <Number In Between> <Input Matrix> <Output Matrix> <Split Vector> 12/10/10 Increased MaxStubNos to 4000; this is the maximum number of sectors allowed in the gtfile/gtitle command. G 7.38203 12/16/10 Fixed up the %s() routine to work better when the argument contains a '%'. 01/07/11 Changed safesqrt() arguments to double from float. Added %fdateX, %gdateX, %tdateX, %limX, where X = {1,2,3}. Added "logit rhoadj [yes|no] option. 01/25/11 Added pmmode={simple,advanced}, where "simple" is the default and consistent with previous versions. "Advanced" automatically begins searches for packed matrix file at the location of the corresponding vam bank. This should eliminate the confusion caused with multiple vam banks and pmx files that have the same name and same relative positioning between the vam and pmx files. Fixed a bug in the associated createPath() routine that locates the vam file and another related bug in pmloadcmd(). 02/03/11 Updated coef() a bit. 02/14/11 Began work to save parameters for the logit command. 02/15/11 Rewrote the dos command. Eliminated "args" keyword to pass arguments to a batch file from within {}. Parses script with feed() rather than reading directly from inbuf. Standard G7-script rules now apply to the creation of batch files with "dos {}", including specifying '%%' when '%' is desired. G 7.38204 04/19/11 Extended %s() routine to allow extraction of substrings: %s(string_name [,<first>[,<last>]]), where first and last are integers that specify the array positions in the string. 04/20/11 Began work to improve vmake. 04/21/11 Eliminated limit on vector length in vmake. Added "str open <filename>", "str close", "str getline [<string_name>]", and "str parse [<separators> [<string>]]", where the default separators list is " \t" and the default <string> for parsing is the default (implicit) string read by getline. The default (implicit) <string_name> for getline is "line", where "line" may be accessed only through the functions and keywords defined below. Added %w(<index> [,<first>[,<last>]]), where first and last are integers that specify the array positions in the word in position <index> of the string read by "str getline" and parsed by "str parse". Added %linelen, where the value is -1 if EOF is encountered. Added %line to return the line read by "str getline" and %numwords to return the number of words parsed from the line currently in memory. After calling "str getline", the number of words is 1 (%line == %w(1) and %numwords == 1) until a subsequent command "str parse" is issued. 04/26/11 Make "str getline [<str_name>]" copy the string to the implicit "line" string regardless of whether a string name is given. Add str replace [<stringname>] <"search_text"> <"replacement_text"> Accept string name in "str clear [<string_name>]. 05/12/11 Added setting for npy in g config routine. Modified npy setting in matty. 05/27/11 Added the DLL compiled in VisualStudio\G7dll. Began work to replace the PCRE libraries in StringFunctions.cpp with the VS dll that employs the Boost RegEx library. 06/01/11 Rewrote the parseword routine that interprets % keywords and functions. Added %literal("<string>") and %eliteral("<string>"), where %eliteral() escapes '\0', '\a', '\b', '\t', '\f', '\n', '\r', '\\'. 06/02/11 Allow () within %{} routine. 06/03/11 Rewrote parsing subroutines (below feed) to employ STL strings. Added %mod(<number>,<number>), %min(<number>,<number>), %max(<number>,<number>), %floor(<number>, <number>), %ceiling(<number>,<number>), %lower(<string>), %upper(<string>), %titlecase(<string>), regression parameters %ncoef, %beta, %mexval, %see, %rsq, %rho, %rbarsq, %mape, %obsinregression. NOTE: THESE CURRENTLY MIGHT ONLY BE VALID FOR R, NOT COMMON-COEFFICIENT, WR, LOGIT, NL, .... 06/05/11 Added %trim(<string>[,<separators>]), %trimleft(<string>[,<separators>]), %trimright(<string>[,<separators>]), where <separators> by default is whitespace and optionally may be given in the syntax for the %eliteral() routine. %trim[left|right](<string>[,<string>]) returns a new string removing leading and trailing spaces and control characters. Added keywords %title, %subtitle, and %vaxtitle. 06/06/11 Debugged %-routines and other routines that have been affected by recent updates of parsing routines. Discovered a limit of 20 levels for recursion using the current function{} routine; need to move away from using temporary text files to store code, or perhaps record the current file position and close before calling a subroutine. 06/07/11 Rewrote function{}, do{}, and try{} to employ a list<string> rather than a temporary text file. Eliminate limit on number of user-defined functions. Added "function list" and "function print [<function_name>]". 06/09/11 Added command-line cache and menu item to print the cached commands, clear the cache, and execute the cached commands. Tried to fix show-window bug by storing a copy of the data in the show-window object; this avoids trouble when the window is left open and a new vector/matrix is loaded, but currently it does not allow data to be recorded through the show window interface. 06/10/11 Added Title Case to Editor Edit menu. 06/30/11 Debug processList. 07/05/11 Fixed bug in DOS command where temporary output file was not getting deleted. 07/28/11 Fixed problem with date range in pmpunch. G 7.38205 08/02/11 Fixed flaw in check_lag routine. 08/10/11 Modified createListBtwBrackets() to ignore {} behind a '#' comment or withing a "<string>"; this does not fully fix the problem of extraneous brace matching, but it should help. Began work to store rcoef parameters in a map and to recover keywords from this map. 08/11/11 Extend the caching of rcoef to all forms of regression. 08/16/11 Corrected problem with stopping at comment such as "# %s(x)" where x was not defined. Still need to improve printing of the original text without expansion when addprint is on. Fixed initial distribution problems with G7VCC.DLL; note that the distribution requires the VC++ Redistributable, and this installer is bundled with the G7 installer. G 7.383 08/31/11 Fixed up vmake. 09/01/11 Changed the Edit button in the Show window to Enabled; I see no code to change the setting, so I suppose it got switched off at compile time by acccident. 10/10/11 Fixed up %getval(). Note %eval("<equation>", date) syntax. 11/18/11 Improved editor Find and Replace routines. 11/26/11 Fixed problems with parsing of %integer. 11/30/11 Increased performance for display of Look window. Add Right-Click menu item in Editor to type data for selected series name. 11/30/11 G 7.384 12/07/11 Improve error code returns for type and graph commands. Made Look window set frequency of gdates and tdates. 12/10/11 Improve display of graph key. Got line styles to work, in part, but only for small displays; bigger windows lead to interpolation (?) that makes the lines solid. 01/11/12 Allow longer series titles to be displayed in graphs. 01/19/12 Fixed problem that prevented the add command from being employed within a function. 01/27/12 Restored ability to store values that were modified in the show window. Added "Save" button to show menu. 02/13/12 Fixed interface problem with Compare window. 7.3841 02/15/12 xl freeze <[r | c | rc | off]> [[r | c | rc] [rc]]>, where first the row|column|cell for freezing is given, then the upper-row|leftmost-column|top-left-cell is given for the frozen pane, then the top-left cell for the lower-right scrolling pane. 02/17/12 xl background <color> 02/20/12 xl merge <FC> <FR> <LC> <LR> ["off"] 02/20/12 xl subscript <C> <R> "<text>", xl subscript <C> <R> "<text>". Both append "text" to the current contents of the cell at CR. Needs more work to preserve existing formatting, allow additional appended text in standard font, etc. 03/02/12 Try to make routines properly process "%1%2" when %1 is "". Added %formatgiven1, %formatgiven2, %formatgiven3, %format1, %format2, %format3. Fixed precision problem in NumberToString() routine, and in %ceiling() and %floor(), in Utility.cpp. 7.3842 03/05/12 Tried to fix endless loop caused by illegal "%(...)" script. 03/12/12 Fixed problem in @yoy() that was causing access violations. 03/20/12 Fixed problem in @Xchwt() that occured when the fdates range did not include the chain weight base year. 03/27/12 Fixed broken menu item in editor (Insert Text From File). 03/28/12 Improved error detection in ls command. Fixed memory leaks in chwt and chain. 04/02/12 Fixed parsing problems in "str parse". Added "function clear [<name>]". 04/04/12 Modified @mean() and @stdev() to have the @ggr() syntax and fixed some problems in all three. Improved error return codes in rhs.cpp. 04/04/12 Tweaked output of lis/lnc. Fixed EOF problem with fadd. 04/12/12 Fixed problem in graph command so that 7 series may be shown. Add counter check in chain routines to prevent overflow when reading series names. Increased MAXCHAIN to 1500. 04/13/12 In %s(<string>[,<first>[,<last>]]), make <last> either the character specified or the end of the word. Revise parsing of words within % routines so that text wrapped in "" is treated as one word. Modified treatment of unrecognized '%' in routines for which %-expansion is optional. Increased the array size for chopbuf to avoid overflow. Fixed return-code problem in %getval(). Fixed problem with setting of %xls when an empty cell is read. Rename vector() as fvector(), a convention more like the existing dvector(); this avoids a conflict with STL. 04/14/12 Add wscache <on|off> or wscache <yes|no>. When on, reading and writing to the standard workspace (ws.*) is suspended and data are held in memory. When turned on, data are read from ws.*, and when turned off data are written to ws.*. Capacity in memory is greater than on disk because of known limitations of the GBanks design, and so pushing data from memory to disk will fail if the ws.* bank capacity is exceeded. 04/18/12 Added wsdump <filename> [<"tdates">] to dump data to text file. If tdates option specified, then print data within tdates. Otherwise, strip leading and trailing zeros, missing values, and garbage, and just print data that appear to be valid. Added timer <on|off> or timer <start|stop> to calculate time intervals. Added optional date to control extent of operations in the ls command: Format: ls [-<flag>] <x> <y> <date> [date2] [direction] <flag> may be a: use x = a + b*y b = x{date} / AVG(y) * sign( x{date}*AVG(y) ) a = x{date} - b * y{date} where AVG(y) is calculated from fdate1 to <date>, if direction is 'b', or from <date> to fdate2, if direction is 'f'. This is useful when y{date} is close to zero so that scaling parameter b is large, thus scaling x excessively. If AVG(y) is close to zero, then b = x{date} * sign( x{date}*AVG(y) ). f: force the calculation using standard algorithm without reporting problems. i: if x and y are of opposite sign in the base year, use x = a + b*y b = x{date} / y{date} * sign( x{date}*y{date} ) a = x{date} - b * y{date} <date2> is the last period (direction is 'f') or first period (direction is 'b') that will be modified. If not given, then the values will be modified to the end of the sereies. 04/18/12 Added script controls for menu items added 06/09/11: commandcache <clear>, commandcache <print>, commandcache <replay>. 04/23/12 Fixed printing problem with listnames for compressed banks. 04/30/12 Fixed divide-by-zero and other problems in chwt(). 05/01/12 Make the Editor F10 (Execute) routine employ a string list rather than a temporary text file. 05/03/12 Added %if(<condition>, <if true>, <if false>) function, where specification of <condition> is identical for that of the if command. <if true> and <if false> either may be named strings or text within quotes. Added ungetword() function for internal use within utility.cpp. This offers unlimited capacity to store returned words and codes, though reversing course might not be possible if ungetting after a %-routine has been expanded. This is a limitation of unchop() and unfeed(), too, but there probably is no solution other than to make a copy of the original buffer, or perhaps to do all %-expansion separately and without inserting the expansion into the buffer. Needs further consideration, and %if() needs more testing. 05/04/12 Provide rdscale option for ctrl, with same syntax as for the scale command; must wrap group in () for rdscale option to be read. 05/08/12 Add QP extension to proportional scaling that automatically is applied when the standard algorithm fails. Fixed problem affecting try-catch and perhaps other flow control routines: unchop buffer was not getting cleared. 05/09/12 Fixed input buffer problem in vamcreate. If the show window is closed by typing ESC, then the show exit function now will clear the ESC code to prevent the script from being killed. 05/14/12 Increase limit on number of variables in matty from 30 to 100. For now, disable 05/08/12 work on extension to proportional scaling. 05/15/12 Fix problems in syntax checking and improve messages of RAS command. 05/16/12 Added "+=" operator to str command. 05/21/12 Continued to improve messaging, error handling, and to fix bugs in RAS and related routines. Fixed problem with alignment of data over time in RAS conditions, where equations were not aligned with workspace. 05/23/12 Rewrote much of the precon() routine. Now allow sc(max/min) <(row group)><(column group)><value> in addition to original block specification, where row-column groups must have the same number of elements and must form row-column pairs that identify the desired cells. 05/24/12 Rewrote RAS routine and supporting routines to employ double-precision calculations; this fixes some convergence problems. Need to adapt other routines to employ the double-precision versions of the supporting routines; meanwhile, conversion routines are in place to provide support for single-precision routines. 05/29/12 Make RAS routines skip conditions for which the control value is MISSING in a given period. Added fdates command to RAS conditions command set (not yet implemented for gvras routine). 05/31/12 Fixed bug in show command. 06/12/12 Fixed some unnecessary warning messages in %if() routine. 06/15/12 Corrected and adjusted the RAS convergence check. Improved screen output for RAS. 07/09/12 Passed a return code through the update command. 07/24/12 Fixed problems in @min and @max, where closing ')' was not being read. Began work to employ HTML Help files; included "htmlhelp.h". 07/25/12 Created htmlhelp.lib with "implib htmlhelp.lib hhctrl.ocx"; added to G7 directory, linked in g7.cpp. 07/26/12 Temporarily commented line in G7.cpp; need to replace. Got the new Help to launch, but needs more work for different menu items, command line, and to include methods to launch particular pages or sections. 07/26/12 Got help menu, icon, command line, and short-cut methods working and linked to appropriate locations in Help. 08/09/12 Allow temporary series to be graphed in similar fashion to type command: gr (<series1>) (<series2>) ... 08/10/12 Fixed up the line command to correct bugs in printing of line settings. 08/17/12 Returned to work on xl chart routine. 08/20/12 Define xl chart <col 1><row 1>...<col N><row N><direction><date 1><date 2><chart type> 08/21/12 Allow the series name to be omitted from the xl write routine; in this case the dates will be printed in Excel date format. 08/25/12 Fixed packed matrix handling in ras command. Conference 2012: 7.3845 09/10/12 Began work to prevent overflow or run-on words when printing long series names with listnames commands. 09/27/12 Rewrote the listnames routine and associated routines to use STL in place of Borland containers. Made the listnames interface dependent on a core routine that obtains a list of series names from the database classes. Added -l <root> option to listnames routines to store the bank series names as strings, where the string names are <root><integer> and the string definitions are the series names. Added %nseries(<bank_letter) keyword to return the number of series in the given bank. 10/02/12 Adjusted the ls routine to produce a result when the series to be moved is zero. 10/03/12 Added @sign(<expression>) that returns +-1. 10/04/12 Fixed a problem with focus for the "file-execute" box on the main window. 10/23/12 Fixed problem in pmmuldiv() routine that caused incorrect date alignment between Vam banks and packed matrix files. Replaced the routine that expands "%{...}" with one that does proper P/E/MDAS integer arithmetic (no exponentiation, but %-routines and recursion are supported). G7 7.3846 10/25/12 Fixed += in f and vf to handle missing values on LHS and RHS. Added check to @chain routines to ensure that the specified base date frequecy matches that of the fdates. 11/08/12 Updated icon and images on splash, config, and about dialogs. Changed Help shortcut from F2 to F1. 11/09/12 Updated the GConfig and About windows. Force destruction of existing Show window before a new one may be created; this finally should fix persistent bugs. 11/13/12 Allow "update" as a command type for save command; previously it was the default option but could not be specified manually (except with "save off"). 11/14/12 Added Help menu links to Inforum web site. 11/15/12 Fixed crash in Editor pop-up menu Type Series when multiple lines were selected. Added Graph Series pop-up menu item. 11/19/12 Rewrote various fill(s) routines to update pend pointer. Reworked @-functions to update pend pointer. This helps to fix up equation printing for r command, equation saving with save command, and titles for () shortcut in graph command. Need to watch output for other routines that rely on fill(s) routines. 11/27/12 Fixed problem with expansion of %linelen. 12/05/12 Fixed problem with printing of settings with line command. 12/12/12 In Resector class, increase maximum number of sectors from 600 to 1500. 12/14/12 Tweaked gridtype. 12/17/12 In ipch command, switch from scientific notation to standard notation for printed coefficients. Fix likely problem when printing the number of parameters to be read by the model. 01/02/13 7.3848 01/07/13 Forced writing of index file after turning off workspace cache. In wsdump, fix problem when printing a series with only missing values, and fixed problem with dates that could lead to incomplete printing of data, and eliminate automatic zapping after dumping data. 04/01/13 Added %fabs(), %log(), %exp(). Allow negatives in %-function numerical arguments. 04/11/13 Attempt to fix bug in function command where an existing argument list gets lost, and thus the attempt to restore it fails. 04/12/13 In findvec, ensure that vam file is open before attempting to search it. 04/18/13 Fixed up show window save functions (still prone to failure). Fixed f command to allow "f x{2008-%fdates2} = y". 04/24/13 In editor, LoadFromFile failed when the file was open for writing, e.g. with the save command. Store filename in save command; check whether it is open before attempting to open with editor (better way to do this?). Reworked find() to do a proper vam-file search when called by G7 routines like exists(). 04/25/13 Fixed numerical problems in ls command. 05/02/13 Redefined "xl name ws <name>" so that name is optional; if not given, then the existing worksheet name can be recovered with "%xls". Attempted to fix problem with listnames command, where G bank associated with a Vam file was not searched. Are matrix names listed? 05/16/13 Redifined BREAK and CONTINUE codes to avoid interferance with 8-bit extended ASCII representations. 05/21/13 Added "wsreset [<path>]" command to allow the workspace to be cleared and a new workspace established with new parameters and possibly in a new location. If "g.cfg" is included in the path, then G7 automatically will open and read it; otherwise, the GUI will prompt the user to find and/or accept the settings in the optionally-specified directory. This needs more testing. Added sanity checks to dates in GConfig, but more is needed; sanity checking witin the GUI would be nice so that the user can fix problems. Modified feed() to check for and return characters of unchopped words; without this, unchop() followed by feed() has missed the unchopped words. G7.3849 05/23/13 Modified %xlcol(<arg>) to take either a column number and return equivalent letters or column letters and return the equivalent number. Fixed problem in %strcmp() and related functions, where the return value was not set properly. In RunCmdFile(), add another check for error codes returned from chop(). 05/28/13 Added tolerance option to ras commands (-<tolerance>), where the default value is 0.000002. 06/29/13 In ls command, now return error if series cannot be found; old practice was to add a series of missing values. 08/02/13 Added %exists(<series_name>) to return 1 (0) when a series is found (not found); the exists(<series_name>) routine provided in the if() command now is depricated. Added %sexists(<series_name>) to return 1 (0) when a string name is found (not found). 08/23/13 Fixed problems that prevented the opening of the InterDyme dialog. 2013 World Conference: G7.386 09/06/13 Increased buffer size in fcmd. 10/14/13 Added frequency conversion function to GDates class. Added frequency conversion for the printing of dates in Excel::WriteNumberArray" 12/09/13 Changed some integer variables in G7 graph routines to floats to eliminate problems when long time series caused the graph width to be compresses. G7.3861 07/01/14 Tried to fix a bug in freq, added frequency checks to the ls command, and prevented ls from changing the frequency of a series. 08/15/14 Allow multiple series to be specified in del command. 08/16/14 Added "str store args <root>" to store function/add-file arguments to root1, root2, .... 08/20/14 Added "xl gridlines [<on|off>] [<color>]" 08/21/14 Added "xl border <fc><fr><lc><lr> <option 1> [<option2>[...]]", where options are "off", color (from list), weight (hairline, thin, medium, thick), position (border[default]|left|right|top|bottom|horizontal|vertical|diagonalup|diagonaldown), linestyle (continuous|dash|dashdot|dashdotdot|dot|double|slantdashdot). Added color specification "RGB(<int1>,<int2>,<int3>)" for all xl color settings (not certain that fine control is possible). 08/23/14 Added "xl printer <option 1> [<option2>[...]]", where options are <orientation> (landscape|portrait), <area> [area <fc><fr><lc><lr> | <off>], <print> 08/24/14 Added routines for managing chart sheets within a workbook. Most routines that control worksheets (by specifying "ws" or "worksheet") now also may be used to control chart sheets ("ch" or "chart"). These include xl open, xl create, xl name, .... 08/26/14 Added "xl graph title ["<title>" [font <options>]" If a title is given, then it is imposed on the active chart. If not, the title of the active chart may be recovered with %xls. The title name should be specified with surrounding quotes. It may be followed with "font" and font options, including color, typeface, size, single or double underline, bold, italic. 08/27/14 Modified "xl create [before|after] <ws|ch> [<name>]" to set the postion of the new object relative to the active object; the default is "after." Improved the %eliteral() routine so that it can be applied more widely. 08/27/14 Added conditional formatting. xl cf <fc><fr><lc><lr> <number of conditions: 1-3> <type1> <operator> <condition1> [<operator> <condition2>] [font <options>] [border <options>] [background <options>] [<type2> <operator> <condition1> [<operator> <condition2>] [font <options>] [border <options>] [background <options>] ] [<type3> <operator> <condition1> [<operator> <condition2>] [font <options>] [border <options>] [background <options>] ] where font options include color, bold, italic, single or double underline; border is not implemented yet; background options include color. The number of conditions must match the number of rows. Each row must begin with "value"; "formula" will be offered later. Operators must be <=, <, ==, !=, >, >=, or !=. If a second condition is specified and the first operator is < or <=, then the second operator must be > or >= (not between), or if the first operator is > or >=, then the second operator must be < or <= (between); otherwise, any second operator and condition will be ignored. A condition may be a number, string, or cell address. 2014 World Conference: G7.387 09/19/14 Added setveclag <vector> [<# lags>] to get|set number of lags for a vector in the default vam file. 01/20/15 Began revisions of BankOpen GUI. 02/03/15 Began work to allow regressions equations to be saved in G7 equation format with the "gf" option with the save command. Change regression coefficient printing to save files to avoid "+ -" sequences with negative parameter values. When addprint is off, do not print "add <filename>" statments to screen. 04/01/15 Added Close (Esc) to gridtype menu. Fixed error message in showcmd. Consecutive views of packed matrices in showcmd can fail to display changes made to the data by pmatin; force store of loaded vector at top of pmatin, as this will force all subsequent commands to reload data and thus should fix the problem. Added sanity checks to reading of ini file and improved default values. 04/02/15 Improved reading of g.cfg, and tried to eliminate infinite loop when valid g.cfg file was not found. Add check to mcopy to ensure that source bank frequency matches destination bank frequency and that both match fdates frequency or specified date range frequency. 04/10/15 Added 'c|r' option to coef to divide columns (default) | rows by the given vector. G7.389 04/22/15 Attempt to fix memory problems related to series titles in graph routine. 04/29/15 Attempt to fix bugs in the show and ras commands. 05/05/15 Introduce ability to read a range of dates in xl, and then recover date and components with keywords and to read a corresponding range of data with possibly non-contiguous dates. xl read <col1> <row1> date [<col2> <row2>] # If range is given, then either col1=col2 or row1=row2 xl setfrequency <frequency> # Specify from valid G7 date frequencies: 1, 2, 4, 12 (note ambiguity with Excel dates, e.g. for quarterly frequency) xl read <col> <row> <direction> <series> "xldates" # Read data, storing to given date set. The set of dates are stored in Excel date format, where a single date may be recovered with the %xldate keyword. The same may be recovered in G7 date format with %xlgdate, or the date components may be recovered as %xlyear, %xlquarter, %xlmonth, and %xlday. 05/07/15 Fix up rs ctrlmatrows command. 05/13/15 Fixed problems in xl vecwrite. 05/28/15 Revised coef command code to avoid numerical problems. G7.3891 06/30/15 Attempt to fix buffer overflow problem with gtf/gti and long titles that appeared when printing data to file. 07/06/15 Attempt to fix bad printing of graph series names. 07/10/15 Fixed problems affecting xl freeze and similar commands, where changes were not made to the intended worksheet. Make 'xl write "<>"' print floating point values or integers to the spreadsheet when numbers are provided; previously, numbers were written as strings, though strings still can be forced with "'<number>". G7.3892 08/14/15 Added keywords to read main window and editor window settings: %mainfontname, %mainfontsize, %mainfontcolor, %maincolor, %mainfontcharset, %mainautofontsize, %mainfontbold, %mainfontitalic, %mainfontunderline, %mainfontstrikeout, %autocomplete, %edfontname, %edfontsize, %edfontcolor, %edcolor, %edfontcharset, %edfontbold, %edfontitalic, %edfontunderline, %edfontstrikeout 08/15/15 Added pause <number> to pause for a specified number of seconds, 0<=t<=1000 seconds, and then to resume. Added run-to-cursor F11 editor shortcut. Added commands mainfontname <name>, mainfontsize <size>, mainfontcolor <color>, maincolor <color>, mainautofontsize <0|1>, mainfontbold <0|1>, mainfontitalic <0|1>, mainfontunderline <0|1>, mainfontstrikeout <0|1>, autocomplete <0|1>, edfontname <name>, edfontsize <size>, edfontcolor <color>, edcolor <color>, edfontbold <0|1>, edfontitalic <0|1>, edfontunderline <0|1>, edfontstrikeout <0|1> where font names and colors may be taken from the lists in the xl help pages and where other options may be specified as 0|1, yes|no, false|true, or off|on. G7.3893. 08/21/15 Make rs commands a bit more robust, and improve error messages. Fixed bug that required number-of-sectors specifications in the rs config file to exceed the actual number of sectors. 09/17/15 Initialize arrays in logit, rcmd. In type command, correct problem with tdate_2 vs max_obs check that allowed buffer overrun. 10/08/15 Increased maximum dimensions of resector keys to 2,500 rows and 20 columns (from 1,500 rows and 10 columns). 10/09/15 Fix broken rs aggmatrix. Change syntax to rs aggmatrix NRFrom NRowTo NColumnFrom NColumnTo FromMatrix ToMatrix to allow operations on rectangular matrices. In rs aggmatrix and rs aggmatrows, allow key dimensions to exceed matrix dimensions (skip excessive index values). Try to eliminate numerical trouble in coef and improve checking of fdates range vs vam bank date range. 10/16/15 Fixed memory management problems in load and pmload functions. 11/04/15 Fixed a small bug in @yoy(). 01/26/16 Eliminated unnecessary save prompt in G Config GUI. Make "type (<expression>)" print the expression before printing the data. 02/11/16 Fix search for existence of series when macro bank is not linked to vam bank (affecting %exists()). 02/12/16 Allow "%{%1}<digit> where %1 = <text><digit> (i.e. allow text within %{}; in example the %{} allows separation between the "%1" and the following integer). 03/24/16 Add Close All Banks and Assign Data Banks buttons to Currently Assigned Banks GUI. 03/28/16 Improved handling of sector titles in show (allow display of data when title files are missing). Allow longer abreviated titles (up to 50 characters); auto- adjust row|column widths for longer abreviated titles. Show full row|column title as Hint when abreviated row|column title is clicked. Close title file after reading by show. At end of show command, allow "[-rowtitle <rowtitle>] [-columntitle <columntitle>] to specify alternative title files. 04/12/16 Attempt to fix bug in vc command where (vc x = y / sum * 100) fails when size(x) > size(y). Allow show command to substitute row|column titles from another file: show <object> [<r|c|y> <row|column|year>] [[<first row>] [<year>]] [<-rt <filename>>] [<-ct <filename>>]. 04/13/16 Keep focus on Editor Find and Replace dialog boxes after execution to ease subsequent searches. 05/03/16 In wsreset, close groups.bin file and reopen in new directory. Fix problem with specified target directory|file in wsreset. 05/06/16 Improve function of Currently Assigned Banks GUI buttons (03/24/16). When opening Show to a specified cell, select the cell so that pressing an arrow key starts navigation from the specified location. Close Look window when associated bank is closed. When Editor is in focus and F3 is pressed, if a match is found then do not shift focus to Find GUI. 05/07/16 Add "xl font <fc><fr><lc><lr> TF(<typeface>)" (TF or typeface) to allow system fonts. Add "xl font <fr><fc><lr><lc> textwrap [off]" (textwrap or wrap) control text wrapping. Add "xl row height <row> <height>" to set row height. 05/12/16 Attempt to fix memory problems in @bmk(). 06/03/16 Add "xl font <fc><fr><lc><lr> format(<format>|off)" to allow specification of general, number, currency, accounting, date, short date, long date, time, percentage, fraction, scientific, text, off, or custom settings. Complex and multiple word settings must be wrapped in "", and "off" and custom settings must use the "format(<>)" syntax; other settings may be stated simply as "general" or otherwise. Same syntax for "xl setfont". Add "xl font <fc><fr><lc><lr> separator("<separator>"|off)". The "("<separator>")" may be omitted to employ the default ",". The setting will be stored, but it only will be applied to cells if a format specification has been or will be given. Precision still is controlled by the G7 format command. 06/23/16 Modify changeDir() in attempt to fix trouble that appeared in wsb. 07/30/16 Attempt to eliminate numerical problems in @bmk(,,g) routine. 08/03/16 Added error checking in data command. 08/18/16 Improve dates check in xl routines. In xl read, allow '"xldates"' as well as 'xldates'. Allow empty cells within xl read dates range. Fixed problem with xl setfrequency. Fixed various problems with reading an array of Excel dates. G7.3895. 10/06/16 Correct printing problem affecting dir command. 10/27/16 Add bank title to listbank output. Add sanity check of precision specifications in gridtype (note: gridtype gdp <date1><date2) sometimes caused infinite loop; sanity checking might help, but not clear that the problem is corrected completely). Try again to force the graph control bar to appear in front of all other windows. Create routine to check window placement: if the window is in a position off the visible desktop or too near the edge, reposition edge to 10 pixels from the edge of the desktop, and ensure that width|height is at least 10 pixels. Check all windows created with ShowModal, as they must be closed before control is returned to the Main window. Otherwise, check window placement when the Main|Windows menu item is selected. Ensure that window size does not exceed desktop size. 11/02/16 Fixed bug in xl column addition routine that was causing xl read 1 D to read too far (so D + 230 = IZ instead of HZ). 11/11/16 Probably not used in G7, but change maximum packed matrix number from 30 to 100. 11/26/16 Modified underlying code for vc, as vc y=1/x did not work, where y and x are vectors (seemed always to calculate y=1*x). 02/14/17 7.3897 01/23/18 Fixed faulty check in show command. 05/30/18 Fix bug in %strncmpi routine. 7.3899 07/26/18 Attempted bug fix in vmake. Attempted bug fix in wsreset, where chdir sometimes did not work properly. 7.38991 01/15/19 Added "xl column delete <column>" and "xl row delete <row>" commands. 07/25/19 "lis -s f gfnd*R" caused hang on series gfdn; fixed. Updated copyright to 2019. G7.38992.