| 
    
   | 
   | 
  
     
    
    
The following example sorts the data file DATA. The entries
in DATA are sorted using an altered collating sequence that is explicitly
specified in the program. The sequence contains all displayable
ASCII characters and alters the order of the alphabetic characters to
AaBbCc ....The output file is called FRUIT.
    
DATA - a file of fruit names
  banana
  Apple
  Grapes
  grapes
  Pear
  peach
  orange
 
Example 4-1 SORTALT Program
    
  program SORTALT (input,output);
  {This program  reads the file DATA, sorts by fruit name, }
  {outputs to the file FRUIT, and uses an altered sequence.}
  var
     dataFileNum : INTEGER;
     fruitFileNum: INTEGER;
     status      : INTEGER;
  procedure HPFOPEN  ; intrinsic;
  procedure HPSORTINIT; intrinsic;
  procedure HPSORTEND; intrinsic;
  procedure FCLOSE; intrinsic;
  procedure OPEN_FILES;
  const
     designator = 2;
     domain     = 3;
     access     = 11;
     record_Size = 19;
  var
     datafile  : packed array [1..10] of CHAR;
     fruitfile : packed array [1..10] of CHAR;
     permanent : INTEGER;
     new       : INTEGER;
     write     : INTEGER;
     size      : INTEGER;
  begin
     datafile := '%DATA%';
     permanent := 1;
     HPFOPEN (dataFileNum, status, designator, datafile, domain,
              permanent);
     new := 4;
     write := 1;
     size := 80;
     fruitfile := '%FRUIT%';
     HPFOPEN (fruitFileNum, status, designator, fruitfile, domain,
              new, access, write, record_size, size);
  end;
  Procedure DO_SORT;
  var
     inputfiles   : array [1..2] of INTEGER;
     outputfile   : array [1..2] of INTEGER;
     outputOption : INTEGER;
     numKeys      : INTEGER;
     keys         : array [1..4] of INTEGER;
     altseq       : packed array [1..96] of CHAR;
  Begin
     inputfiles [1] := dataFileNum;
     inputfiles [2] := 0;
     outputfile [1] := fruitFileNum;                 {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 := ' ';
     altseq[1] := CHR(0);       {Data = ASCII, Sequence is altered}
     altseq[2] := CHR(93);  {94 characters in altered ASCII sequence}
  {Put sequence in Altseq.Sequence contains all displayable
   ASCII characters}
     strmove (15, '!"#$%&'')(*+,-./', 1, altseq, 3);
     strmove (16, '0123456789::<=>?', 1, altseq, 18);
     strmove (16, '@AaBbCcDdEeFfGgH', 1, altseq, 34);
     strmove (16, 'hIiJjKkLlMmNnOoP', 1, altseq, 50);
     strmove (16, 'pQqRrSsTtUuVvWwX', 1, altseq, 66);
     strmove (15, 'xYyZz[\]^_{|}~', 1, altseq, 81);
     HPSORTINIT (status, inputfiles, outputfile, outputOption,,,
        numKeys, keys, altseq,,,statistics,,);
     {Check for errors in HPSORTINIT}
     HPSORTEND (Status, );         {Check for errors in HPSORTINIT}
  end;
  Procedure CLOSE_FILES;
  var
     disposition : SHORTINT;
     securityCode : SHORTINT;
  Begin
     disposition := 0;
     securityCode := 0;
     FCLOSE (dataFileNum, disposition, securityCode);
     disposition := 1;
     FCLOSE (fruitFileNum, disposition, securityCode);
  end;
  begin {main}
     OPEN_FILES;
     DO_SORT;
     CLOSE_FILES;
  end.
When this program is executed, the output is written to FRUIT. To view FRUIT:
  :print fruit
  Apple
  banana
  Grapes
  grapes
  peach
  Pear
  orange
 
    
    
     
    
     
   |