USGS - science for a changing world

Formal metadata: information and software

Xtme and Tkme: Editors for formal metadata

Metadata also available as - [Questions & Answers] - [Parseable text] - [XML]

Metadata:


Identification_Information:
Citation:
Citation_Information:
Originator: Schweitzer, Peter N.
Publication_Date: 1995
Title: Xtme and Tkme: Editors for formal metadata
Edition: (xtme 2.7.19) (tkme 2.9.26)
Publication_Information:
Publication_Place: Reston, Virginia
Publisher: U.S. Geological Survey
Geospatial_Data_Presentation_Form: computer program
Online_Linkage: <http://geology.usgs.gov/tools/metadata/tools/doc/tkme.html>
Online_Linkage: <http://geology.usgs.gov/tools/metadata/tools/doc/xtme.html>
Online_Linkage: <http://geology.usgs.gov/tools/metadata/>
Description:
Abstract:
Xtme is a program for creating and modifying formal metadata, that is, structured documentation conforming to the Content Standards for Digital Geospatial Metadata devised by the Federal Geographic Data Committee (FGDC). This editor is written using Standard C to run on UNIX systems with the X Window System, release 11, version 4 or later. It utilizes the X Toolkit and the Athena widget set, which are available on nearly all X distributions.

Tkme is an improved version of Xtme, built with Tcl/Tk instead of direct calls to the X Window System. This enables Tkme to run on Microsoft Windows as well as Unix systems.

The editors share a considerable amount of source code with the companion product, mp, a compiler for formal metadata <http://geology.usgs.gov/tools/metadata/tools/doc/mp.html> whose purpose is to verify that the syntactical structure of a file containing formal metadata conforms to the FGDC standard, and to reexpress the metadata in various useful formats. The editor is intended to simplify the process of creating metadata that conform to the standard.

The editors have the ability to recognize and process elements that are not part of the FGDC standard, provided these elements are properly described in a local file.

Xtme and Tkme are available in source code. Executable files are available for Linux, Solaris, and Microsoft Windows as well.
Purpose:
Throughout the 1980s and early 1990s, the improving capability of desktop computers to carry out complex analyses has increased the popularity of geographic information systems (GIS). As they became familiar with GIS technology, people at all levels of government, in industry, and in academia have been calling for better access to publically-available geospatial information and more general use of standard terms of reference and of standard formats for the exchange of geospatial data and information.

Answering this need is the goal of the National Spatial Data Infrastructure (NSDI), a government-wide coordination effort initiated at the Federal level through Executive Order 12906, which was signed by President Clinton in April of 1994.

A key component of NSDI is the development of a National Geospatial Data Clearinghouse, a general source of information about geospatial data that are available to the public. With the Clearinghouse a user can determine whether geospatial data on a region of interest exist and are appropriate for solving the problem at hand.

The Clearinghouse is a distributed network of internet sites providing metadata (information about geospatial data) to users in approximately the same way. Its success depends on the overall consistency of the metadata that are made available, because users are expected to evaluate metadata from numerous sources in order to determine which data meet their needs.

To promote consistency in metadata, the Federal Geographic Data Committee (FGDC), an interagency council charged with coordinating the Federal implementation of NSDI, has produced the Content Standards for Digital Geospatial Metadata (CSDGM). That document provides standard terms describing elements common to most geospatial data, and encourages people who document geospatial data sets to use these terms.

The Content Standards for Digital Geospatial Metadata (hereafter referred to simply as "the standard") describes not only the terms of reference but also specifies the relationships among those terms. The relationships, many of which are hierarchical, are complex and a formal syntax is provided to specify them.

Because the syntax of the standard is complex and the number of descriptive elements is fairly large (335), creating metadata that conform to the standard is not an easy task. In addition to the problem of assembling the information needed to properly describe the subject data sets, data producers must arrange that information using the terms given in the standard and arrange the terms using the syntactical rules given in the standard. The resulting metadata are formally structured and use standard terms of reference, hence the term "formal metadata" in the title of this report.

This software is designed to simplify the process of creating formal metadata conforming to the standard. It provides the element names, maintains the hierarchical structure, and ensures proper arrangement of elements.
Supplemental_Information:


1. Command line options

xtme is started by issuing a command to the operating system. Its behavior is controlled primarily through X resources, which may be specified on the command line but which are generally stored in an disk file in the user's home directory.

To edit an existing metadata file, give its name on the command line as an argument.

2. X resources

Standard X resources can be specified to govern the behavior of the Athena Widgets used by xtme. In addition, the following resources can be used to affect the behavior of xtme.

 configFile
This resource identifies the configuration file used for specifying input options and local extensions. The default value for this resource is .mprc, so xtme will look in the current directory for a file with that name.

 helpFile
This resource identifies the file containing text intended to assist the user in filling in element values, respectively. The default value for this resource is xtme.hlp, so xtme will look in the current directory for a file with that name.

 keyboardFocusPolicy
By default, it matters where the pointer is when you press keys. If you like pointer focus in your window manager, you are probably comfortable moving the mouse around a lot while typing. But if, like me, you prefer click-to-type windows, then you will want to change this value to Explicit. Letter case doesn't matter.

Actions for event translations

The following actions are available for use in translation tables.

 save          Write the current file to disk
 save-as       Save the current file under a different name
 quit          Exit the editor without saving
 ok-save       Accept the name given in the save-as dialog
 cancel-save   Cancel the save-as dialog
 cut           Remove the current node, making it the X selection
 copy          Copy the current node, making it the X selection
 paste         Paste metadata from this or another file
 clear         Remove scalar children in the current subtree
 duplicate     Create a copy of the current element
 help          Display guide information for the current element
 dismiss       Dismiss the guide information window
 hide          Conceal elements below the current node
 show          Reveal elements below the current node
 collapse      Conceal all elements at a given level
 expand        Reveal all elements at a given level
 list-home     Move to the root node of the metadata
 list-up       Move up one element in the list
 list-down     Move down one element in the list
 list-pageup   Move up one screen-full in the list
 list-pagedown Move down one screen-full in the list
Some of these actions are the same as menu items, while others are not. There are no menu items that invoke the actions list-home, list-up, list-down, list-pageup, and list-pagedown. The list- actions are accomplished using the mouse in the scrollbar of the list window.

3. Input file format

Since the FGDC Content Standards for Digital Geospatial Metadata, as the name implies, specifies only the contents of metadata files and not their encoding, it is necessary to choose or devise a specification for metadata encoding in order to create formal metadata. The encoding format interpreted and produced by this editor is the same as that used by mp. Interested users are referred to the documentation for mp for details on this file format.

4. Configuration file format

The configuration file should be laid out exactly as for mp.

5. Local extensions

Local extensions, element names not found in the FGDC standard and the relationships among them, are described in a text file laid out exactly as for mp.

6. Help file format

A help file is provided with the editor. It contains brief descriptions of the standard elements, with the syntactical structure of compound elements described using the production rules of the standard. Additional elements can be added to this file. To add another element, place its name at the beginning of a line. The text describing the element should be placed on lines following the element name but in each of these lines the first character must be a space or tab. Elements can be added in any order.

7. Output file format

The metadata are output using the same encoding format as input, but on output the indentation is standardized at two spaces per level in the hierarchy.

8. Operation

The editor can be invoked with no arguments. In that case, the metadata will be saved as "Untitled" unless the name is changed using the Save As option in the File menu. If a file name is given on the command line, that file will be opened and its contents will be interpreted as metadata. If the file does not exist or is empty, a Metadata node will be created to which the user may add appropriate elements.

The display consists of three parts: a menu bar at the top, a scrolling list widget containing the structural elements of the current metadata, and a text widget containing the contents of the currently selected element.

To add an element to the metadata, select the parent element in the list widget, then choose the appropriate component from the Add menu. Note that the Add menu changes to reflect the components permitted under each element. When a scalar element (that is, one not composed of other elements) is selected, the Add menu will urge the user to enter the text in the text widget. The insertion caret will then be visible and text can be entered. Note that text can be inserted using the standard X selection (cut-and-paste) function.

To delete an element of the metadata, select it in the list widget, and choose Cut from the Edit menu. Note that this removes the entire subtree (that is, the element, its components, and their components). The Cut option in the Edit menu makes the subtree available through the X selection mechanism, and the subtree can be pasted into another application. At this writing, the paste operation will convert the subtree to indented text.

The Copy option of the Edit menu also makes the current subtree available to the X selection mechanism, but does not remove the subtree from the current tree.

The Clear option of the Edit menu removes the scalar data from the current element, its components, and their components. This allows the user to retain the structure of a subtree but replace the information it contains.

The Paste option of the Edit menu causes xtme to attempt to insert the subtree most recently cut or copied. The subtree is inserted as a child of the current element if that is permitted by the standard. If the first node of the subtree is not a child of the current element, xtme looks up the tree towards the root node for an element into which the subtree can be inserted. If there is no such element, the subtree is not inserted.

To insert a section of metadata from another file or application, select it in the other application and invoke the paste action (by default, pressing the middle mouse button in the list window). The data are expected to be ASCII, indented using the same rules as for mp and xtme, so you can select a section of indented text using a text editor or use Cut or Copy from xtme.

------------------------------------------------------------ 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. ------------------------------------------------------------

The Duplicate option of the Edit menu causes xtme to create an empty copy of the current element immediately following the current element, at the same level in the hierarchy.

The Swap option of the Edit menu moves the element that is currently selected up in the list of components of its parent. This allows you to reorder the components of a compound element.

The View menu allows the user to control the display of elements in the list widget. Options are as follows:

 All levels    Make the entire hierarchy visible.
 1 level       Conceal all elements below the first level.
 2 levels      Conceal all elements below the second level.
 3 levels      Conceal all elements below the third level.
 Hide          Conceal all components of the current element.
 Show          Reveal all components of the current element.
Normally choosing "1 level" makes the components of Metadata visible but their components invisible.

When an element's components are hidden, a plus sign is shown at its left side in the list widget.

The Help menu has three options. Each causes text to be displayed in a popup window. To remove the popup window, choose its Dismiss button. The text widget is configured to wrap the text by default, but this can be changed by choosing the Wrap button.

Version displays the version number and date of xtme. Element displays information specific to the element currently selected in the list widget. This information is updated every time you select a different element in the structure. Output displays the complete metadata record, with textual values in the indented hierarchical format. Note that the popup shows the metadata as it was when the Output option was selected and is not updated automatically. To display later changes, choose Output again from the Help menu.

To exit the editor without saving changes to the metadata, choose Quit from the File menu. To save the metadata at any time, choose Save. To exit the program, saving the changes, choose Close. To save the metadata under a new name, choose Save As; a popup dialog permits entry of the new name.

9. Known bugs

When pasting in a subtree from another application, xtme will crash if a line in a textual value in the pasted subtree begins with a recognized element and is indented relative to the text immediately following it.
Time_Period_of_Content:
Time_Period_Information:
Single_Date/Time:
Calendar_Date: 1995
Currentness_Reference: Date of first release
Status:
Progress: Complete
Maintenance_and_Update_Frequency: Continually
Keywords:
Theme:
Theme_Keyword_Thesaurus: None
Theme_Keyword: FGDC
Theme_Keyword: Metadata
Theme_Keyword: Software
Access_Constraints: none
Use_Constraints: none
Point_of_Contact:
Contact_Information:
Contact_Person_Primary:
Contact_Person: Peter N. Schweitzer
Contact_Address:
Address_Type: mailing address
Address:
Mail Stop 954 National Center
U.S. Geological Survey
12201 Sunrise Valley Drive
City: Reston
State_or_Province: VA
Postal_Code: 20192
Country: USA
Contact_Voice_Telephone: (703) 648-6533
Contact_Facsimile_Telephone: (703) 648-6560
Contact_Electronic_Mail_Address: pschweitzer@usgs.gov
Data_Set_Credit:
Spanish-language element names kindly provided by Dr. Ing. Carlos López of the Clearinghouse Nacional de Datos Geográficos, Uruguay <http://www.clearinghouse.gub.uy/>

Indonesian-language element names kindly provided by the Indonesian National Coordination Agency for Surveys and Mapping BAKOSURTANAL

French-language element names kindly provided by the Canadian Center for Remote Sensing, Natural Resources Canada
Native_Data_Set_Environment:
The software was developed on a Data General AViiON computer system running DG/UX version 5.4R3.10 (UNIX). It is currently maintained on a PC running Linux kernel version 2.2.18 using an Intel Pentium CPU.
Cross_Reference:
Citation_Information:
Originator: Federal Geographic Data Committee
Publication_Date: 1994
Title: Content Standards for Digital Geospatial Metadata
Online_Linkage: <http://www.fgdc.gov/metadata/csdgm/>
Cross_Reference:
Citation_Information:
Originator: Schweitzer, Peter N.
Publication_Date: 1995
Title: MP: A compiler for formal metadata
Publication_Information:
Publication_Place: Reston, Virginia
Publisher: U.S. Geological Survey
Online_Linkage: <http://geology.usgs.gov/tools/metadata/tools/doc/mp.html>
Online_Linkage: <http://geology.usgs.gov/tools/metadata/src.tar.gz>

Data_Quality_Information:
Logical_Consistency_Report:
Source code and make description files are included. Where discrepancies exist between the syntactical and semantic descriptions of elements in the Content Standards for Digital Geospatial Metadata, the syntactical descriptions are regarded as authoritative.
Completeness_Report:
The compiler embodies the syntax of the 1998 version of the Content Standard for Digital Geospatial Metadata, known as FGDC-STD-001-1998 and also supports the Biological Data Profile of that standard, FGDC-STD-001.1-1999.

Local extensions to the standard are permitted and a mechanism is provided that allows these extensions to be described to the compiler.
Lineage:
Source_Information:
Source_Citation:
Citation_Information:
Originator: Federal Geographic Data Committee
Publication_Date: 19940608
Title: Content Standards for Digital Geospatial Metadata
Online_Linkage: <http://fgdc.er.usgs.gov/>
Type_of_Source_Media: paper and digital text
Source_Time_Period_of_Content:
Time_Period_Information:
Single_Date/Time:
Calendar_Date: 19940608
Source_Currentness_Reference: approval date
Source_Contribution:
The element names, syntactical rules governing their use, and the domains and encoding of certain values are given in this source.
Source_Citation_Abbreviation: CSDGM
Source_Information:
Source_Citation:
Citation_Information:
Originator: Federal Geographic Data Committee
Publication_Date: 1998
Title: Content Standard for Digital Geospatial Metadata
Online_Linkage: <http://www.fgdc.gov/metadata/csdgm/>
Type_of_Source_Media: paper and digital text
Source_Time_Period_of_Content:
Time_Period_Information:
Single_Date/Time:
Calendar_Date: 1998
Source_Currentness_Reference: approval date
Source_Contribution:
A revision of the 1994 version of the metadata standard. Specifies modifications in the production rules and adds a few new elements.
Source_Citation_Abbreviation: FGDC-STD-001-1998
Source_Information:
Source_Citation:
Citation_Information:
Originator: Biological Data Working Group, FGDC
Originator: USGS Biological Resources Division
Title:
Content Standard for Digital Geospatial Metadata--Biological Data Profile, FGDC-STD-001.1-1999
Publication_Date: 1999
Publication_Information:
Publication_Place: Washington, D.C.
Publisher: Federal Geographic Data Committee
Online_Linkage:
<http://www.fgdc.gov/standards/documents/standards/biodata/biodatap.html>
Type_of_Source_Media: paper and digital text
Source_Time_Period_of_Content:
Time_Period_Information:
Single_Date/Time:
Calendar_Date: 1999
Source_Currentness_Reference: approval date
Source_Contribution:
A registered profile of the 1998 version of the metadata standard. Specifies modifications in the production rules and adds new elements to improve consistency of documentation of biological data.
Source_Citation_Abbreviation: FGDC-STD-001.1-1999
Process_Step:
Process_Description: Preliminary version complete.
Process_Date: 19951108
Process_Step:
Process_Description:
Added paste functions. This doesn't yet work from the callback (i.e. through the menu), but does work through the action.
Process_Date: 19960115
Process_Step:
Process_Description:
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.
Process_Date: 19960118
Process_Step:
Process_Description:
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.
Process_Date: 19960119
Process_Step:
Process_Description:
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.
Process_Date: 19960124
Process_Step:
Process_Description:
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.
Process_Date: 19960125
Process_Step:
Process_Description:
Modified xtme.c to update the value of Metadata_Date when the file is saved, if its contents had changed.
Process_Date: 19960126
Process_Step:
Process_Description:
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.
Process_Date: 19960126
Process_Step:
Process_Description:
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.
Process_Date: 19960206
Process_Step:
Process_Description:
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.
Process_Date: 19960213
Process_Step:
Process_Description:
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.
Process_Date: 19960215
Process_Step:
Process_Description:
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.
Process_Date: 19960430
Process_Step:
Process_Description:
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.
Process_Date: 19960523
Process_Step:
Process_Description:
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.
Process_Date: 19960705
Process_Step:
Process_Description:
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.
Process_Date: 19960708
Process_Step:
Process_Description:
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).
Process_Date: 19960716
Process_Step:
Process_Description:
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.
Process_Date: 19960808
Process_Step:
Process_Description:
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.
Process_Date: 19970303
Process_Step:
Process_Description:
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.
Process_Date: 19970303
Process_Step:
Process_Description:
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).
Process_Date: 19970723
Process_Step:
Process_Description:
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.
Process_Date: 19970912
Process_Step:
Process_Description:
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.
Process_Date: 19970916
Process_Step:
Process_Description:
Modified prune() in tree.c to not delete a blank line in a text value if it immediately follows a line containing text.
Process_Date: 19970926
Process_Step:
Process_Description:
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.
Process_Date: 19971008
Process_Step:
Process_Description:
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.
Process_Date: 19971022
Process_Step:
Process_Description:
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.
Process_Date: 19971026
Process_Step:
Process_Description:
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.
Process_Date: 19971028
Process_Step:
Process_Description:
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.
Process_Date: 19971030
Process_Step:
Process_Description:
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).
Process_Date: 19971106
Process_Step:
Process_Description:
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.
Process_Date: 19971111
Process_Step:
Process_Description:
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.
Process_Date: 19971114
Process_Step:
Process_Description:
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).
Process_Date: 19971124
Process_Step:
Process_Description:
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.
Process_Date: 19980116
Process_Step:
Process_Description:
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.
Process_Date: 19980217
Process_Step:
Process_Description:
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.
Process_Date: 19980225
Process_Step:
Process_Description:
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.
Process_Date: 19980318
Process_Step:
Process_Description:
Modified actions.c to describe CSDGM version 2. Set version of xtme to 2.0.
Process_Date: 19980826
Process_Step:
Process_Description:
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.
Process_Date: 19980902
Process_Step:
Process_Description:
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).
Process_Date: 19980929
Process_Step:
Process_Description:
Modified build process for tkme to use mktclapp rather than et2c.
Process_Date: 19981019
Process_Step:
Process_Description:
Modified tkme to use Cygwin32 development kit under Windows NT and 95 rather than Visual C++.
Process_Date: 19981020
Process_Step:
Process_Description:
Modified tkme.c and tkmerc.tcl to fix strange bug in edit_paste action. Thanks to Dave Hart for pointing this out.
Process_Date: 19981124
Process_Step:
Process_Description:
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.
Process_Date: 199812
Process_Step:
Process_Description:
Modified xtme.c to make the file name the label of the output window's popup shell.
Process_Date: 19981216
Process_Step:
Process_Description:
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.
Process_Date: 19981218
Process_Step:
Process_Description:
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.
Process_Date: 19990330
Process_Step:
Process_Description:
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.
Process_Date: 19990507
Process_Step:
Process_Description:
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.
Process_Date: 19990510
Process_Step:
Process_Description:
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)
Process_Date: 19990702
Process_Step:
Process_Description:
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)
Process_Date: 19990723
Process_Step:
Process_Description:
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.
Process_Date: 19990726
Process_Step:
Process_Description:
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)
Process_Date: 19990729
Process_Step:
Process_Description:
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)
Process_Date: 19990729
Process_Step:
Process_Description:
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)
Process_Date: 19990816
Process_Step:
Process_Description:
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)
Process_Date: 19990824
Process_Step:
Process_Description:
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)
Process_Date: 19990824
Process_Step:
Process_Description:
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)
Process_Date: 19990830
Process_Step:
Process_Description:
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)
Process_Date: 19990902
Process_Step:
Process_Description:
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)
Process_Date: 19991124
Process_Step:
Process_Description:
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)
Process_Date: 19991210
Process_Step:
Process_Description:
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)
Process_Date: 20000128
Process_Step:
Process_Description:
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)
Process_Date: 20000222
Process_Step:
Process_Description:
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)
Process_Date: 20000417
Process_Step:
Process_Description:
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)
Process_Date: 20000504
Process_Step:
Process_Description:
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)
Process_Date: 20000510
Process_Step:
Process_Description:
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)
Process_Date: 20000707
Process_Step:
Process_Description:
Modified tkmerc.tcl to bind Ctrl-p (Alt-P) to the Prune function. (tkme 2.4.6) (xtme 2.4.5)
Process_Date: 20000713
Process_Step:
Process_Description:
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)
Process_Date: 20000713
Process_Step:
Process_Description:
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)
Process_Date: 20000804
Process_Step:
Process_Description:
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)
Process_Date: 20000831
Process_Step:
Process_Description:
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)
Process_Date: 20000901
Process_Step:
Process_Description:
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)
Process_Date: 20000918
Process_Step:
Process_Description:
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)
Process_Date: 20000918
Process_Step:
Process_Description:
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)
Process_Date: 20000925
Process_Step:
Process_Description:
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.
Process_Date: 20000925
Process_Step:
Process_Description:
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)
Process_Date: 20000928
Process_Step:
Process_Description:
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)
Process_Date: 20000928
Process_Step:
Process_Description:
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)
Process_Date: 20000928
Process_Step:
Process_Description:
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)
Process_Date: 20001006
Process_Step:
Process_Description:
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)
Process_Date: 20001010
Process_Step:
Process_Description:
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)
Process_Date: 20001012
Process_Step:
Process_Description:
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)
Process_Date: 20001016
Process_Step:
Process_Description:
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)
Process_Date: 20001023
Process_Step:
Process_Description:
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
Process_Date: 20001215
Process_Step:
Process_Description:
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)
Process_Date: 20001218
Process_Step:
Process_Description:
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)
Process_Date: 20010102
Process_Step:
Process_Description:
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)
Process_Date: 20010103
Process_Step:
Process_Description:
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)
Process_Date: 20010110
Process_Step:
Process_Description:
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)
Process_Date: 20010306
Process_Step:
Process_Description:
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)
Process_Date: 20010308
Process_Step:
Process_Description:
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.
Process_Date: 20010313
Process_Step:
Process_Description:
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)
Process_Date: 20010516
Process_Step:
Process_Description:
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)
Process_Date: 20010525
Process_Step:
Process_Description:
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)
Process_Date: 20010821
Process_Step:
Process_Description:
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)
Process_Date: 20011101
Process_Step:
Process_Description:
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)
Process_Date: 20020102
Process_Step:
Process_Description:
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)
Process_Date: 20021011
Process_Step:
Process_Description:
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)
Process_Date: 20030221
Process_Step:
Process_Description:
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)
Process_Date: 20030319
Process_Step:
Process_Description:
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.
Process_Date: 20030402
Process_Step:
Process_Description:
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)
Process_Date: 20030923
Process_Step:
Process_Description:
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)
Process_Date: 20040116
Process_Step:
Process_Description:
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)
Process_Date: 20040214
Process_Step:
Process_Description:
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)
Process_Date: 20040224
Process_Step:
Process_Description:
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)
Process_Date: 20040707
Process_Step:
Process_Description:
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)
Process_Date: 20050207
Process_Step:
Process_Description:
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)
Process_Date: 20060302
Process_Step:
Process_Description:
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)
Process_Date: 20061002
Process_Step:
Process_Description:
Modified tkmerc.tcl, keyword.c, and tkme.c to expand the Configure option of the File menu. It is now a cascading menu that allows the user to choose a profile, language, or read a separate config file. This means you won't need to create a config file just to use a profile or a language other than English. (Tkme 2.9.25)
Process_Date: 20091106
Process_Step:
Process_Description:
Modified tkmeint.c, tkme.c, tkmerc.tcl, and tkme.tcl (latter from the tkme.vfs) so that snippets, on Microsoft Windows, will be stored in the user's application directory.

Modified tkme.tcl so that, on Microsoft Windows, a menu item in the Snippets menu will open up the snippets folder. This allows you to copy snippets directly into the folder; when Tkme is next restarted, it will discover those snippets and make them available for use. (tkme 2.9.26)
Process_Date: 20091214

Distribution_Information:
Distributor:
Contact_Information:
Contact_Person_Primary:
Contact_Person: Peter N. Schweitzer
Contact_Organization: U.S. Geological Survey
Contact_Address:
Address_Type: mailing address
Address:
Mail Stop 954 National Center
U.S. Geological Survey
12201 Sunrise Valley Drive
City: Reston
State_or_Province: VA
Postal_Code: 20192
Country: USA
Contact_Voice_Telephone: (703) 648-6533
Contact_Facsimile_Telephone: (703) 648-6560
Contact_Electronic_Mail_Address: pschweitzer@usgs.gov
Distribution_Liability:
Although this program has been used by the USGS, no warranty, expressed or implied, is made by the USGS or the United States Government as to the accuracy and functioning of the program and related program material nor shall the fact of distribution constitute any such warranty, and no responsibility is assumed by the USGS in connection therewith.
Standard_Order_Process:
Digital_Form:
Digital_Transfer_Information:
Format_Name: TAR
Format_Information_Content: Source and executable code and textual documentation.
File_Decompression_Technique: gzip -d
Transfer_Size: 2 megabytes
Digital_Transfer_Option:
Online_Option:
Computer_Contact_Information:
Network_Address:
Network_Resource_Name: <http://geology.usgs.gov/tools/metadata/src.tar.gz>
Digital_Form:
Digital_Transfer_Information:
Format_Name: Tcl/Tk Starkit
Format_Specification: Tcl/Tk Starkit created with sdx
Format_Information_Content:
Stand-alone runtime (requires Tclkit), Microsoft Windows and Linux
Transfer_Size: 2 megabytes
Digital_Transfer_Option:
Online_Option:
Computer_Contact_Information:
Network_Address:
Network_Resource_Name: <http://geology.usgs.gov/tools/metadata/tkme.kit>
Digital_Form:
Digital_Transfer_Information:
Format_Name: Microsoft Windows Executable
Format_Specification: Tcl/Tk Starpack
Format_Information_Content: Stand-alone runtime (executable) for Tkme
Transfer_Size: 3 megabytes
Digital_Transfer_Option:
Online_Option:
Computer_Contact_Information:
Network_Address:
Network_Resource_Name: <http://geology.usgs.gov/tools/metadata/tkme.exe>
Fees: none

Metadata_Reference_Information:
Metadata_Date: 20091214
Metadata_Contact:
Contact_Information:
Contact_Person_Primary:
Contact_Person: Peter N. Schweitzer
Contact_Address:
Address_Type: mailing address
Address:
Mail Stop 954 National Center
U.S. Geological Survey
12201 Sunrise Valley Drive
City: Reston
State_or_Province: VA
Postal_Code: 20192
Country: USA
Contact_Voice_Telephone: (703) 648-6533
Contact_Facsimile_Telephone: (703) 648-6252
Contact_Electronic_Mail_Address: pschweitzer@usgs.gov
Metadata_Standard_Name: Content Standard for Digital Geospatial Metadata
Metadata_Standard_Version: FGDC-STD-001-1998

This page is <http://geology.usgs.gov/tools/metadata/tools/doc/metadata/xtme.html>

Accessibility FOIA Privacy Policies and Notices

Take Pride in America logo USA.gov logo U.S. Department of the Interior | U.S. Geological Survey
URL: http://geology.usgs.gov/tools/metadata/tools/doc/metadata/mp-revision.html
Page Contact Information: Peter Schweitzer

Generated by mp version 2.9.20 on Tue Dec 11 16:28:29 2012