PROGRAM MergeFiles(F, G, H);

    {--------------------------------------------
      Program 9.2- Merge files F and G sorted by
      last name into H
    ---------------------------------------------}

    TYPE
        Natural = 0..MaxInt;
        String15 = PACKED ARRAY[1..15] OF Char;
        Person = RECORD
            Name: RECORD
                First, Last: String15;
            END;
            Height: Natural; { centimeters }
        END;
    VAR
        F, G, H: FILE OF Person;
        EndFG: Boolean;
BEGIN
    Reset(F);
    Reset(G);
    Rewrite(H);

    EndFG := Eof(F) OR Eof(G);

    WHILE NOT EndFG DO BEGIN
        IF F^.Name.Last < G^.Name.Last THEN BEGIN
            H^ := F^;
            Get(F);
            EndFG := Eof(F)
        END ELSE BEGIN
            H^ := G^;
            Get(G);
            EndFG := Eof(G)
        END;
        Put(H)
    END;

    WHILE NOT Eof(G) DO BEGIN
        Write(H, G^);
        Get(G)
    END;

    WHILE NOT Eof(F) DO BEGIN
        Write(H, F^);
        Get(F)
    END
END.
