[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]