HP 3000 Manuals

Example of Record Input [ SORT-MERGE/XL Programmer's Guide ] MPE/iX 5.0 Documentation


SORT-MERGE/XL Programmer's Guide

Example of Record Input 

The following program sorts the personnel files shown below.  They are
sorted by last name.  The program marks the employee numbers of the
temporary employees with an asterisk.

These two files, TERMEMP and PERMEMP, are used in the following example.
(The data descriptions in the top line, and the character positions along
the bottom do not appear in the file.  They are for your convenience
only.)

TEMPEMP          Information file about temporary employees:

     Last Name           First Name       Employee Number       Hire Date

     Gangley,            Tomas               000003              06/06/87
     Rields,             Evelyn              000007              07/12/87
     Everett,            Joyce               000029              10/19/87

     0        1         2         3         4         5         6         7
     1234567890123456789012345678901234567890123456789012345678901234567890

PERMEMP          Information file about permanent employees:

     Last Name          First Name        Employee Number       Hire Date

     Jones,              Eliza               000001              06/06/87
     Smith,              James               000005              06/06/87
     Jackson,            Johnathon           000006              06/06/87
     Washington,         Lois                000014              07/23/87
     Jackson,            Rosa                000022              08/15/87

     0        1         2         3         4         5         6         7
     1234567890123456789012345678901234567890123456789012345678901234567890

Example 3-1.  SORTREC_IN Program 

     program SORTREC_IN (input,output);
     {This program reads the files, TEMPEMP & PERMEMP, alters the TEMPEMP records, }
     {passes all records to SORT/XL, and outputs to the file, ALLEMP.              }

     var
        tempFileNum: INTEGER;
        permFileNum: INTEGER;
        outFileNum : INTEGER;
        status     : INTEGER;

     procedure HPFOPEN; intrinsic;
     procedure HPSORTINIT; intrinsic;
     function  FREAD : SHORTINT; intrinsic;
     procedure HPSORTINPUT; intrinsic;
     procedure HPSORTEND; intrinsic;
     procedure FCLOSE; intrinsic;

     procedure OPEN_FILES;

     const
        designator  = 2;
        domain      = 3;
        access      = 11;
        record_size = 19;

     var
        tempfile  : packed array [1..10] of CHAR;
        permfile  : packed array [1..10] of CHAR;
        outfile   : packed array [1..10] of CHAR;
        permanent : INTEGER;
        new       : INTEGER;
        write     : INTEGER;
        size      : INTEGER;

Example 3-1.  SORTREC_IN Program, continued 

     begin
        tempfile := '%TEMPEMP%';
        permanent := 1;
        HPFOPEN (tempFileNum, status, designator, tempfile, domain, permanent) ;

        permfile := '%PERMEMP%';
        HPFOPEN (permFileNum, status, designator, permfile, domain, permanent) ;
        new := 4;
        write := 1;
        size := 80;
        outfile := '%ALLEMP%';
        HPFOPEN (outFileNum, status, designator, outfile, domain, new, access,
                 write, record_size, size);

     procedure DO_SORT;

     var
        outputfile   : array [1..2] of INTEGER;
        outputOption : INTEGER;
        numKeys      : INTEGER;
        keys         : array [1..4] of INTEGER;
        altseq       : packed array [1..2] of CHAR;
        message      : packed array [1..80] of CHAR;
        length       : INTEGER;
        lngth        : SHORTINT;
        buffer       : packed array [1..80] of CHAR;
        recLength    : INTEGER;

     begin
        outputfile [1] := outFileNum;                                 {From HPFOPEN}
        outputfile [2] := 0;
        outputOption := 0;       {output record format same as input record format }
        recLength := 80;                                         {maximum record length}
        numKeys := 1;                                                      {one key}
        keys[1] := 1;                                                   {key begins}
        keys[2] := 20;                                                  {key length}
        keys[3] := 0;                                                    {byte data}
        keys[4] := 0;                                              {ascending order}
        altseq[1] := CHR(255);                      {data = ASCII; sequence = ASCII}
        altseq[2] := CHR(255);                             {256 characters in ASCII}
     end;

Example 3-1.  SORTREC_IN Program, continued 

        HPSORTINIT (status,, outputfile, outputOption,
           recLength,, numKeys, keys, altseq,,,,,);

         length := 72;                                          {read 72 characters}

         repeat                            {read temporary employee file by record}
            Lngth := FREAD (TempFileNum, Buffer, Length);
            Buffer[40] := '*';                                     {Mark the record}
            if Lngth <> 0 then
               HPSORTINPUT (Status, Buffer, Length);
         until Lngth = 0;

         repeat                             {read permanent employee file by record}
           lngth := FREAD (permfilenum, buffer, length);
           if lngth <> 0 then
              HPSORTINPUT (status, buffer, length)
         until lngth = 0;

        HPSORTEND (status, );
     end;

     procedure CLOSE_FILES;

     var
        disposition : SHORTINT;
        securityCode : SHORTINT;

     begin
        disposition := 0;
        securityCode := 0;
        FCLOSE (tempFileNum, disposition, securityCode);
        FCLOSE (permFileNum, disposition, securityCode);
        disposition := 1;
        FCLOSE (outFileNum, disposition, securityCode);
     end;

     begin {main}
        OPEN_FILES;
        DO_SORT;
        CLOSE_FILES;
     end.

When this program is executed, the output is written to ALLEMP. To view
ALLEMP:
_____________________________________________________________________________
|                                                                           |
|                                                                           |
|      :print allemp                                                        |
|                                                                           |
|      Everett,            Joyce              *000029              10/19/87 |
|      Gangley,            Tomas              *000003              06/06/87 |
|      Jackson,            Jonathan            000006              06/06/87 |
|      Jackson,            Rosa                000022              08/15/87 |
|      Jones,              Eliza               000001              06/06/87 |
|      Rields,             Evelyn             *000007              07/12/87 |
|      Smith,              James               000005              06/06/87 |
|      Washington,         Lois                000014              07/23/87 |
|                                                                           |
_____________________________________________________________________________



MPE/iX 5.0 Documentation