FTN 
      INTEGER FUNCTION CMP(LIST,ABUF,BBUF),92069-16061 REV.1912 781027
      INTEGER LIST(101,6),ABUF(42),BBUF(42) 
C 
C 
C*****************************************************************
C (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979. ALL RIGHTS RESERVED 
C NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, REPRODUCED, OR
C TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITH OUT THE PRIOR 
C WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. 
C****************************************************************** 
C 
C 
C     SOURCE:    92069-18103
C     RELOC:     92069-16060
C 
C 
C****************************************************************:
C 
C 
C 
C 
C 
C 
C 
C 
C ABSTRACT: 
C 
C CMP COMPARES A DATA RECORD ASSOCIATED WITH THE INFORMATION IN 
C THE TABLE LIST.  LIST IS A ARRAY IN WHICH IS THE FOLLOWING
C INFORMATION,
C 
C     WORD 1 - ITEM NUMBER
C     WORD 2 - ITEM TYPE
C     WORD 3- ITEM LENGTH IN BYTE 
C     WORD 4 - NUMBER OF ELEMENTS 
C     WORD 5 - OFFSET IN BYTES INTO THE BUFFERS 
C     WORD 6 - FLAG INDICATING SORT KEY 
C                  0 IMPLIES NOT A SORT KEY 
C                  N IS THE ITEM NUMBER OF THE SORT KEY 
C       ALL THE SORT KEYS ARE AT THE FIRST OF THE LIST-ARRAY
C 
C 
C 
C THE FIRST ENTRY OF THE LIST ARRAY IS DIFFERENT THAN THE REST. 
C 
C    WORD 1 - NUMBER OF ENTRIES IN THE ARRAY
C    WORD 6 - NUMBER OF SORT ITEMS
C 
C THE LIST ARRAY IS ARRANGED FROM THE LEAST SIGNIFICANT SORT FIELD
C (S[NULL]) TO THE MOST SIGNIFICANT SORT FIELD (S[5]), THEREFORE
C EACH RECORD CONTAINS INFORMATION FROM THE LEAST SIGNIFICANT FIELD 
C TO THE MOST SIGNIFICANT FIELD, WHICH IS REALLY IN REVERSE SORT
C ORDER. (THE FACT THAT THE DATA IS IN REVERSE SORT ORDER IS BECAUSE
C THE LIST ARRAY IS USED WITH THE DBGET CALL.) THEREFORE, 
C CMP COMPARES FROM THE BOTTOM OF THE LIST ARRAY TO THE TOP.  THIS
C WILL ASSURE THAT THE SORT IS FROM THE MOST SIGNIFICANT FIELD TO THE 
C LEAST SIGNIFICANT FIELD.  DO NOT GET CONFUSED BECAUSE THE RECORD
C IS BEING SORT FROM RIGHT TO LEFT - HOW THE PHYSICAL RECORD IS ARRANGED
C IS NOT IMPORTANT, ONLY HOW THE SORT FIELDS ARE SORTED.
C 
C CALLING SEQUENCE: 
C 
C    CALL CMP(LIST,ABUF,BBUF) 
C 
C     WHERE:
C 
C       ABUF
C       IS A DATA BUFFER WHICH CORRESPONDS TO THE LIST ARRAY
C 
C       BBUF
C       IS A DATA BUFFER WHICH CORRESPONDS TO THE LIST ARRAY
C 
C       LIST
C       IS DESCRIBED ABOVE
C 
C 
C ON EXIT:
C 
C CMP IS LESS THAN ZERO WHEN ABUF .LT. BBUF 
C     IS ZERO WHEN ABUF .EQ. BBUF 
C     IS GREATER THAN WHEN ABUF .GT. BBUF 
C 
C 
C     IF(CMP(LIST,ABUF,BBUF)) <,=,> 
C 
C 
C 
C 
C 
      INTEGER L,I,IA,IB,ITEM
      REAL A,B
      INTEGER R 
C 
C 
C 
C 
C 
      DATA INTGR/111B/
      DATA R/122B/
C 
C 
C 
C 
C 
C 
C 
C 
C 
C BEGIN 
C 
      DO 70 ITEM = LIST(1,6)+1,2,-1 
C 
C GET ITEM TYPE 
C 
      ITYPE = LIST(ITEM,2)
C 
C GET BYTE OFFSET 
C 
      I = LIST(ITEM,5)
C 
C GET END OF ITEM 
C 
      L = I + LIST(ITEM,3) - 1
C 
C PROCESS INTEGERS
C 
      IF(ITYPE .NE. INTGR) GOTO 35
      I = (I+1)/2 
      IA=ABUF(I)
      IB = BBUF(I)
C 
C THIS IS A KLUDGE BECAUSE FORTRAN CANNOT HANDLE COMPARISONS
C OF VERY LARGE AND VERY SMALL INTEGERS. (IE, 100000B AND 000001B)
C 
      IF(IA) 10,20,20 
10    IF(IB) 30,80,80 
20    IF(IB) 90,30,30 
30    IF(IA-IB) 80,70,90
C 
C PROCESS REALS 
C 
35    CONTINUE
      IF(ITYPE .NE. R) GOTO 65
      CALL SMOVE(ABUF,I,L,A,1)
      CALL SMOVE(BBUF,I,L,B,1)
C 
C KLUDGE TO HANDLE REALS FOR THE SAME REASON AS ABOVE 
C 
      IF(A) 40,50,50
40    IF(B) 60,80,80
50    IF(B) 90,60,60
60    IF(A-B) 80,70,90
C 
C PROCESS STRINGS 
C 
65    CONTINUE
      IF(JSCOM(ABUF,I,L,BBUF,I,IERR)) 80,70,90
70    CONTINUE
C 
C 
C EQUAL 
C 
C 
      CMP = 0 
      GOTO 100
C 
C 
C LESS THAN 
C 
C 
80    CONTINUE
      CMP = -1
      GOTO 100
C 
C 
C GREATER THAN
C 
C 
90    CONTINUE
      CMP = 1 
C 
C 
C EXIT
C 
C 
100   CONTINUE
      RETURN
      END 
                                            