program Tehtava1012(input, output);

{Vähän laajenneltu!}

const MAX = 255;

type string = record
                len: 0..MAX;
                str: packed array[1..MAX] of char
              end;

var a, b, c, d : string;
    i: integer;

function length(s: string):integer;
begin
  length := s.len
end;

procedure empty(var s: string);  {tekee s:stä tyhjän merkkijonon}
begin
  s.len := 0;
end;

procedure writestring(s: string);
  var i: integer;
begin
  for i := 1 to s.len do
    write(s.str[i]);
end;


{---------readstring-----------------------------}
procedure readstring(var s: string);
  {Ohittaa välilyönnit ja rivinvaihdot ja sitten
   lukee välilyöntiin tai rivinvaihtoon asti
   1..MAXiin asti menee s:ään, ylijäävä menetetään.}
  var c: char;
begin
  s.len := 0;
  if not eof then
    begin
      read(c);
      while (c = ' ') and not eof do {ohitet. välilyönnit}
        read(c);
      if c <> ' ' then
        begin
          s.len := s.len + 1;
          s.str[s.len] := c;
          read(c); {ei voi olla eof, koska c oli <>' '}
          while c <> ' ' do
            begin
              if s.len < MAX then
                begin
                  s.len := s.len + 1;
                  s.str[s.len] := c;
                end;
              read(c);
            end;          
        end;
    end;
end;


{---------catenate------------------------------}
procedure catenate(var a: string; b: string);
 {  a := a + b
  jos pituus ylittää MAXin, loppu katkaistaan}
  var i: integer;
begin
  for i := 1 to b.len do
    if a.len < MAX then
      begin
        a.len := a.len + 1;
        a.str[a.len] := b.str[i];
      end;
end;

{---------trim----------------------------------}
procedure trim(var s: string);
begin
  while (s.len > 1) and (s.str[s.len] = ' ') do
    s.len := s.len - 1;
  if (s.len = 1) and (s.str[s.len] = ' ') then
    s.len := 0;
end;

{---------pos-----------------------------------}
function pos(e, s: string): integer;
  var loytyi: boolean;
      essa, sssa: integer;
begin
  loytyi := false;  {pessimistinen ennakko-odotus!}
  if length(e) <= length(s) then
    begin
      sssa := 1;
      while (sssa <= length(s)-length(e)+1) and not loytyi do
        begin
          loytyi := true; {optimistinen ennakko-odotus!}
          for essa := 1 to length(e) do
            begin
               if e.str[essa] <> s.str[sssa+essa-1] then
                 loytyi := false;
            end;
          sssa := sssa + 1;
        end;
     end;
  if loytyi then 
    pos := sssa - 1
  else
    pos := 0;
end;


begin            {TESTIPÄÄOHJELMA}
  writeln('>>>anna merkkijono');
  readstring(a);
  writeln('se oli:');
  writestring(a);
  writeln;
  writeln('>>>sen pituus on ',length(a):1);

  writeln('>>>anna toinen merkkijono');
  readstring(b);
  catenate(a, b);
  writeln('>>>eka + toka on:');
  writestring(a);
  writeln;
  writeln('>>>sen pituus on ', length(a):1);

  writeln('>>>anna trimmattava merkkijono');
  readstring(a);
  writeln('>>>lisään sen loppuun 7 blankoa');
  for i := length(a)+1 to length(a)+7 do
    a.str[i] := ' ';    
  a.len := a.len + 7;
  writeln('>>>sen pituus on ',length(a):1);
  trim(a);
  writeln('>>>trimmattuna sen pituus on ',length(a):1);

  empty(a);
  trim(a);
  writeln('>>>trimmatun tyhjän merkkijonon pituus on ', length(a):1);

  a.len := 1;
  a.str[1] := ' ';
  trim(a);
  writeln('>>>trimmatun '' ''- merkkijonon pituus on ', length(a):1);

  writeln('>>>posin testaus merkki ''*'' lopettaa');
  repeat
    writeln('anna se josta haetaan');
    readstring(a);
    writeln('anna se jota haetaan');
    readstring(b);
    writeln('posin arvo on ',pos(b, a):1); 
  until (a.str[1]='*') or (b.str[1]='*')

end.

