[Back to TEXTEDIT SWAG index] [Back to Main SWAG index] [Original]

    {
    >    P.S.  A pre-made Unit to do a Word-wrap Function might also be nice.
    }

    Unit WordWrap;

    Interface

    Uses
      Crt;

    Type
      Strn80 = String[80];

    Const
      MaxWordLineLength : Byte = 80;

    Var
      WordLine  : Strn80;
      Index1    : Byte;
      Index2    : Byte;

    Procedure ResetWrapStrn;
    Procedure WrapStrn (InputStrn: Strn80);

    Implementation

    Procedure ResetWrapStrn;
    begin
      Index1 := 0;
      Index2 := 0;
      Wordline := '';
    end;

    Procedure WrapStrn (InputStrn: Strn80);
    Var
      Count : Byte;
      InputChar : Char;
    begin
      For Count := 1 to Length (InputStrn) do
      begin
        InputChar := InputStrn[Count];
        Case InputChar OF
          ^H: {Write destructive backspace & remove Char from WordLine}
              begin
                Write(^H,' ',^H);
                DELETE(WordLine,(LENGTH(WordLine) - 1),1)
              end;
          #0: {user pressed a Function key, so dismiss it}
              begin
                InputChar := ReadKey; {Function keys send two-Char scan code!}
                InputChar := ' '
              end;
          #13: { it is an enter key.. reset everything and start on a new line}
              begin
                Writeln;
                Index1 := 0; Index2 := 0; Wordline := '';
              end;
          else {InputChar contains a valid Char, so deal With it}
          begin
            Write(InputChar);
            WordLine := (WordLine + InputChar);
            if (LENGTH(WordLine) >= (MaxWordLineLength - 1)) then
            {we have to do a Word-wrap}
            begin
              Index1 := (MaxWordLineLength - 1);
              While ((WordLine[Index1] <> ' ') and (WordLine[Index1] <> '-')
                      and (Index1 <> 0)) DO
                Index1 := (Index1 - 1);
              if (Index1 = 0) then {whoah, no space was found to split line!}
                Index1 := (MaxWordLineLength - 1); {forces split}
              DELETE(WordLine,1,Index1);
              For Index2 := 1 to LENGTH(WordLine) DO
                Write(^H,' ',^H);
              Writeln;
              Write(WordLine)
            end
          end
        end; {CASE InputChar}
      end;
    end;

    begin {WordWrap}
    {Initialize the Program.}
    WordLine  := '';
    Index1    := 0;
    Index2    := 0;
    end.

[Back to TEXTEDIT SWAG index] [Back to Main SWAG index] [Original]