with Text_io; with INPUT_FILE; use input_file; separate(REPORT) task body BLOCKS is DONE:boolean:=false; W:WORD; C:character; procedure dbg(S:STRING) is begin text_io.put_line("blocks: "&S); end; begin Open; Get_block; FILE:while not done loop -- start of a block --dbg("start block") C:=FIRST_CHAR; BLOCK_BODY:while not EOB and not done loop WORD_OR_SPACE:while not EOB and not done loop if C =' ' then C:=NEXT_CHAR; else W.LENGTH:=0; GET_WORD:while C/=' ' and not EOB loop W.LENGTH:=W.LENGTH+1; W.S(W.LENGTH):=C; C:=NEXT_CHAR; end loop GET_WORD; select accept Get(W:out WORD) do Get.W:=BLOCKS.W; DONE:=false; end Get; or accept STOP do DONE:=true; --dbg("Blocks got STOP!"); end STOP; end select; exit FILE when DONE; end if; end loop WORD_OR_SPACE; end loop BLOCK_BODY; Get_block; end loop FILE; Close; end;