mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-01 00:33:09 +00:00
0df5f9fb7e
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12875 91177308-0d34-0410-b5e6-96231b3b80d8
455 lines
14 KiB
Groff
455 lines
14 KiB
Groff
.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).
|