aboutsummaryrefslogtreecommitdiff
path: root/utils/Spiff/spiff.1
diff options
context:
space:
mode:
Diffstat (limited to 'utils/Spiff/spiff.1')
-rw-r--r--utils/Spiff/spiff.1454
1 files changed, 454 insertions, 0 deletions
diff --git a/utils/Spiff/spiff.1 b/utils/Spiff/spiff.1
new file mode 100644
index 0000000000..161b07ffa6
--- /dev/null
+++ b/utils/Spiff/spiff.1
@@ -0,0 +1,454 @@
+.ll 6i
+.pl 10.5i
+.po 1.25i
+.\" @(#)spiff.1 1.0 (Bellcore) 9/20/87
+.\"
+.lt 6.0i
+.TH SPIFF 1 "February 2, 1988"
+.AT 3
+.SH NAME
+spiff \- make controlled approximate comparisons between files
+.SH SYNOPSIS
+.B spiff
+[
+.B \-s
+script ] [
+.B \-f
+sfile ] [
+.B \-bteviqcdwm
+] [
+.B \-a
+\(br
+.B \-r
+value ] \-value file1 file2
+.SH DESCRIPTION
+.I Spiff
+compares the contents of
+.B file1
+and
+.B file2
+and prints a description of the important differences between
+the files.
+White space is ignored except to separate other objects.
+.I Spiff
+maintains tolerances below which differences between two floating point
+numbers are ignored.
+Differences in floating point notation (such as 3.4 3.40 and 3.4e01)
+are treated as unimportant.
+User specified delimited strings (i.e. comments) can also be ignored.
+Inside other user specified delimited strings
+(i.e. quoted strings) whitespace can be significant.
+.PP
+.I Spiff's
+operation can be altered via command line options, a command script, and with
+commands that are embedded in the input files.
+.PP
+The following options affect
+.I spiff's
+overall operation.
+.TP
+.B \-q
+suppresses warning messages.
+.TP
+.B \-v
+use a visually oriented display. Works only in MGR windows.
+.PP
+.I Spiff
+has several flags to aid differencing of various programming languages.
+See EXAMPLES for a detailed description of the effects of these flags.
+.TP
+.B \-C
+treat the input files as C program source code.
+.TP
+.B \-S
+treat the input files as Bourne shell program source code.
+.TP
+.B \-F
+treat the input files as Fortran program source code.
+.TP
+.B \-M
+treat the input files as Modula-2 program source code.
+.TP
+.B \-L
+treat the input files as Lisp program source code.
+.PP
+By default, the output looks somewhat similar in appearance
+to the output of diff(1). Lines with differences are printed with
+the differences highlighted. If stdout is a terminal, as determined
+by isatty(), then highlighting uses standout mode as determined by termcap.
+If stdout is not a tty, then the underlining (via underscore/backspace/char)
+is used to highlight differences.
+The following option can control the format of the ouput.
+.TP
+.B \-t
+produce output in terms of individual tokens. This option is
+most useful for debugging as the output produced is verbose to
+the point of being unreadable.
+.PP
+The following option controls the differencing algorithm.
+.TP
+.B \-e
+compare each token
+in the files with the object in the same ordinal
+position in the other file. If the files have a different number
+of objects, a warning message is printed
+and the objects at the end of the longer file are ignored.
+By default,
+.I spiff
+uses a Miller/Myers algorithm to find a minimal edit sequence
+that will convert the contents of the first file into the second.
+.TP
+\-<decimal-value>
+sets a limit on the total number of insertions and deletions
+that will be considered.
+If the files differ by more than the stated amount,
+the program will give up, print a warning message, and exit.
+.PP
+The following options control the command script. More than one of
+each may appear at at time. The commands accumulate.
+.TP
+.B \-f sfile
+a command script to be taken from file
+.IR sfile
+.TP
+.B \-s command-script
+causes the following argument to be taken as a command script.
+.PP
+The following options control how individual objects are compared.
+.TP
+.B \-b
+treat all objects (including floating point numbers) as literals.
+.TP
+.B \-c
+ignore differences between upper and lower case.
+.PP
+The following commands will control how the files are parsed.
+.TP
+.B \-w
+treat white space as objects. Each white space character will
+be treated as a separate object when the program is comparing the
+files.
+.TP
+.B \-m
+treat leading sign characters ( + and \- ) as separate even
+if they are followed by floating point numbers.
+.TP
+.B \-d
+treat integer decimal numbers (such as 1987) as real numbers (subject to
+tolerances) rather than as literal strings.
+.PP
+The following three flags are used to set the default tolerances.
+The floating-point-numbers may be given in the formats accepted
+by atof(3).
+.TP
+.B \-a floating-point-number
+specifies an absolute value for the tolerance in floating point numbers.
+The flag
+.B \-a1e-2
+will cause all differences greater than 0.01 to be reported.
+.TP
+.B \-r floating-point-number
+specifies a relative tolerance. The value given is interpreted
+as a fraction of the larger (in absolute terms)
+of the two floating point numbers being compared.
+Thus, the flag
+.B \-r0.1
+will cause the two floating point numbers 1.0 and 0.9 to be deemed within
+tolerance. The numbers 1.0 and 0.89 will be outside the tolerance.
+.TP
+.B \-i
+causes differences between floating point numbers to be ignored.
+.PP
+If more than one
+.B \-a, \-r,
+or
+.B \-i
+flag appear on the command line,
+the tolerances will be OR'd together (i.e. any difference that is within
+any of the tolerances will be ignored).
+.PP
+If no default tolerances is set on the command line,
+the program will use a default tolerance of
+.B '\-a 1e-10 \-r 1e-10'.
+.SH SCRIPT COMMANDS
+.PP
+A script consists of commands, one per line.
+Each command consists of a keyword possibly followed by arguments.
+Arguments are separated by one or more tabs or spaces.
+The commands are:
+.TP
+literal BEGIN-STRING [END-STRING [ESCAPE-STRING]]
+Specifies the delimiters surrounding text that is to be treated as a single
+literal object. If only one argument is present, then only that string itself is treated
+as a literal. If only two arguments are present, they are taking as the starting
+and ending delimiters respectively. If three arguments are present, they are treated
+as the start delimiter, end delimiter, and a string that may be used to escape
+an instance of the end delimiter.
+.TP
+beginchar BEGINNING-OF-LINE-CHARACTER
+Set the the beginning of line character for BEGIN-STRING's in comments.
+The default is '^'.
+.TP
+endchar END-OF-LINE-CHARACTER
+Set the end of line character for END-STRING's in comments.
+The default is '$'.
+.TP
+addalpha NEW-ALPHA-CHARACTER
+Add NEW-ALPHA-CHARACTER to the set of characters allowed in literal strings.
+By default,
+.I spiff
+parses sequences of characters that begin with a letter and followed by
+zero or more letters or numbers as a single literal token. This definition
+is overly restrictive when dealing with programming languages.
+For example, in the C programming language,
+the underscore character is allowed in identifiers.
+.TP
+comment BEGIN-STRING [END-STRING [ESCAPE-STRING]]
+Specifies the delimiters surrounding text that is to be be ignored entirely
+(i.e. viewed as comments).
+The operation of the comment command is very similar to the literal command.
+In addition, if the END-STRING consists of only
+the end of line character, the end of line will delimit the end of the comment.
+Also, if the BEGIN-STRING starts with the beginning of line character, only
+lines that begin with the BEGIN-STRING will be ignored.
+.PP
+More than one comment specification and more than one literal string specification
+may be specified at a time.
+.TP
+nestcom BEGIN-STRING [END-STRING [ESCAPE-STRING]]
+Similar to the comment command, but allows comments to be nested.
+Note, due to the design of the parser nested comments can not
+have a BEGIN-STRING that starts with the beginning of line character.
+.TP
+resetcomments
+Clears the list of comment specifications.
+.TP
+resetliterals
+Clears the list of literal specifications.
+.TP
+tol [aVALUE\(brrVALUE\(bri\(brd . . . [ ; aVALUE\(brrVALUE\(bri\(brd . . . ] . . . ]
+set the tolerance for floating point comparisons.
+The arguments to the tol command are a set of tolerance specifications
+separated by semicolons. If more than one a,r,d, or i appears within
+a specification, then the tolerances are OR'd together (i.e. any difference
+that is within any tolerance will be ignored).
+The semantics of a,r, and i are identical to the
+.B \-a, \-r,
+and
+.B \-i
+flags. The d means that the default tolerance (as specified by the invocation
+options) should be used.
+If more than one specification appears on the line, the first
+specification is applied to the first floating point number on each line,
+the second specification to the second floating point number one each line
+of the input files, and so on. If there are more floating point numbers
+on a given line of input than tolerance specifications,
+the last specification is used repeatedly for all remaining floating point numbers
+on that line.
+.TP
+command STRING
+lines in the input file that start with STRING will be interpreted as
+command lines. If no "command" is given as part of a
+.B \-s
+or
+.B \-f
+then it will be impossible to embed commands in the input files.
+.TP
+rem
+.TP
+#
+used to places human readable remarks into a commands script. Note that the
+use of the '#' character differs from other command languages (for instance
+the Bourne shell).
+.I Spiff
+will only recognize the '#' as beginning a comment when it is the first
+non-blank character on the command line. A '#' character appearing elsewhere
+will be treated as part of the command. Cautious users should use 'rem'.
+Those hopelessly addicted to '#' as a comment character can have command
+scripts with a familiar format.
+.PP
+Tolerances specified in the command scripts have precedence over the tolerance
+specified on the invocation command line. The tolerance specified in
+.I file1
+has precedence over the tolerance specified in
+.I file2.
+.PP
+.SH VISUAL MODE
+If
+.I spiff
+is invoked with the \-v option, it will enter an interactive mode rather
+than produce an edit sequence. Three windows will be put on the screen.
+Two windows will contain corresponding segments of the input files.
+Objects that appear in both segments will be examined for differences and
+if any difference is found, the objects will be highlighted in reverse video
+on the screen. Objects that appear in only one window will have a line drawn
+through them to indicate that they aren't being compared with anything in the other
+text window. The third window is a command window. The command window will
+accept a single tolerance specification (followed by a newline)
+in a form suitable to the
+.B tol
+command. The tolerance specified will then be used as the default tolerance
+and the display will be updated to highlight only those objects that exceed
+the new default tolerance. Typing
+.B m
+(followed by a newline) will display the next screenfull of text. Typing
+.B q
+(followed by a newline) will cause the program to exit.
+.SH LIMITS
+Each input files can be no longer that 10,000 line long or contain more
+than 50,000 tokens. Longer files will be truncated.
+No line can be longer than 1024 characters. Newlines
+will be inserted every 1024 character.
+.SH EXAMPLES
+.TP
+spiff \-e \-d foo bar
+this invocation (using exact match algorithm and treating integer numbers
+as if they were floats) is very useful for examining large tables of numbers.
+.TP
+spiff \-0 foo bar
+compare the two files, quitting after the first difference is found.
+This makes the program operate roughly like cmp(1).
+.TP
+spiff \-0 -q foo bar
+same as the above, but no output is produced.
+The return code is still useful.
+.TP
+spiff \-w \-b foo bar
+will make the program operate much like diff(1).
+.TP
+spiff \-a1e-5 \-r0.001 foo bar
+compare the contents of the files foo and bar and ignore all differences between
+floating point numbers that are less than or equal to
+0.00001 or 0.1% of the number of larger magnitude.
+.TP
+tol a.01 r.01
+will cause all differences between floating point numbers that are less than
+or equal to
+0.01 or 1% of the number of larger magnitude to be ignored.
+.TP
+tol a.01 r.01 ; i
+will cause the tolerance in the previous example to be applied to the first
+floating point number on each line. All differences between the second and
+subsequent floating point numbers on each line will be ignored.
+.TP
+tol a.01 r.01 ; i ; a.0001
+like the above except that only differences between the second floating point
+number on each line will be ignored. The differences between
+third and subsequent floating point numbers on each number will be ignored if they
+are less than or equal to 0.0001.
+.IP
+A useful script for examing C code is:
+.nf
+literal " " \\
+comment /* */
+literal &&
+literal \(br\(br
+literal <=
+literal >=
+literal !=
+literal ==
+literal --
+literal ++
+literal <<
+literal >>
+literal ->
+addalpha _
+tol a0
+.fi
+.IP
+A useful script for shell programs is:
+.nf
+literal ' ' \\
+comment # $
+tol a0
+.fi
+.IP
+A useful script for Fortran programs is:
+.nf
+literal ' ' '
+comment ^C $
+tol a0
+.fi
+.IP
+A useful script for Modula 2 programs is:
+.nf
+literal ' '
+literal " "
+nestcom (* *)
+literal :=
+literal <>
+literal <=
+literal >=
+tol a0
+.fi
+.IP
+A useful script for Lisp programs is:
+.nf
+literal " "
+comment ; $
+tol a0
+.fi
+.SH DIAGNOSTICS
+.I Spiff's
+exit status is 0 if no differences are found, 1 if differences are found, and
+2 upon error.
+.SH BUGS
+In C code, escaped newlines will appear as differences.
+.PP
+Comments are treated as token delimiters.
+.PP
+Comments in Basic don't work right. The line number is not ignored.
+.PP
+Continuation lines in Fortran comments don't work.
+.PP
+There is no way to represent strings specified using a
+Hollerith notation in Fortran.
+.PP
+In formated English text, hyphenated words,
+movements in pictures, footnotes, etc.
+will be reported as differences.
+.PP
+STRING's in script commands can not include whitespace.
+.PP
+Visual mode does not handle tabs properly. Files containing
+tabs should be run through
+expand(1) before trying to display them with visual mode.
+.PP
+In visual mode, the text windows appear in a fixed size and font.
+Lines longer than the window size will not be handled properly.
+.PP
+Objects (literal strings) that contain newlines cause trouble in several places
+in visual mode.
+.PP
+Visual mode should accept more than one tolerance specification.
+.PP
+When using visual mode or the exact match comparison algorithm, the program
+should do the parsing on the fly rather than truncating long files.
+.SH AUTHOR
+Daniel Nachbar
+.SH COPYRIGHT
+.nf
+ Copyright (c) 1988 Bellcore
+ All Rights Reserved
+Permission is granted to copy or use this program,
+EXCEPT that it may not be sold for profit, the copyright
+notice must be reproduced on copies, and credit should
+be given to Bellcore where it is due.
+ BELLCORE MAKES NO WARRANTY AND ACCEPTS
+ NO LIABILITY FOR THIS PROGRAM.
+.fi
+
+.br
+.SH SEE ALSO
+atof(3)
+isatty(2)
+diff(1)
+cmp(1)
+expand(1)
+mgr(1L)
+.PP
+"Spiff -- A Program for Making Controlled Approximate Comparisons of Files",
+by Daniel Nachbar.
+.PP
+"A File Comparison Program" by Webb Miller and Eugene W. Myers in Software \-
+Practice and Experience, Volume 15(11), pp.1025-1040, (November 1985).