program lukutesti(input, output);       {tehtävä 11.1}
  var kunnossa: boolean;
      kokluku:  integer;
      seuraava: char;


{------------LueInteger-----------------------------------------}
{------------varovainen versio input^ käyttäen------------------}
{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,
      alkublankoja: boolean;
begin
  OK := false;
  negat := false;
  arvo := 0;
  if not eof then
    begin
      alkublankoja := (input^ = ' ');
      while alkublankoja do
        begin
          read(merkki); {luetaan välilyönti}
          if eof then
            alkublankoja := false
          else if (input^ <> ' ') then
            alkublankoja := false
        end;            
      if not eof then 
        begin
          if input^  in ['+', '-'] then 
            begin
              read(merkki);
              if merkki = '-' then 
                negat := true;
            end; 
            {nyt eofia ei tarvitse testata, koska +- jälkeen
             on välttämättä ainakin ' '!}
          if input^ in ['0'..'9'] then
             begin
               OK := true;
               repeat
                 read(merkki);
                 arvo := 10 * arvo + (ord(merkki)-ord('0'));
              until not(input^ in ['0'..'9']);
                 {jos on ollut numeroita, inputissa aina on 
                  ainakin yksi välilyöntinä näkyvä rivinloppu
                  ennen eofia!}
              if negat then
                arvo := - arvo;
            end;
        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 
        write('Virheellinen merkki: ','''');
        read(seuraava);
        writeln(seuraava, '''')
      end;
  until (kokluku = 7) or eof;

end.

