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.
Source_Information:
Source_Citation:
Citation_Information:
Originator: Federal Geographic Data Committee
Publication_Date: 19940608
Title: Content Standards for Digital Geospatial Metadata
Online_Linkage: http://www.fgdc.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:
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:
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 & 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
Process_Step:
Process_Description:
Major modifications to tkme.tcl and tkmeint.c, static compilation
of expat with libtkmeint, addition of the vocab extension to
provide a Tcl interface to web services that provide controlled
vocabularies in JSON, with Jansson-2.7 included as a static
compilation.
This change to Tkme enhances the interface by providing online
access to keywords from controlled vocabularies on the web.
Specifically the web services described at described at
https://www2.usgs.gov/science/services.html are accessed, with the
keyword interface facilitating insertion and removal of controlled
terms that are chosen by the user. A search interface permits the
user to discover terms beginning with a given text from a
specified vocabulary or from all available vocabularies.
(tkme 3.0.0)
Process_Date: 20160318
Process_Step:
Process_Description:
Modified actions.c to create a new "profile" for the Lidar Base
Specification metadata, using USGS Techniques and Methods 11B4,
version 1.2. Changes were made to a number of other modules in
order to support this profile.
Created the file lidar.hlp and included it in xtme-en.hlp so that
element help for Lidar extensions can be shown to users selecting
that profile.
Modified snippets for Geodetic_Model NAD83 and WGS84 to increase
the number of digits given for the
Denominator_of_Flattening_Ratio.
(Tkme 3.0.4)
Process_Date: 20170915