Xtme and Tkme: Editors for formal metadata

Revision history

Date Description of revision
2-Oct-2006 Modified decode_help() in help.c so that it fails gently if NULL or an empty string was passed as its argument. (tkme 2.9.21) (xtme 2.7.16)
2-Mar-2006 Modified help mechanism to automatically load the correct help file based on the specified language. Create German and French versions of the help file from the respective Standard translations. (tkme 2.9.19)
7-Feb-2005 Modified parse_xml() in xml.c to reinitialize the root and current node pointers every time this procedure is called; these are static pointers local to the xml.c module which need to be cleared when the Tkme user closes a file in order to open another one, otherwise the XML parser is trying to build a parse tree on top of the previous tree, which has already been deallocated. Thanks to Peter Neri (Teleatlas) for noticeing the problem. (tkme 2.9.16)
7-Jul-2004 Modified tkmerc.tcl to add items to the context menu for the structure window. Duplicate, Clear, Prune, and Save as snippet are now shown on that context menu, with a separator between them and the basic three (Cut, Copy, Paste). Modified tkme.c to add tip text for those new context menu items. (tkme 2.9.10)
24-Feb-2004 Modified tkme.c to read the help file after processing the config file and setting the language for the element names. With this arrangement, sections in the help file that are written with foreign-language element names or extensions will be recognized correctly and help can be displayed for them. xtme already did this correctly. (tkme 2.9.8)
14-Feb-2004 Modified the error output of both local.c and config.c to send the errors and warnings to a buffer rather than to the FILE *out used as a global variable. Added two functions, config_errors() and ext_errors() each of which returns one of the buffer addresses. The calling program determines if and when the errors from parsing the config file and extension files are to be shown to the user. Modified tkme.c to add Tcl functions carrying these two C functions into the Tcl namespace. Modifed Tkme to create a messages window if either the config file or any of the extension files generated errors or warning messages. These are shown to the user at the beginning of the session. (tkme 2.9.7)
16-Jan-2004 Modified set_text_cmd() in tkme.c so that it recognizes as compound an unknown extension whose children are not plain text (previously the element was recognized as compound only by its having a known element list defined in actions.c). (tkme 2.9.4)
23-Sep-2003 Modified extension-handling and XML parsing code to allow unrecognized elements in XML to be manipulated by Tkme and Xtme. (tkme 2.9.3) (xtme 2.7.2)
2-Apr-2003 Modified local.h to correct for number of compound elements possible in the extensions. Modified tkme.c to put a cast in the Tcl_CreateCommand function calls to avoid a warning (because I don't declare the functions with const keyword for argv). Thanks to Neil Deeds (INTERA Inc) for triggering my investigation of the problem in local.h.
19-Mar-2003 Using a specialized Tcl script, I converted the extension definitions from the three formal profiles (bio, shoreline, remote-sensing) to a format compatible with Tkme's help file. This required a minor change in help.c as well. Now you can get help on elements from these profiles. (tkme 2.9.1)
21-Feb-2003 Modified save_geometry{} in tkmerc.tcl to also save the characteristics of the fonts used, so these will be persistent from session to session. Thanks to Mark Mihalasky for suggesting this improvement. (tkme 2.8.21)
11-Oct-2002 Modified tkmerc.tcl adding save_geometry{} procedure to write the window positions and sizes to a file geometry.tcl in the same directory as the recent files list. This file is run by source when the program is started, restoring the size and positions of the windows that were visible when the program was last stopped. By default the help window is deiconified but the output window is not (otherwise the output window will be blank). Thanks to Nina Savar for prompting this development. (tkme 2.8.20)
2-Jan-2002 Modified add_element{} in tkmerc.tcl so that if the element that is added is the root element, then the Open, Configure, and Recent choices of the File menu are disabled. Thanks to Archie Warnock for pointing out that prior to this, you could create some metadata using the Add menu and then read some existing metadata using the Open or Recent choices, which appended the opened record onto the metadata that you had just created with the Add menu, not generally what we want to happen. (tkme 2.8.15)
1-Nov-2001 Modified view_wrap{} in tkmerc.tcl so that it changes the right entry in the popup context menu for the value widget. Previously when you selected Wrap, this code changed the Revert entry to read No Wrap, but Revert was still the function of that menu entry. (tkme 2.8.14)
21-Aug-2001 A strange and unusual situation caused Tkme to crash. If an XML file contains mixed content in one of the elements, this violates the data model we're working with and cannot be rectified automatically. Instead, when the file is read, we return an error message and discard the data as though it had not been read. This occurred when an XML file contained the elements:
<place>
<placekt>Name of the thesaurus
<placekey>term1</placekey>
<placekey>term2</placekey>
</placekt>
</place>
Note that here element placekt contains both the text of the thesaurus name and the placekey elements which are terms from that thesaurus. This is somewhat analogous to the situation in a text file where an element name appears at the beginning of a line in a data value. But in that situation it is mp's parser that has misinterpreted the data, not invalid structure per se. Consequently it can be repaired automatically. But in the case shown above the fault lies in the generator of the XML code, and it cannot reliably be repaired. (tkme 2.8.13) (xtme 2.6.6)
25-May-2001 Modified write_xml_item() in xml.c to examine the static variable element_order when writing the children of an element. element_order is an enum that can be either STANDARD or ASIS (in future there could be others). If its value is STANDARD, then the elements are written in the order given in FGDC-STD-001-1998 and extensions are written after all standard elements. This is and has been the default behavior. If the value is ASIS, then elements are written in the order they appear in the parse tree (as input in mp, as modified by Tkme).
Modified config.c to recognize the element "order" which will be used when found under output:xml.
The effect of this change is to allow people to explicitly request that mp and Tkme NOT rearrange the elements in the order given in the FGDC standard. Since most profiles have not put extensions after all standard elements, using the standard order causes the extensions to be put out of the order expected in the profile. This change allows mp and Tkme to retain the input order. (mp 2.7.11) (tkme 2.8.10) (xtme 2.6.3) (mq 2.5.7)
16-May-2001 Modified tkmerc.tcl to put a disabled command button at the top of the context menus for the element structure and value windows. This serves as a label for the menu. However it's really there because I found that if I just quickly pushed the right mouse button and released it, the first menu item was activated. In each of these menus the first item is "Cut"; so I felt it was too easy for a naive user to unwittingly remove the selected element or text through a single, furtive click of the mouse. Now the menu's title is the first choice, and it takes no action. (tkme 2.8.9)
13-Mar-2001 Modified tkmerc.tcl encapsulating in a separate procedure the code that writes a new file name into the recent-files list and creates an item for the file in the menu if it is not already there. Previously this was part of file_open{}, but as Doug Dale-Johnson kindly pointed out, this operation should also occur when a file is saved using a new name.
8-Mar-2001 Modified bindings in tkmerc.tcl to simplify and make them more uniform across platforms. Now Alt-keys affect the structure and Ctrl-keys affect the value and general program operation. Also made it so that when text is selected in the value widget and a paste is performed, the selection is deleted before the paste. This affects Windows and not Unix because under X the widget loses its selection when another application makes a selection. (tkme 2.8.8)
6-Mar-2001 Modified element_add_cmd() in tkme.c so that elements are inserted in correct order when a blank is present at the head of the list of children. Previously if you wanted to add a child using the Add menu and the first sibling was blank, the new child would not be placed properly.
Modified paste_subtree() in tkme.c so that the same general rules are followed when pasting subtrees either using the Edit:Paste mechanism (main menu, popup context menu, or Ctrl-V keystroke) or the snippet insert menu option. (tkme 2.8.7)
10-Jan-2001 Modified file_save{} and file_save_as{} in tkmerc.tcl so that they properly handle situations in which you cannot write the file because its permissions, or that of its directory, do not allow you to do so. The local function can_write{} helps to do this. Thanks to Doug Dale-Johnson for pointing this problem out. (tkme 2.8.6)
3-Jan-2001 Hugh noted: "When you close a file in tkme, the window retains the name of the file you just closed - it should go to 'unnamed' or something." I've modified tkmerc.tcl so that the main window's title bar text is "Tkme: (file name)" when a file is loaded, and "Tkme: (no file loaded)" if you close a file. When you open another file, the window title is updated to reflect the new title. (tkme 2.8.5)
2-Jan-2001 Modified tkmerc.tcl so that when the recent-files list is read or updated (once at startup, and again every time a file is opened), if any of the files named in it does not exist, that file is not included in the menu File:Recent. When the recent-files list is updated, any file that does not exist will be omitted from the list. Thanks to Hugh Phillips for suggesting this improvement. (tkme 2.8.5)
18-Dec-2000 Modified read_metadata{} in tkmerc.tcl so that the absolute path to a file is always used. Also fixed same proc so that the currently-opened file is added to the recent-files menu (fixes incorrect implementation in 2.8.3). (tkme 2.8.4)
15-Dec-2000 Modified tkmerc.tcl so that you get a prompt if you select File:Close and the file has been modified.
Modified tkmerc.tcl so that when you open a file, its name gets added to the menu under File:Recent immediately, so that if you close it, you can easily reopen it.
Thanks to Hugh Phillips for pointing these problems out. tkme 2.8.3
23-Oct-2000 Modified the code in tkmerc.tcl handling the list of most- recently-opened files.
Modified tkmerc.tcl to catch <Return> typed into the output window's search text box. Pressing Enter now executes the search. To search again, click "Find".
Modified tkme.c so that it explicitly sets the Tcl variable "changed" when the structure is changed. Modified get_text_cmd() in tkme.c so that it does not set this variable but instead returns 1 if the value was changed and zero otherwise. These changes seem to fix the problem that Tkme was prompting the user to save the file even immediately after saving the file through the File:Save menu options.
Added a menu option "Replace" under Edit. This brings up a dialog box allowing you to replace all occurrences of a search text string. You can choose to do this (a) only in the current data element (if the current element is a data element); (b) in all elements below the current element; or (c) throughout the whole file. A check-button allows you to require the letter cases to match; by default the search string will be replaced even if it is capitalized differently in the text. (tkme 2.8.1)
16-Oct-2000 Many changes to Tkme's code in tkmerc.tcl and tkme.c.
Context menus are now available in the list window, the value window, and the help text window. Popping up when the Right mouse button is pressed, these typically allow a window-specific Cut, Copy, and Paste, and in the value window include Revert, Wrap, and HardWrap. Tips have been enabled for all of these choices.
The File menu now includes a Close choice. This saves the current file and clears the list and value windows, readying the program to open another record.
It is now possible to use the snippets interface to insert a metadata template (that is, a snippet can have as its root the element Metadata). This works only if you haven't read any metadata yet, since you can't pin Metadata anywhere within Metadata.
Bindings have been cleaned up significantly, so that Ctrl-X, Ctrl-C, and Ctrl-V should cut, copy, and paste (respectively) in a logical way wherever you are.
The text cursor in the value window is now thicker and colored dark red, so as to stand out more clearly.
Thanks to Doug Dale-Johnson (Saskatchewan Environment) for helping to identify these needs and test the solutions. (tkme 2.8.0)
12-Oct-2000 You're editing your metadata record and have made some substantial changes to the text of some elements. You haven't saved your work, and you begin changing the value of another. By a slip of the fingers or mouse, you manage to mix it up so badly you want to get the previous value of this element back the way it was when you started editing it. But there's no way to do this; if you quit without saving, you've lost the changes that you made to the other elements, and if you save the current version, you've lost the previous value of the element that you're on now.
One solution is to choose Save As from the File menu, save the current record under a new name, edit both records, cut the old value from the old version of the file, and paste it into the new version of the file.
Another solution is the Revert choice of the value widget's context menu, which pops up if you hold down the Right mouse button when the pointer is inside the value widget.
The Revert choice causes the current value's text to be replaced by whatever it was when you began editing it. If you move to another element and return, the value of the current element is saved, and it is that newly-saved value that will be restored if you choose Revert. So it doesn't restore the original text of the element, just the most recently-stored value. (tkme 2.7.1)
10-Oct-2000 When I included the bio profile elements, I made it impossible to use the same elements as extensions even when the bio profile was not being used. This is because the bio profile elements are kept by mp in the same bucket that it uses for standard elements, and you can't use an extension that has the same name as a standard element. Some of my geological data sets use the geologic age extensions, which are taken from the bio profile, but they don't use the rest of the bio profile. One solution would be to simply use the bio profile for these records. In this case the geologic age elements are recognized properly, but a spurious error message is generated because the bio profile includes one mandatory element, Description_of_Geographic_Extent within Spatial_Domain. The missing element is flagged as an error.
The correct solution is for mp and friends not to know the bio profile elements unless the bio profile is used by choice. That way the same elements can be introduced as extensions in the usual way. So I modified keyword.c and made some changes to the main programs as well, to introduce a function use_element_names (language,profile). This function selects standard element names using the requested language, and adds to them the profile element names (any profile you want, as long as it's the bio profile). (mp 2.7.1) (mq 2.5.1) (cns 2.6.1) (tkme 2.7.1) (xtme 2.6.1)
6-Oct-2000 Added direct support for the Biological Data Profile (FGDC-STD-001.1-1999) to all programs. This involved modifications to keyword.h, keyword.c, actions.c, config.c, syntax.c, mp.c, tkme.c, cns.c, and xtme.c.
Activate support for this profile by specifying "profile bio" under "input" in the config file. (mp 2.7.0)
28-Sep-2000 Modified tkmerc.tcl to configure the listbox with exportselection false. This causes the highlighting of the current element in that widget to not disappear when you select text in the value window. (tkme 2.6.4)
28-Sep-2000 In tkmerc.tcl, created new procedure view_toggle{} that hides the current element's children if they are visible and shows them if they are hidden. This procedure is now bound to a double-click of button 1 in the list widget. (tkme 2.6.4)
28-Sep-2000 Modified element_add_cmd() in tkme.c so that whenever an element is added, any hidden siblings of the new element become visible. This bothered me because I saw that you might add a child of an element whose other children were not visible; the display was thus a little misleading:
+  Process_Step
     Process_Date
In this example, the plus sign indicates that this particular Process_Step element has some children that are currently hidden, and the new Process_Date element that we just added is only one of them. By forcing the hidden siblings to be exposed, the user can immediately see the context in which the new element has been added. (tkme 2.6.4)
25-Sep-2000 Modified local.c to output more informative messages when a problem is encountered in building the extensions list. Since this does not affect the program's normal operation, I'm not changing its version number. Applies to mp, cns, xtme, and tkme.
25-Sep-2000 Modified set_current{} in tkmerc.tcl so that if the list has no elements, the procedure simply returns without doing anything. This avoids a crash that occurred when someone clicked the list window before adding any elements. Thanks to Hugh Phillips for pointing this out. (tkme 2.6.3)
18-Sep-2000 Modified tkmerc.tcl so that, under UNIX, the snippets directory and the list of recently-opened files are stored in a subdirectory .tkme of the user's home directory. Further, the name of the list of files most recently opened is now called recent_files instead of tkme.rc. (tkme 2.6.2)
18-Sep-2000 Modified tkme.c to insert new elements (from the Add menu) in the proper order. Since Tkme doesn't enforce element ordering anyway, it's possible to rearrange the elements and get results that you might not have expected in some unusual circumstances. Tkme tries first to put a new element immediately after the last element of the same type within the subtree. If there is no element of that type already present, it puts the new element before the first element that appears later in the Standard than the one you're adding. Extensions always occur after standard elements. (tkme 2.6.2)
1-Sep-2000 Modified snippets interface so that subdirectories of the snippets directory appear on the Snippets menu as cascades, which means they expand to show the snippets they contain.
Subdirectories of the snippets directory can be created directly through the underlying operating system. Depending on the OS, you might be able to create a subdirectory from within the save-file dialog when you're deciding where to store the snippet. In this case the snippet will appear inside a cascaded submenu named for the subdirectory that you have created. (tkme 2.6.1)
31-Aug-2000 Implemented snippets interface in Tkme. Snippets are short sections of metadata that you want to save for later reuse. They're stored as plain text files in a subdirectory called "snippets" within the same directory where your tkme.rc file resides.
At startup, all of the files in the snippets subdirectory appear on the menu named "Snippets". When chosen from this menu, the snippet is read, parsed, and inserted at the current node as though it were pasted from another Tkme window.
To store the current node as a snippet, choose "Save as snippet" from the Snippets menu. A standard save-file dialog is shown. Give the snippet a name; it will be the name of the file in which the snippet is stored. Don't choose a different directory; snippets can only be retrieved from the "snippets" directory.
To get rid of a snippet that you don't want, simply delete the file in which it is stored. (tkme 2.6.0)
4-Aug-2000 Added limited support for foreign languages. This is implemented in mp, cns, xtme, and tkme through a command-line option -l <code> where the code is "es" for Spanish and "id" for Indonesian. Preferred language can also be specified in the config file using
input
  language es
Replace es with id for Indonesian; en would be for English, but if the value is unrecognized or missing the software will use English element names. (xtme 2.5) (tkme 2.5)
13-Jul-2000 Modified tkmerc.tcl to include an experimental menu option HardWrap, which causes the current element's text to be reformatted so that it will fit inside an 80-character line, including the space needed for 2-space indents. This feature is likely to be refined somewhat after testing. (tkme 2.4.6)
13-Jul-2000 Modified tkmerc.tcl to bind Ctrl-p (Alt-P) to the Prune function. (tkme 2.4.6) (xtme 2.4.5)
7-Jul-2000 Fixed a bug in the xml parser pointed out by Frank Roberts that caused incoming &amp; to be ignored. (xtme 2.4.3) (tkme 2.4.4)
10-May-2000 Modified tkmerc.tcl to divide the panes horizontally rather than vertically. Also made the width of the scrollbars 10 instead of the default 15, the position of the grip at 0.9 of the height of the frame rather than 0.8, and increased the size of the grip to 15 from the default of 10. (tkme 2.4.4)
4-May-2000 Modified tkmerc.tcl to use the pane manager code found in Brent Welch's book "Practical Programming in Tcl and Tk, 3rd edition" in chapter 25. This allows users to adjust the division between the element list window and the element value window using a grip. (tkme 2.4.3)
17-Apr-2000 Modified the code in read_metadata{} in tkmerc.tcl so that the catch encloses only the attempt to open the file containing the list of recently-opened metadata records. This change should make Tkme not complain when the tkme.rc file is not present. (tkme 2.4.2)
22-Feb-2000 Modified xtme.c to fix bug in which a segmentation fault occurred after the metadata had been saved to disk and before exiting, but only if no metadata were read on startup, a rare circumstance. (xtme 2.4.3)
28-Jan-2000 Significant changes to memory management for all programs, including xtme and tkme. See mp documentation for details. Also fixed bug in tkmerc.tcl that caused "No Wrap" to replace "Dismiss" in the View menu of the Output window if you selected the "Wrap" option. (xtme 2.4) (tkme 2.4)
10-Dec-1999 Modified tkmerc.tcl to move the search facility from a separate toplevel and put it into the output window's menu bar. Also changed output_search{} so that the output text widget takes focus when that procedure is invoked (by pressing the "Find" button on the menu bar of the output window). (tkme 2.3.14)
24-Nov-1999 Modified xtme.c to not assign out to stderr in the declaration of out, since stderr is sometimes not a constant. Instead out is assigned to NULL in its definition statement, and as the first executable statement of main() out is assigned to stderr. (xtme 2.3.8)
2-Sep-1999 Modified file_open{} in tkmerc.tcl to allow user to filter the file display based on types. Default display is "Metadata files" with extension ".met". Additional extensions specified in the config file elements input:ext are also included as metadata file identifiers. Other built-in choices are "Text files" with extension .txt or .text, "XML files" with extension .xml, "SGML files" with extensions .sgml or .sgm, and "All files", which includes everything. To support this feature, a C function ext_list_cmd was added to tkme.c that could be called by Tcl as [ext_list]. It returns a string containing all of the extensions specified in input:ext config elements. (tkme 2.3.12)
30-Aug-1999 Modified swap_cmd() in tkme.c to generate an empty result and return TCL_OK if swap is called when the first child is selected (and hence there is nothing to swap with). Previously this returned a harmless but superfluous error without a message. (tkme 2.3.11)
24-Aug-1999 Modified tkmerc.tcl so that it provides a sub-menu cascading from the Recent option of the File menu. That sub-menu contains the contents of the file ~/tkme.rc (for UNIX) or /usgs/tools/tkme.rc (for MS-Windows). Whenever you open a file, if it isn't in this list, its full path gets put into the list, so the next time you open tkme, you can simply pick it from the list. The list can have at most 10 items in it. This could be increased easily but I suspect that 10 is enough for most people, and more will clutter the user interface. Thanks to Hugh Phillips for suggesting this. (tkme 2.3.10)
24-Aug-1999 Added an action to xtme and tkme that inserts the current date in the value text as YYYYMMDD. This action is bound to Alt-t under UNIX and Ctrl-t under MS-Windows. (xtme 2.3.7) (tkme 2.3.10)
16-Aug-1999 Modified tkmerc.tcl to call the C function get_text only within a new procedure named save_current{}. Added save_current{} to the list of commands bound to the listbox. That was a bug in which an edited value wasn't remembered if you moved to another element by clicking the element with the mouse. This bug was introduced by the most recent revision, which correctly moved the save function out of set_current{}. Thanks to Hugh Phillips for pointing this problem out. (tkme 2.3.9)
29-Jul-1999 Modified tkmerc.tcl to save the text of each element before changing the element lists, not in set_current{}. Modified tkme.c to better handle the situation where the user wants to jump to an element using the Edit button of the output window but has already edited the value of that element. Problem was that when the element's value got replaced, the item pointers in the list consulted by item_of() would become invalid unless the user selected Update from the View menu. I made it search up the list (towards the top element) for a line in which item_of() returns a valid node pointer. Turns out for normal editing this is just fine for small changes. (tkme 2.3.8)
29-Jul-1999 Modified many of the callbacks in xtme.c to call get_text(current) before doing their action. This saves changes made to the current text value, if any. In particular this affects menu items such as prune, duplicate, and swap, and those under the View menu. Thanks to Hugh Phillips for pointing out this behavior in Tkme; turns out that xtme did it wrong also. (2.3.6)
26-Jul-1999 Modified the previous change so that parse_xml_string() is called when the first character of the selection is '<', rather than when the first two characters are "<?". This makes it so that you can get either an XML fragment with an XML declaration or one without an XML declaration.
23-Jul-1999 Modified get_selection_cb() in xtme.c and paste_subtree_cmd() in tkme.c to call parse_xml_string() (in xml.c) when the string to be pasted into the application begins with "<?". This could allow applications that produce metadata fragments in XML to paste into Xtme and Tkme. (xtme 2.3.5) (tkme 2.3.7)
2-Jul-1999 Modified output_update{} in tkmerc.tcl to change the text widget's state to normal before attempting to update it (Windows version). Otherwise the update fails. (2.3.6)
10-May-1999 Modified parse_string() in text.c to skip over newlines at the beginning of the text to be parsed. When present, these newlines were causing Xtme to see pasted text as scalar even if it really consisted of one or more blanks followed by a valid subtree. The net effect is that now if you inadvertently get some blank lines at the beginning of a subtree that you're going to paste into Xtme or Tkme, it'll ignore those blank lines.
7-May-1999 Modified xtme.c and tkmerc.tcl to add a menu item in the View menu that toggles word wrap in the value widget. I notice that in Xtme when you type a word that gets wrapped onto the next line, any parts of that word are still displayed on the current line even though they aren't really there. This is probably a minor bug in Xaw. When you go to another element and return, you see the text rendered correctly in the widget. Word wrap is off by default.
30-Mar-1999 Modified tkmerc.tcl to disable the output window's text under Windows. This works okay because you still get a cursor when the window has focus. Under Unix it doesn't because although the widget knows what line you last clicked on, it doesn't produce a visible cursor. Maybe there's a way to do this with a tag, but I don't know how to do that yet.
Modified tkme.c to skip over the leading + in the string passed to the add_menu_items command. This bug caused Tkme to regard as unknown any element whose children were hidden.
18-Dec-1998 Modified xtme.c to include a Search menu option in the View menu of the output window; all this does is call the output_text widget's search() action, specifying the forward direction.
16-Dec-1998 Modified xtme.c to make the file name the label of the output window's popup shell.
Dec-1998 Modified text.c so that when encode_text is called, it creates a list of pointers to elements in the tree, in sync with the lines in the encoded text. Added a function item_of() to return the pointer to the item given the item's line number in the encoded text. Modified the output buttons to simplify their appearance, specifically grouping the Dismiss, Update, and Wrap buttons into a menu with the title View, adding a separate button "Edit", and changing the label of the goto_line button to simply "Line:". The callback associated with the Edit button is jumpto_cb in xtme.c, with a corresponding action jumpto_action "jump-to()" that could be used in a translation. Changed the translation for <Btn1Down> in output_text to include line-number(). The effect of these changes is that when you move the insertion point in the output_text widget and click Edit, the element you're on becomes the current element in the edit window, even if it was previously hidden.
24-Nov-1998 Modified tkme.c and tkmerc.tcl to fix strange bug in edit_paste action. Thanks to Dave Hart for pointing this out.
20-Oct-1998 Modified tkme to use Cygwin32 development kit under Windows NT and 95 rather than Visual C++.
19-Oct-1998 Modified build process for tkme to use mktclapp rather than et2c.
29-Sep-1998 Modified tkme.c to write the metadata out in sgml if the output file name ends with .sgml or .sgm, or in xml if the output file name ends with .xml (these extensions are not case sensitive, so .XML or .Sgml would be equivalent to .xml and .sgml respectively).
2-Sep-1998 Modified xtme.c and tkme.c to expect about_text to be an array of pointers to strings rather than a single long string. This was done because Microsoft Visual C++ doesn't allow static strings to be longer than 2048 bytes. Modified makehelp.c to create a reasonable "About" text for tkme.
26-Aug-1998 Modified actions.c to describe CSDGM version 2. Set version of xtme to 2.0.
18-Mar-1998 Modified main() in xtme.c to correctly identify the class name of the application in the call to XtVaAppInitialize. The previous value was "Geomet", which is the application whose code I originally used to build xtme in the first place. Thanks to Curtis Price for discovering the problem of which this fix is (hopefully) the solution.
25-Feb-1998 Modified fallback resources to bind the event Meta<Key>Delete to the two actions select-all() and delete-selection(), which come from the Athena text widget. This causes the keystroke Alt-Del to delete the entire text in the value window in one stroke.
17-Feb-1998 Modified build_element_list() in xtme.c to free memory used by the lists. This should actually re-use memory instead, but at least now it won't leak.
16-Jan-1998 Modified check_scalar_children() in check.c to consult element_list_of() in actions.c to determine whether an element is a scalar rather than its own list of scalars because the list of scalars it keeps doesn't include extensions.
24-Nov-1997 Modified resources so that asciiText widget translations are given with '.' rather than '*'. This seems to fix the problem in which xtme crashed when you put the cursor into the scroll bar and typed PgDn (or XK_Next).
14-Nov-1997 Modified fallback resources for value_text to include <Key>Home and <Key>End so they go to beginning of line and end of line, respectively.
11-Nov-1997 Modified xtme.c to include a line-number indicator for the output window. The indicator is an editable text widget. The label for this field is itself a command widget whose action is to go to the line number specified in the indicator widget.
6-Nov-1997 Minor bug fix in tip_action() of xtme.c; set current_choice to NULL when clearing the tip label so that the tip label is refreshed correctly when the pointer re-enters the menu (if the menu has remained visible when the pointer left the menu).
30-Oct-1997 Modified fallback resources to not specify xtme, hoping that whatever the name of the executable this will allow those resources to be found. Modified tip_action to clear the tip when leaving a menu so as not to give the appearance that the tip text applies when a menu item is not highlit. Set keyboardFocusPolicy to explicit by default.
28-Oct-1997 Modified config.c to recognize a new element "tips" under input. The argument is a file name containing tips as follows, one per line: parent_element child_element tip_text Any line containing unrecognized elements is ignored. Delimiters are spaces or tabs, and a colon can immediately follow the element names. To use these files, xtme.c was modified to search for and read all of the tip files specified, and tips.c was modified to add the functions needed to add tips. Note that the default tips can be replaced using this mechanism.
26-Oct-1997 Modified make_add_menu() in xtme.c to cache the XtTranslations so that they need not be parsed every time we create a new add menu.
22-Oct-1997 Modified xtme.c to support a one-line tips widget below the value window giving informative assistance on menu items. The tips database is not yet modifiable by the user, so tips are not given for extensions.
8-Oct-1997 Modified add_element() in xtme.c to not crash when no element is selected and (all of the above) is chosen from the Add menu.
26-Sep-1997 Modified prune() in tree.c to not delete a blank line in a text value if it immediately follows a line containing text.
16-Sep-1997 Modified clear_cb in xtme.c to call set_text on the current element. This causes the value_text widget to update when Clear is selected from the Edit menu. Modified dup_cb in xtme.c to call get_text on the current element. This saves any text entered immediately prior to the duplicate action.
12-Sep-1997 Added the resource "min" to element_viewport and value_text in both the fallback resources and Xtme.ad. Default value is 150. This keeps both widgets from becoming smaller than 150 pixels.
23-Jul-1997 Modified xtme to call parse_sgml and write_sgml when reading and writing a file whose name ends with .sgml or .sgm (in lower, upper, or mixed case).
3-Mar-1997 Modified xtme.c to use a separate pop-up shell to hold the output window. This causes the output window to be persistent. Added a button labeled "Update" to that pop-up, which causes it to update the output text. Modified the File menu to eliminate the Close option; save and quit do the same thing. Added a pop-up dialog when saving file named "Untitled", which is what the name is if you don't start with a file name. Update the window-manager's frame title with the new name.
3-Mar-1997 Modified clear_scalars() in tree.c to traverse children backwards. This was causing a core dump in Linux but, inexplicably, not on other Unix systems. Also set the changed flag in clear_cb() in xtme.c.
8-Aug-1996 Modified tree.c to include a function prune() that, given a node of the tree, deletes all subtrees that contain no data. This function clears out not only empty scalar elements but all container elements that do not contain any populated scalar elements. The function is invoked by an option "Prune" in the Edit menu or as an action invoked from a keyboard translation.
16-Jul-1996 Modified actions.c to better handle extensions. Modified insert_item_after() in tree.c to provide backward link properly (isn't used, but should be correct anyway).
8-Jul-1996 Modified main in xtme.c to look for two command-line option constructs: -c configFile or -h helpFile in addition to the input file name. The configFile and helpFile specified in this manner supersede those specified in the normal X resource declarations, including the command-line option that explicitly invokes the resource manager.
5-Jul-1996 Modified main() in xtme.c, mp.c, and cns.c to read more than one local extensions file. This should enable people to choose more carefully which extensions will apply to a given input file.
23-May-1996 Modified cut_cb() in xtme.c to set changed when a subtree is detached. Now if you load a file and cut a subtree, the file is considered to have changed (it did, of course), so Close causes the changed version to be written to disk. Previously, if you cut a subtree and immediately exited, the file would not be updated.
30-Apr-1996 Modified build_list() in xtme.c to extend the line array when line_count equals line_limit, not just when line_count is greater than line_limit.
15-Feb-1996 Modified config.c to recognize the keyword top_level. This fixes a bug in which the correct keyword was skip_top_level. This applies to mp as well.
13-Feb-1996 Modified paste_subtree() in xtme.c to, by default, paste the subtree after the current node (the one highlighted in the list) if the subtree to be pasted will fit as a sibling of the current node. Fixed a bug in main() that allowed some children of Metadata to not point back to the root (if Metadata was not read from the file). Added an action to check the topology of the tree. This is primarily for me, but it could help a brave user diagnose future bugs. It would have helped me find past bugs.
6-Feb-1996 Modified add_element and create_add_menu in xtme.c to include an option to add all of the children of the current element. There is also an action, add-all(), that is by default bound to Alt-a, that carries out the same function. This is intended to simplify the process of populating the metadata.
26-Jan-1996 Fixed a bug in paste_cb and paste_action. These functions allow you to paste a subtree previously cut or copied from the current file. They do this without doing an ICCCM atomic transfer. But they allowed you to do it twice with the same subtree. That caused dangling and circular references in the linked lists. The modified version pastes the subtree and then replaces it with a copy of itself, so the action can be repeated.
26-Jan-1996 Modified xtme.c to update the value of Metadata_Date when the file is saved, if its contents had changed.
25-Jan-1996 Altered the makefile to cause the source file about.c to be created at link time. The file about.c contains the text that is displayed by selecting the Version option of the Help menu. In the current makefiles, the text in about.c is created by combining the file version with information derived from the UNIX uname function, the date and time, and the text contained in the file HINTS.
24-Jan-1996 I have tried to make the paste menu item operate the same way as the paste action, but I have been unable to make it work without crashing. The problem appears to lie with the time value passed to XtGetSelectionValue; when the paste function is invoked through an action procedure, the time can be taken from the event that precipitated the action or from XtLastTimestampProcessed and the selection value is obtained quickly and correctly. But when the function is invoked through the menu item's callback procedure, the time obtained from XtLastTimestampProcessed, while apparently a legitimate time value, is somehow not correct, because the program freezes for a while, then dumps core. If you know a lot about Xt programming and are willing to assist with this problem, please send email to pschweitzer@usgs.gov.
19-Jan-1996 Modified xtme.c to allow completely modeless operation, by creating a new resource keyboardFocusPolicy. If this resource, which is set to "Pointer" by default, is set to "Explicit" (case doesn't matter), then whenever the main window has focus all keyboard input will go to the value_text widget. With translations for that widget, one can control the list widget. In the fallback resources, I have assigned most of the list actions to Meta-KP keys.
Added a dismiss action to allow the help window to be closed using a keyboard translation. This is by default mapped to Escape.
Fixed bugs in functions add_child, insert_item_after, and insert_item_before in tree.c; these functions did not properly set the prev member of the child added. The reason why this wasn't noticed before is there are few functions that actually traverse the linked lists backwards. Watch for this problem in the future.
18-Jan-1996 Added Duplicate button in Edit menu, with duplicate() action. this inserts a node following the current node, and gives the new node the same key.
15-Jan-1996 Added paste functions. This doesn't yet work from the callback (i.e. through the menu), but does work through the action.
8-Nov-1995 Preliminary version complete.


Generated by whatsnew.tcl 1.2 on 19-Oct-2007 12:29