program lukutesti(input, output);   {TEHTÄVÄ 6.4}
type integer = longint;
  var kunnossa: boolean;
      kokluku:  integer;

{TURBO-PASCAL -VERSIO: RIVINLOPPU KÄSITELLÄÄN STANDARDISTA
 POIKETEN: NEW LINE JA CARRIAGE RETURN SAMASTETAAN OMIN 
 KÄSIN VÄLILYÖNTIIN!!!}

{------------LueInteger-----------------------------------}
{Proseduuri palauttaa 1. parametrilla tiedon luvun löytymisestä,
 jos se on true, 2. parametri on löytynyt luku}

procedure LueInteger(var OK: boolean; var arvo: integer);
  var merkki: char;
      negat: boolean;
begin
  OK := false;
  negat := false;
  arvo := 0;
  if not eof then
    begin
      read(merkki);
      while not eof and ((merkki=' ') or
                         (ord(merkki)=10) or  {new line}
                         (ord(merkki)=13)) do {cr}
        read(merkki);
      if merkki in ['+', '-'] then
        begin
          if merkki = '-' then
            negat := true;
          read(merkki);
        end;
      if merkki in ['0'..'9'] then
        begin
          OK := true;
          repeat
            arvo := 10*arvo + (ord(merkki)-ord('0'));
            read(merkki)
          until not(merkki in ['0'..'9']);
          if negat then
            arvo := - arvo;
        end;
    end;
end;
{------------------------------------------------------------}


begin {TESTIPÄÄOHJELMA}
  writeln('LueIntegerin testaus. Luku 7 lopettaa testin.');
  writeln;
  repeat
    LueInteger(kunnossa, kokluku);
    if kunnossa then
      writeln('Luku on ', kokluku:1)
    else
      begin
        if not eof then
          readln;
        writeln('Luku on virheellinen');
      end;
  until (kokluku = 7) or eof;

end.
