Jump to page titleUNITED STATES
hp.com home products and services support and drivers solutions how to buy
» contact hp

:

more options
 

hp.com home
End of Jump to page title
Example-PLI How To Perform A Record SORT
Jump to content



» 

business support center

Home & Home Office Support:
» HP branded products
» Presario branded products
» Services & Warranties
Small & Medium Business Support:
» Small & Medium Business products
» Small & Medium Business services
Support for IT Professionals:
» Enterprise products (IT Resource Center)
» NonStop enterprise products
» Business & IT Services
Content starts here
Copyright (c) Digital Equipment Corporation 1988. All rights reserved
LAYERED PRODUCT or COMPONENT: PLI V3.1     OP/SYS: VMS V5.0

SOURCE:     Digital Customer Support Center



OVERVIEW:

This program demonstrates how to do a record SORT from PLI.


CAUTION:  This sample program has been tested using:
          PRODUCT: PLI V3.1 on OPERATING SYSTEM: VMS V5.0

However, we cannot guarantee its effectiveness because of the
possibility of errors in transmitting or implementing it.  It is meant
to be used as a template for writing your own program, and it may
require modification for use on your system.


PROGRAM SAMPLE:

SRTR:    PROCEDURE OPTIONS (MAIN);
/* This program demonstrates how to do a record SORT in PLI.  It
   sorts a file of variable length records called SRT_TST.DAT in
   ascending sequence on the first 6 bytes (text string) of a 40 byte
   (maximum length) record.  No output file is created.  The sorted
   records are displayed to the terminal. */

/* SOR$BEGIN_SORT specifies the key data types, record sizes,
                  collating sequence
   SOR$RELEASE_REC passes each record to SORT
   SOR$SORT_MERGE requests SORT to perform the sort on the records it
                  receives
   SOR$RETURN_REC requests SORT to pass a single record back.  SORT
                  returns the records in sorted order
   SOR$END_SORT   finishes the SORT */

%INCLUDE SOR$BEGIN_SORT;
%INCLUDE SOR$RELEASE_REC;
%INCLUDE SOR$SORT_MERGE;
%INCLUDE SOR$RETURN_REC;
%INCLUDE SOR$END_SORT;
%INCLUDE SOR$STAT;
%INCLUDE $STSDEF;

DECLARE SS$_ENDOFFILE GLOBALREF FIXED BINARY (31) VALUE,
        EOF BIT (1);
        EOF = '0'B;


declare DSC$K_DTYPE_T GLOBALREF fixed binary (31) value;
DECLARE DSC$K_CLASS_S GLOBALREF FIXED BINARY (31) VALUE;
DECLARE SOR$GK_RECORD GLOBALREF FIXED BINARY (7) VALUE;

DECLARE 1  KEY_BUFFER STATIC,
            2  NUMBER_OF_KEYS   FIXED BINARY (15) INIT (1),
            2  KEY_TYPE         FIXED BINARY (15) INIT (0),
            2  KEY_ORDER        FIXED BINARY (15) INIT (0),
                                /* ASCENDING */
            2  START_POS        FIXED BINARY (15) INIT (0),
            2  KEY_LENGTH       FIXED BINARY (15) INIT (6);

dcl     LONGEST_RECORD          FIXED BINARY (15) INIT (40);
dcl     KEYFIELD                FIXED BINARY (7);
dcl     RET_LEN                 FIXED BINARY (15);

DECLARE 1  RECIN,   /* REC LEN = 40 */
            3  BADGE        CHAR (06),      /* KEY TO SORT ON */
            3  FILL1        CHAR (05),
            3  NAME         CHAR (16),
            3  FILL2        CHAR (06),
            3  TEAM         CHAR (07);

DECLARE
   1  REC_BLK UNION,
        2  RD_BLK,
            3  LEN              FIXED BINARY (15),
            3  TYPE             FIXED BINARY (7) INIT (DSC$K_DTYPE_T),
            3  CLASS            FIXED BINARY (7) INIT (DSC$K_CLASS_S),
            3  ADRS             POINTER,
        2  REC_DESC             CHAR(8);

DCL FILIN FILE INPUT RECORD SEQUENTIAL;
DCL CNTR  FIXED BINARY (31) INIT(0);

KEY_TYPE = DSC$K_DTYPE_T;
STS$VALUE = SOR$BEGIN_SORT (KEY_BUFFER, LONGEST_RECORD);
IF ^STS$SUCCESS THEN SIGNAL VAXCONDITION(STS$VALUE);

OPEN FILE (FILIN) TITLE ('SRT_TST.DAT');
REC_BLK.LEN = 40;
REC_BLK.ADRS = ADDR(RECIN);

ON ENDFILE (FILIN) EOF = '1'B;

READ FILE (FILIN) INTO (RECIN);
HELP: DO WHILE (^EOF);
        CNTR = CNTR + 1;
        PUT SKIP LIST('RELEASED-->',CHAR(CNTR),RECIN.BADGE,
        '<>',RECIN.NAME);
        STS$VALUE = SOR$RELEASE_REC(ref(REC_DESC));
        IF ^STS$SUCCESS
              then do;
                 put file(sysprint) list('did not return ok');
                 SIGNAL VAXCONDITION(STS$VALUE);
              end;
        READ FILE (FILIN) INTO (RECIN);
END help;

CLOSE FILE (FILIN);
PUT SKIP LIST ('**** ALL RECORDS RELEASED **** REC CNTR = ',CNTR);
CNTR = 0;

STS$VALUE = SOR$SORT_MERGE();
IF ^STS$SUCCESS THEN SIGNAL VAXCONDITION(STS$VALUE);

STS$VALUE = SOR$RETURN_REC (ref(REC_DESC),RET_LEN);
DO WHILE (STS$VALUE ^= SS$_ENDOFFILE);
    IF STS$SUCCESS
       then do;
           cntr = cntr + 1;
           PUT SKIP LIST('RETURNED-->',CHAR(CNTR),RECIN.BADGE,
           '<>',RECIN.NAME);
       end;
       else SIGNAL VAXCONDITION(STS$VALUE);
    STS$VALUE = SOR$RETURN_REC (ref(REC_DESC),RET_LEN);
END;

STS$VALUE = SOR$END_SORT();
IF ^STS$SUCCESS THEN SIGNAL VAXCONDITION(STS$VALUE);

PUT SKIP LIST ('**** ALL RECORDS RETURNED **** REC CNTR = ',CNTR);
END;



buy online or call 1.800.AT.COMPAQ
privacy statementusing this site means you accept its terms