(************************************************************
*
* Donated by Ray Penley, June 1980
*
************************************************************)
(*$I+ [Show me the source code] *)
PROGRAM LONGLINE;
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.