home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol019 / lstr.pas < prev    next >
Pascal/Delphi Source File  |  1984-04-29  |  1KB  |  56 lines

  1. (*$I+    [Show me the source code]  *)
  2. PROGRAM LONGLINE;
  3.  
  4. CONST
  5.   LINESIZE = 80 ;
  6.  
  7. TYPE
  8. (*---Pascal/Z needs these TYPE definitions---*)
  9.   $STRING0   = STRING 0 ;
  10.   $STRING255 = STRING 255 ;
  11.  
  12. VAR
  13.   DONE : BOOLEAN ;
  14.   LINE : STRING LINESIZE ;
  15.   WORD : STRING 80 ;
  16.  
  17. (*---PASCAL/Z NEEDS THESE STRING FUNCTIONS---*)
  18. FUNCTION LENGTH(X: $STRING255): INTEGER; EXTERNAL;
  19. FUNCTION INDEX(X,Y :$STRING255): INTEGER; EXTERNAL;
  20. PROCEDURE SETLENGTH(VAR X :$STRING0; Y :INTEGER); EXTERNAL;
  21. (*-------------------------------------------*)
  22.  
  23. PROCEDURE HEADING;
  24. BEGIN
  25.   WRITELN('TYPE ONE WORD AT A TIME AND THIS PROGRAM WILL');
  26.   WRITELN('ASSEMBLE THE WORDS INTO LINES OF ',LINESIZE:1, ' WORDS EACH');
  27.   WRITELN('TYPE ## TO STOP');
  28.   WRITELN;
  29. END;
  30.  
  31. BEGIN(* MAIN PROGRAM *)
  32.   HEADING;
  33.   SETLENGTH(WORD,0);
  34.   DONE := FALSE;
  35.   {---ATTEMPT TO READ THE FIRST WORD---}
  36.   WRITE('Enter the first word: ');
  37.   READLN(WORD);
  38.   WHILE NOT DONE DO
  39.     BEGIN
  40.       SETLENGTH(LINE,0);
  41.       WHILE ( (LENGTH(LINE) + LENGTH(WORD)) < LINESIZE )
  42.        AND ( INDEX(WORD, '##')=0 ) DO
  43.         BEGIN(* Our Line will be composed of -
  44.          WORDS/SPACES/WORDS            *)
  45.       IF LENGTH(WORD) < LINESIZE THEN APPEND(WORD, ' ');
  46.       (*---LINE := LINE + WORD---*)
  47.       APPEND( LINE, WORD );
  48.       WRITE('Enter the next word: ');
  49.       READLN(WORD);
  50.           IF WORD = '##' THEN DONE := TRUE;
  51.         END(*WHILE*);
  52.       WRITELN('Here is your Line:');
  53.       WRITELN(LINE)
  54.     END(* WHILE NOT DONE *)
  55. END.
  56.