{ instab.txt -- Algorithm #6: Insert Tabs by Tom Swan }

procedure InsertTabs(L: String);
var
  T: String;
  J, K: Integer;
  C, Q: Char;
  Eol: Boolean; { End of line }

  function NextChar(var C: Char): Char;
  begin
    C <- L[J + 1];
    Eol <- C = Q; { True at end of line }
    Return C;
  end;

begin
  Set T to null string;
  Set Q to unique char;
  Append Q to L as sentinel;
  K <- 0;  { Column count }
  repeat
    J <- K;
    while NextChar(C) = blank do
    begin
      J <- J + 1;
      if J mod tabWidth = 0 then
      begin
        Append tab to T;
        K <- J;
      end;
    end;
    while (K < J) do
    begin
      Append blank to T;
      K <- K + 1;
    end;
    if not Eol then
    begin
      Append C to T;
      K <- K + 1;
    end;
  until Eol;
  Return T;
end;


(*
// --------------------------------------------------------------
// Copyright (c) 1993 by Tom Swan. All rights reserved
// Revision 1.00    Date: 04/06/1993   Time: 04:18 pm
*)
