HPlogo SORT-MERGE/XL Programmer's Guide > Chapter 2 Creating Core Routines That Sort and Merge

Example of Core Sorting Routine

MPE documents

Complete PDF
Table of Contents
Index

The following program sorts the personnel files shown below. They are sorted together by last name. The record size is determined by the input files. The status parameter is checked after the calls to HPSORTINIT and HPSORTEND.

The files that are used in this example are as follows (character positions and data descriptions are indicated for 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 2-1. SORTFILE Program

   program SORTFILE (input,output);
   
   {This program reads the files, TEMPEMP and PERMEMP, }
   {sorts by last name, and outputs to the file, ALLEMP}
   
   var
      tempFileNum: INTEGER;
      permFileNum: INTEGER;
      outFileNum : INTEGER;
      status     : INTEGER;

   procedure HPFOPEN  ; intrinsic;
   procedure HPSORTINIT; intrinsic;
   procedure HPSORTERRORMESS; 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;

   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);
   end;


   procedure DO_SORT;

   var
      inputfiles   : array [1..3] of INTEGER;
      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;
      statistics   : array [1..6] of INTEGER;

   begin
      inputfiles [1] := tempFileNum;
      inputfiles [2] := permFileNum;
      inputfiles [3] := 0;
      outputfile [1] := outFileNum;                     {from HPFOPEN}
      outputfile [2] := 0;
      outputOption := 0;   {output record format same as input record}
      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}
      HPSORTINIT (status, inputfiles, outputfile, outputOption,,,
                  numKeys, keys, altseq,,,,,);
      if status <> 0 then             {If error in HPSORTINIT  }
      begin                       {Get message and write it to screen}
         Message := ' ';
         HPSORTERRORMESS (status, message, length);
         writeln (message);
      end;

      HPSORTEND (status, );

      if status <> 0 then             {If error in HPSORTEND   }
      begin                       {Get message and write it to screen}
         message := ' ';
         HPSORTERRORMESS (status, message, length);
         writeln (message);
      end;
   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 from the sort is written to ALLEMP. To view the output:

[]




Error Checking


Example of Core Merging Routine