HP 3000 Manuals

Example of Using an Altered Sequence [ SORT-MERGE/XL Programmer's Guide ] MPE/iX 5.0 Documentation


SORT-MERGE/XL Programmer's Guide

Example of Using an Altered Sequence 

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;

Example 4-1.  SORTALT Program, continued 

     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;

Example 4-1.  SORTALT Program, continued 

     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 format }

        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;

Example 4-1.  SORTALT Program, continued 

     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                                                      |
|                                                                  |
____________________________________________________________________



MPE/iX 5.0 Documentation