rcs(3tcl)


NAME

   rcs - RCS low level utilities

SYNOPSIS

   package require Tcl  8.4

   package require rcs  ?0.1?

   ::rcs::text2dict text

   ::rcs::dict2text dict

   ::rcs::file2dict filename

   ::rcs::dict2file filename dict

   ::rcs::decodeRcsPatch text

   ::rcs::encodeRcsPatch pcmds

   ::rcs::applyRcsPatch text pcmds

______________________________________________________________________________

DESCRIPTION

   The  Revision  Control  System, short RCS, is a set of applications and
   related data formats which allow a system to  persist  the  history  of
   changes  to  a  text.  It, and its relative SCCS are the basis for many
   other such systems, like CVS, etc.

   This package does not implement RCS.

   It only provides a number of low level commands which should be  useful
   in the implementation of any revision management system, namely:

   [1]    The  conversion of texts into and out of a data structures which
          allow the easy  modification  of  such  text  by  patches,  i.e.
          sequences  of  instructions  for  the transformation of one text
          into an other.

   [2]    And the conversion of one particular format for patches, the so-
          called  RCS patches, into and out of data structures which allow
          their easy application to texts.

COMMANDS

   ::rcs::text2dict text
          Converts the argument text  into  a  dictionary  containing  and
          representing  the  same text in an indexed form and returns that
          dictionary as its result.  More information about the format  of
          the  result  can  be  found in section TEXT DICT DATA STRUCTURE.
          This command returns the canonical representation of the input.

   ::rcs::dict2text dict
          This   command   provides   the   complementary   operation   to
          ::rcs::text2dict. It converts a dictionary in the form described
          in section TEXT DICT DATA STRUCTURE back into a text and returns
          that  text  as its result. The command does accept non-canonical
          representations of the text as its input.

   ::rcs::file2dict filename
          This command is identical to ::rcs::text2dict,  except  that  it
          reads  the text to convert from the file with path filename. The
          file has to exist and must be readable as well.

   ::rcs::dict2file filename dict
          This command is identical to ::rcs::2dict2text, except  that  it
          stores  the  resulting  text in the file with path filename. The
          file is created if it did not exist, and must be  writable.  The
          result of the command is the empty string.

   ::rcs::decodeRcsPatch text
          Converts  the  text  argument into a patch command list (PCL) as
          specified in the section RCS PATCH COMMAND LIST and returns this
          list  as  its  result.   It is assumed that the input text is in
          diff -n format, also known as RCS patch format, as specified  in
          the  section  RCS  PATCH  FORMAT.   Please note that the command
          ignores no-ops in the input, in other words  the  resulting  PCL
          contains only instructions doing something.

   ::rcs::encodeRcsPatch pcmds
          This   command   provides   the   complementary   operation   to
          ::rcs::decodeRcsPatch. It convert a patch comand list (PCL) list
          as  specified  in the section RCS PATCH COMMAND LIST back into a
          text in RCS PATCH FORMAT and returns that text as its result.

          Note that this command and ::rcs::decodeRcsPatch are not exactly
          complementary, as the latter strips no-ops from its input, which
          the encoder cannot put  back  anymore  into  the  generated  RCS
          patch.  In  other  words, the result of a decode/encode step may
          not match the original input at the character level, but it will
          match it at the functional level.

   ::rcs::applyRcsPatch text pcmds
          This  operation  applies  a patch in the form of a PCL to a text
          given in the form of a dictionary and returns the modified text,
          again as dictionary, as its result.

          To  handle  actual  text  use  the commands ::rcs::text2dict (or
          equivalent) and ::rcs::decodeRcsPatch to  transform  the  inputs
          into data structures acceptable to this command. Analogously use
          the command ::rcs::dict2text (or equivalent)  to  transform  the
          result of this command into actuall text as required.

TEXT DICT DATA STRUCTURE

   A  text  dictionary  is a dictionary whose keys are integer numbers and
   text strings as the associated values.  The  keys  represent  the  line
   numbers  of a text and the values the text of that line.  Note that one
   text can have many representations as a dictionary, as the index values
   only have to be properly ordered for reconstruction, their exact values
   do not  matter.  Similarly  the  strings  may  actually  span  multiple
   physical lines.

   The text

          Hello World,
          how are you ?
          Fine, and you ?

   for example can be represented by

          {{1 {Hello World,}} {2 {how are you ?}} {3 {Fine, and you ?}}}

   or

          {{5 {Hello World,}} {8 {how are you ?}} {9 {Fine, and you ?}}}

   or

          {{-1 {Hello World,
          how are you ?}} {4 {Fine, and you ?}}}

   The  first dictionary is the canonical representation of the text, with
   line numbers starting at 1, increasing in steps of 1 and without  gaps,
   and each value representing exactly one physical line.

   All  the  commands  creating  dictionaries  from  text  will return the
   canonical representation of their input text.  The  commands  taking  a
   dictionary    and    returning   text   will   generally   accept   all
   representations, canonical or not.

   The result of applying a patch to a text  dictionary  will  in  general
   cause the dictionary to become non-canonical.

RCS PATCH FORMAT

   A  patch  is  in  general  a series of instructions how to transform an
   input text T into a different text T', and also encoded in text form as
   well.

   The text format for patches understood by this package is a very simple
   one, known under the names RCS patch or diff -n format.

   Patches in this format contain only two  different  commands,  for  the
   deletion of old text, and addition of new text. The replacement of some
   text by a different text  is  handled  as  combination  of  a  deletion
   following by an addition.

   The format is line oriented, with each line containing either a command
   or text data associated with the preceding command.  The first line  of
   a RCS patch is always a command line.

   The commands are:

   ""     The empty line is a command which does nothing.

   "astart n"
          A  line  starting  with  the  character  a  is a command for the
          addition of text to the output. It is followed  by  n  lines  of
          text  data.  When  applying  the  patch  the  data is added just
          between the lines start and start+1. The same effect is  had  by
          appending  the  data  to the existing text on line start. A non-
          existing line start is created.

   "dstart n"
          A line starting with the  character  d  is  a  command  for  the
          deletion  of  text  from  the  output. When applied it deletes n
          lines of text, and the first line deleted is at index start.

   Note that the line indices start always refer  to  the  text  which  is
   transformed  as  it  is  in  its  original  state,  without  taking the
   precending changes into account.

   Note also that the instruction have to be applied  in  the  order  they
   occur  in  the  patch, or in a manner which produces the same result as
   in-order application.

   This   is   the   format   of   results   returned   by   the   command
   ::rcs::decodeRcsPatch      and     accepted     by     the     commands
   ::rcs::encodeRcsPatch and  ::rcs::appplyRcsPatch  resp.   Note  however
   that  the  decoder  will strip no-op commands, and the encoder will not
   generate no-ops, making them not fully  complementary  at  the  textual
   level, only at the functional level.

   And example of a RCS patch is

          d1 2
          d4 1
          a4 2
          The named is the mother of all things.

          a11 3
          They both may be called deep and profound.
          Deeper and more profound,
          The door of all subtleties!

RCS PATCH COMMAND LIST

   Patch  command lists (sort: PCL's) are the data structures generated by
   patch decoder command and accepted by the patch encoder and  applicator
   commands.   They  represent  RCS  patches  in  the  form  of  Tcl  data
   structures.

   A  PCL  is  a  list  where  each  element  represents  a  single  patch
   instruction,  either an addition, or a deletion. The elements are lists
   themselves,  where  the  first  item  specifies  the  command  and  the
   remainder represent the arguments of the command.

   a      This  is  the  instruction  for the addition of text. It has two
          arguments, the index of the line where to add the text, and  the
          text to add, in this order.

   d      This  is  the  instruction  for the deletion of text. It has two
          arguments, the index of the line where to start  deleting  text,
          and the number of lines to delete, in this order.

   This  is  the format returned by the patch decoder command and accepted
   as input by the patch encoder and applicator commands.

   An example for a patch  command  is  shown  below,  it  represents  the
   example RCS patch found in section RCS PATCH FORMAT.

          {{d 1 2} {d 4 1} {a 4 {The named is the mother of all things.

          }} {a 11 {They both may be called deep and profound.
          Deeper and more profound,
          The door of all subtleties!}}}

BUGS, IDEAS, FEEDBACK

   This  document,  and the package it describes, will undoubtedly contain
   bugs and other problems.  Please report such in the category rcs of the
   Tcllib  Trackers  [http://core.tcl.tk/tcllib/reportlist].   Please also
   report any ideas for enhancements  you  may  have  for  either  package
   and/or documentation.

SEE ALSO

   struct, textutil

KEYWORDS

   CVS,  RCS,  RCS patch, SCCS, diff -n format, patching, text conversion,
   text differences

CATEGORY

   Text processing

COPYRIGHT

   Copyright (c) 2005, Andreas Kupries <andreas_kupries@users.sourceforge.net>
   Copyright (c) 2005, Colin McCormack <coldstore@users.sourceforge.net>





Opportunity


Personal Opportunity - Free software gives you access to billions of dollars of software at no cost. Use this software for your business, personal use or to develop a profitable skill. Access to source code provides access to a level of capabilities/information that companies protect though copyrights. Open source is a core component of the Internet and it is available to you. Leverage the billions of dollars in resources and capabilities to build a career, establish a business or change the world. The potential is endless for those who understand the opportunity.

Business Opportunity - Goldman Sachs, IBM and countless large corporations are leveraging open source to reduce costs, develop products and increase their bottom lines. Learn what these companies know about open source and how open source can give you the advantage.





Free Software


Free Software provides computer programs and capabilities at no cost but more importantly, it provides the freedom to run, edit, contribute to, and share the software. The importance of free software is a matter of access, not price. Software at no cost is a benefit but ownership rights to the software and source code is far more significant.


Free Office Software - The Libre Office suite provides top desktop productivity tools for free. This includes, a word processor, spreadsheet, presentation engine, drawing and flowcharting, database and math applications. Libre Office is available for Linux or Windows.





Free Books


The Free Books Library is a collection of thousands of the most popular public domain books in an online readable format. The collection includes great classical literature and more recent works where the U.S. copyright has expired. These books are yours to read and use without restrictions.


Source Code - Want to change a program or know how it works? Open Source provides the source code for its programs so that anyone can use, modify or learn how to write those programs themselves. Visit the GNU source code repositories to download the source.





Education


Study at Harvard, Stanford or MIT - Open edX provides free online courses from Harvard, MIT, Columbia, UC Berkeley and other top Universities. Hundreds of courses for almost all major subjects and course levels. Open edx also offers some paid courses and selected certifications.


Linux Manual Pages - A man or manual page is a form of software documentation found on Linux/Unix operating systems. Topics covered include computer programs (including library and system calls), formal standards and conventions, and even abstract concepts.