(************************************************************
*
*       Donated by Ray Penley, June 1980
*
************************************************************)



(*$I+   [Show me the source code]  *)
PROGRAM LONGLINE;

CONST
 default  = 80 ; {Default length for strings}
 LINESIZE = 80 ;

TYPE
 alfa       = STRING 10 ;{just the right size}
 shorty     = STRING 40 ;{ 1/2 of default length }
 string40   = STRING 40 ;{ just say it another way }
 string79   = STRING 79 ;{ ONE less than default length }
 string80   = STRING 80 ;{ DEFAULT length }
 Max_String = STRING 255;{ The BIG GUN }
(*---Use these for the Pascal/Z supplied functins---*)
 $STRING0   = STRING 0 ;
 $STRING255 = STRING 255 ;

VAR
 DONE : BOOLEAN ;
 LINE : STRING LINESIZE ;
 WORD : string80 ;

(*---Required for Pascal/Z supplied string functins---*)
FUNCTION LENGTH(X: $STRING255): INTEGER; EXTERNAL;
FUNCTION INDEX(X,Y :$STRING255): INTEGER; EXTERNAL;
PROCEDURE SETLENGTH(VAR X :$STRING0; Y :INTEGER); EXTERNAL;
(*----------------------------------------------------*)

PROCEDURE HEADING;
BEGIN
 WRITELN('TYPE ONE WORD AT A TIME AND THIS PROGRAM WILL');
 WRITELN('ASSEMBLE THE WORDS INTO LINES OF ',LINESIZE:1, ' WORDS EACH');
 WRITELN('TYPE ## TO STOP');
 WRITELN;
END;


Procedure GetWord( var  xword      : string40 ;
                       req_length : integer  );
var
 temp : string 255;
begin
 SETLENGTH(xword,0);{start with a null string}
 READLN(temp);
 If length(temp)<=req_length then
   APPEND(xword,temp)
end;

BEGIN(* MAIN PROGRAM *)
 HEADING;
 SETLENGTH(WORD,0);
 DONE := FALSE;
 {---ATTEMPT TO READ THE FIRST WORD---}
 WRITE('Enter the first word: ');
 GetWord(WORD,20);
 WHILE NOT DONE DO
   BEGIN
     SETLENGTH(LINE,0);
     WHILE ( (LENGTH(LINE) + LENGTH(WORD)) < LINESIZE )
          AND ( INDEX(WORD, '##')=0 ) DO
       BEGIN(* Our Line will be composed of -
                WORDS/SPACES/WORDS                     *)
         IF LENGTH(WORD) < LINESIZE THEN APPEND(WORD, ' ');
         (*---LINE := LINE + WORD---*)
         APPEND( LINE, WORD );
         WRITE('Enter the next word: ');
         GetWord(WORD,20);
         IF WORD = '##' THEN DONE := TRUE;
       END(*WHILE*);
     WRITELN('Here is your Line:');
     WRITELN(LINE)
   END(* WHILE NOT DONE *)
END.