
(************************************************************
*
*	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.
