
% -*- Tex -*- macros for no-fill, built on Plain

\newenvironment{code}{\samepage \vskip 0.1in \tt\nofill}{\endnofill \vskip 0.1in}
\newenvironment{tightcode}{\samepage \tt\nofill}{\endnofill}

\catcode`\@=11\relax	     % allow @ in macro names

% a simple no-fill, used as
%
% \nofill
% Here is some no-fill text.
%    This line starts with three spaces.
% This is the    last line.  It has embedded spaces which will appear.
% \endnofill
%
% You might want to switch to a fixed-width font when you use
% these macros.

\def\nofill {%
  \begingroup
    % spaces made active so they can be tested for at start of lines
    %  and so multiple spaces aren't collapsed to one.
    \obeyspaces
    % nofill via every line a par; if spaces start next line
    %   we do a \noindent to make sure a par gets started.
    \parskip=\z@
    \parindent=\z@
    \let\p@r=\par
    \def\par{\p@r \ifspacenext{\noindent}{}}%
    \obeylines}

\def\endnofill{
  \endgroup}

% \ifspacenext is used as:
%     \ifspacenext {<true tokens>}{<false tokens>}
% It executes the true tokens if
% the next character is an active space, the false tokens
% otherwise.  The same technique can be used to check for any
% character, not just active space.

% You can NOT nest uses of \ifspacenext!

% get a token which is \ifx-equal to active space, so we can test
% for it
{\obeyspaces\global\let\sp@ce= \relax}

\def\ifspacenext #1#2{%
  \def\truet@ks{#1}%
  \def\falset@ks{#2}%
  \futurelet\next\ifsp@cenext}
\def\ifsp@cenext {%
  \ifx\next\sp@ce \truet@ks \else \falset@ks \fi}

\catcode`\@=12\relax	% make @ inaccessible again
