--- /dev/null
+% Change bar document-style option for LaTeX.
+%
+% Copyright (C) 1990 by David B. Johnson.
+
+% These macros draw a solid bar down the right margin of the output,
+% covering a range of the input file that has been declared to be changed.
+%
+% The beginning and end of a change bar in the text are marked with
+% \chgbarbegin and \chgbarend, respectively. For example,
+%
+% Here is some sample text \chgbarbegin that was
+% changed\chgbarend{} and some that wasn't changed.
+%
+% The change bar is drawn continuously between the line of output
+% containing the \chgbarbegin and the line of output containing the
+% \chgbarend. These lines can end up on separate pages, and the
+% division at page boundaries is handled automatically.
+
+% Two dimensions control the size and placement of the change bars:
+% \chgbarwidth The width of a change bar
+% \chgbarsep The distance between the text and the change bar
+
+% Warning: it does not appear to be possible to do this completely
+% correctly, due to the time at which the verticle glue on a page is
+% finally set, and the way that page breaks are decided. With
+% \raggedbottom, this normally works fine. It hasn't been tested with
+% \flushbottom, but will probably behave worse. In strange rare
+% situations, a change bar might be drawn from the first line of a page
+% up off the top of a page; this can usually be fixed by slightly moving
+% the \chngbarend around, or by breaking a single change bar range
+% into two ranges.
+
+\newdimen\chgbarwidth \newdimen\chgbarsep
+\chgbarwidth 4pt
+\chgbarsep .25in
+
+\def\chgbarbegin{\ifhmode\@chgbar{-2}\else\@chgbar{-3}\fi}
+\def\chgbarend{\@chgbar{-4}\relax}
+
+\marginparpush 0pt
+
+% The remainder of this is hacked up based on the LaTeX 2.09 latex.tex.
+
+% copied from \marginpar
+\def\@chgbar#1{\ifhmode \@bsphack\@floatpenalty -\@Mii\else
+ \@floatpenalty-\@Miii\fi\ifinner
+ \@parmoderr\@floatpenalty\z@
+ \else\@next\@currbox\@freelist{\global
+ \count\@currbox#1}{\@floatpenalty\z@ \@fltovf
+ \def\@currbox{\@tempboxa}}\fi
+ \setbox\@tempboxa\vbox
+ \bgroup\end@float\@esphack}
+
+\newdimen\@chgbarbegin
+\newif\if@inchgbar \@inchgbarfalse
+
+\def\@addmarginpar{%
+\ifnum\count\@currbox = -2 % change bar begin from hmode
+ \global\@chgbarbegin\@pageht \global\advance\@chgbarbegin -\baselineskip
+ \global\@inchgbartrue
+ \@cons\@freelist\@currbox
+\else
+\ifnum\count\@currbox = -3 % change bar begin not from hmode
+ \global\@chgbarbegin\@pageht
+ \global\@inchgbartrue
+ \@cons\@freelist\@currbox
+\else
+\ifnum\count\@currbox = -4 % change bar end
+ \if@inchgbar\else\@latexbug\fi
+ \@tempdima\@pageht \advance\@tempdima -\@chgbarbegin
+ \nointerlineskip
+ \@tempcnta\@ne
+ \if@twocolumn
+ \if@firstcolumn \@tempcnta\m@ne \fi
+ \else
+ \if@mparswitch
+ \ifodd\c@page \else\@tempcnta\m@ne \fi
+ \fi
+ \if@reversemargin \@tempcnta -\@tempcnta \fi
+ \fi
+ \hbox to\columnwidth
+ {\ifnum \@tempcnta >\z@
+ \hskip\columnwidth \hskip\chgbarsep
+ \else \hskip -\chgbarsep \fi
+\hbox{\vbox to 0pt{\vss
+ \hrule \@height\@tempdima \@width\chgbarwidth \@depth\z@
+}}
+\hss}
+ \nointerlineskip
+ \global\@inchgbarfalse
+ \@cons\@freelist\@currbox
+\else
+ \@next\@marbox\@currlist{\@cons\@freelist\@marbox
+ \@cons\@freelist\@currbox}\@latexbug\@tempcnta\@ne
+ \if@twocolumn
+ \if@firstcolumn \@tempcnta\m@ne \fi
+ \else
+ \if@mparswitch
+ \ifodd\c@page \else\@tempcnta\m@ne \fi
+ \fi
+ \if@reversemargin \@tempcnta -\@tempcnta \fi
+ \fi
+ \ifnum\@tempcnta <\z@ \global\setbox\@marbox\box\@currbox \fi
+ \@tempdima\@mparbottom \advance\@tempdima -\@pageht
+ \advance\@tempdima\ht\@marbox \ifdim\@tempdima >\z@
+ \@warning{Marginpar on page \thepage\space moved}\else\@tempdima\z@ \fi
+ \global\@mparbottom\@pageht \global\advance\@mparbottom\@tempdima
+ \global\advance\@mparbottom\dp\@marbox
+ \global\advance\@mparbottom\marginparpush
+ \advance\@tempdima -\ht\@marbox
+ \global\ht\@marbox\z@ \global\dp\@marbox\z@
+ \vskip -\@pagedp \vskip\@tempdima\nointerlineskip
+ \hbox to\columnwidth
+ {\ifnum \@tempcnta >\z@
+ \hskip\columnwidth \hskip\marginparsep
+ \else \hskip -\marginparsep \hskip -\marginparwidth \fi
+ \box\@marbox \hss}
+ \vskip -\@tempdima
+ \nointerlineskip
+ \hbox{\vrule \@height\z@ \@width\z@ \@depth\@pagedp}
+\fi\fi\fi}
+
+\def\@makecol{\setbox\@outputbox\box\@cclv
+ \if@inchgbar
+ \@tempcnta\@ne
+ \if@twocolumn
+ \if@firstcolumn \@tempcnta\m@ne \fi
+ \else
+ \if@mparswitch
+ \ifodd\c@page \else\@tempcnta\m@ne \fi
+ \fi
+ \if@reversemargin \@tempcnta -\@tempcnta \fi
+ \fi
+ \@tempdima\ht\@outputbox \advance\@tempdima -\@chgbarbegin
+ \advance\@tempdima -\baselineskip
+ \setbox\@outputbox
+ \vbox{\boxmaxdepth \maxdepth
+ \unvbox\@outputbox \nointerlineskip \hbox to\columnwidth
+ {\ifnum \@tempcnta >\z@
+ \hskip\columnwidth \hskip\chgbarsep
+ \else \hskip -\chgbarsep \fi
+ \hbox{\vbox to 0pt{\vss
+ \hrule \@height\@tempdima \@width\chgbarwidth \@depth\z@}}\hss}}
+ \global\@chgbarbegin 0pt
+\fi
+ \ifvoid\footins\else\setbox\@outputbox
+ \vbox{\boxmaxdepth \maxdepth
+ \unvbox\@outputbox\vskip\skip\footins\footnoterule\unvbox\footins}\fi
+ \xdef\@freelist{\@freelist\@midlist}\gdef\@midlist{}\@combinefloats
+ \setbox\@outputbox\vbox to\@colht{\boxmaxdepth\maxdepth
+ \@texttop\dimen128=\dp\@outputbox\unvbox\@outputbox
+ \vskip-\dimen128\@textbottom}
+ \global\maxdepth\@maxdepth}
+
+\newenvironment{changebar}{\chgbarbegin}{\chgbarend}