[Back to TEXTFILE SWAG index] [Back to Main SWAG index] [Original]
{
> ..Well.. I am back at writing a chat door for the third time.. and am
> havin trouble with wrapping the text. It seems that when it wraps the
> text to the next line it won't remove the text on the previous line,
> and sometimes it won't wrap at all.. I don't have very dependable code
> for this purpose so any help code is appreciated.. (I am using RMdoor
> 4.2 right now..anybody seen anything better??).
Hope this helps...
}
{$R-,S-,I+,D+,F-,V+,B-,N-,L+ }
{$M 2048,0,0 }
PROGRAM WordWrap(INPUT,OUTPUT);
USES CRT;
CONST
FKeyCode = #0;
Space = ' ';
Hyphen = '-';
BackSpace = ^H;
CarriageReturn = ^M;
MaxWordLineLength = 80;
VAR
WordLine : STRING[MaxWordLineLength];
Index1 : BYTE;
Index2 : BYTE;
InputChar : CHAR;
BEGIN
WordLine := '';
Index1 := 0;
Index2 := 0;
InputChar := Space;
AssignCRT(INPUT);
AssignCRT(OUTPUT);
Reset(INPUT);
ReWrite(OUTPUT);
Writeln('Enter text (ENTER to stop) : ');
InputChar := READKEY;
{Do the job.}
WHILE (InputChar <> CarriageReturn) DO
BEGIN
CASE InputChar OF
BackSpace: {write destructive backspace & remove char from WordLine}
BEGIN
Write(OUTPUT,BackSpace,Space,BackSpace);
Delete(WordLine,(LENGTH(WordLine) - 1),1)
END;
FKeyCode: {user pressed a function key, so dismiss it}
BEGIN
InputChar := READKEY; {function keys send two-char scan code!}
InputChar := Space
END
ELSE {InputChar contains a valid char, so deal with it}
BEGIN
Write(OUTPUT,InputChar);
WordLine := (WordLine + InputChar);
IF (Length(WordLine) >= (MaxWordLineLength - 1)) THEN
{we have to do a word-wrap}
BEGIN
Index1 := (MaxWordLineLength - 1);
WHILE ((WordLine[Index1] <> Space)
AND (WordLine[Index1] <> Hyphen) 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(OUTPUT,BackSpace,Space,BackSpace);
Writeln(OUTPUT);
Write(OUTPUT,WordLine)
END
END
END; {CASE InputChar}
{Get next key from user.}
InputChar := READKEY
END; {WHILE (InputChar <> CarriageReturn)}
{Wrap up the program.}
Writeln(OUTPUT);
Writeln(OUTPUT);
Close(INPUT);
Close(OUTPUT)
END.
[Back to TEXTFILE SWAG index] [Back to Main SWAG index] [Original]