english
version "1.0"
identify "xyz"
#: Copyright (c) 1995, 2002 by Wayne C. Gramlich.
#, All rights reserved.
#,
#, Permission to use, copy, modify, distribute, and sell this software
#, for any purpose is hereby granted without fee provided that the above
#, copyright notice and this permission are retained. The author makes
#, no representations about the suitability of this software for any purpose.
#, It is provided "as is" without express or implied warranty.
module version
#: This module implements the {version} type for SVMS history files.
define version #: One version in history file
record
chunks chunks #: Mixed file and comment chunks
comments chunks #: Comments value
contents chunks #: File contents
creator_name string #: Creator's name
executable logical #: {true}=>executable
history history #: Parent history object
is_binary logical #: {true}=>binary;{false}=>text
max_number unsigned #: Highest delta version number
min_number unsigned #: Lowest delta version number
offset unsigned #: Offset number
resources resources #: Parent resources object
timestamp unsigned #: Version timestamp
generate address_get, allocate, erase, identical, print
#: {version} procedures:
procedure xallocate@version
takes
history history
returns version
#: This procedure will allocate and return a {version} object
#, that is part of {history}.
procedure compare@version
takes
version1 version
version2 version
returns integer
#: This procedure will return -1, 0, 1 depending upon whether
#, {version1} has a name that is less than, equal to, or greater
#, than the name of {version2} respectively.
procedure deallocate@version
takes
version version
returns_nothing
#: This procedure will deallocate {version} and make it available for
#, for subsequent reallocation.
#, deallocation will occur when {chunks} is deallocated.
#format@format1[address](debug_stream,
# 'deallocate@version(%X%) returns\n\', version.address)
procedure equal@version
takes
version1 version
version2 version
returns logical
#: This procedure will return {true} if {version1} is the same as
#, {version2} and {false} otherwise.
procedure greater_than@version
takes
version1 version
version2 version
returns logical
#: This procedure will return {true} if {version1} is greater than
#, {version2} and {false} otherwise.
procedure less_than@version
takes
version1 version
version2 version
returns logical
#: This procedure will return {true} if {version1} is less than
#, {version2} and {false} otherwise.
procedure line_comments_insert@version
takes
version version
comments string
returns_nothing
#: This procedure will insert {comments} into the contents portion
#, of {version}.
procedure line_contents_insert@version
takes
version version
contents string
returns_nothing
#: This procedure will insert {contents} into the contents portion
#, of {version}.
procedure number_manage@version
takes
version version
number unsigned
returns_nothing
#: This procedure will set keep track of the minimum and maximum
#, delta number for {version}. This code is provided as tie-breaker
#, for sorting {version} objects when they have the same timestamp.
#, See {compare}@{version}() for the details.
procedure ranges_remove@version
takes
version version
returns_nothing
#: This procedure will remove all of the {chunk}'s of type {range}
#, from {version}.{chunks}.
procedure read@version
takes
data_in_stream data_in_stream
history history
returns version
#: This procedure will read a version object in from {data_in_stream}
#, and return it.
#: Read in the chunks:
#: Read in the content {chunk_ranges}:
#: Read in the comment {chunk_ranges}:
procedure string_append@version
takes
version version
text string
returns_nothing
#: This procedure will append the contents of {versin} onto the end
#, of {text}.
procedure unshare@version
takes
version version
share_table set[chunk]
returns_nothing
#: This procedure ensure make each {chunk} in {version}.{chunks}
#, is no longer in {share_table}.
procedure write@version
takes
version version
data_out_stream data_out_stream
share_table set[chunk]
header_timer timer
verify_timer timer
remove_timer timer
share_timer timer
bind_timer timer
sort_timer timer
convert_timer timer
chunks_timer timer
ranges_timer timer
returns_nothing
#: This procedure will write out {version} to {data_out_stream} using
#, {buffer} as a temporary string buffer. {share_table} is used
#, to detect sharable {chunk}'s. This routine must be called
#, increasing {version}'s in order to work properly.
#, looks. We want all the {chunk}'s to show up in the history file
#, in a determanisitc order. First, we make sure that we have
#, identified all previously sharable {chunk}'s. Second, we want
#, the {chunk}'s that are first used in this version to show up in
#, "first used" order starting with the contents and then the comments.
#, The range {chunk}'s are added to {version}.{chunks} later.