HP3000-L Archives

December 2000, Week 1

HP3000-L@RAVEN.UTC.EDU

Options: Use Monospaced Font
Show Text Part by Default
Show All Mail Headers

Message: [<< First] [< Prev] [Next >] [Last >>]
Topic: [<< First] [< Prev] [Next >] [Last >>]
Author: [<< First] [< Prev] [Next >] [Last >>]

Print Reply
Subject:
From:
"Emerson, Tom # El Monte" <[log in to unmask]>
Reply To:
Emerson, Tom # El Monte
Date:
Mon, 4 Dec 2000 17:43:54 -0500
Content-Type:
text/plain
Parts/Attachments:
text/plain (108 lines)
Remember that in "C", "strings" are NULL terminated -- make sure you "wipe
out" that null terminator when building your "key" value -- this example
shows the difference:

print qndffind.c
#include <stdio.h>
#include <string.h>
#include <mpe.h>
#pragma intrinsic FFINDBYKEY,FOPEN,FCLOSE,PRINTFILEINFO,FREAD

int main(int argc, char *argv[])
{
    short int ksm;
    char b[64];
    char k[16];

    ksm=FOPEN("KSAMXL ",0x1805,0x0025);
    FREAD(ksm,b,-64);
    printf("first record: %-.64s\n",b);

    memset(k,' ',sizeof(k));
    strcpy(k,argv[1]);
    printf("FFINDBYKEY(ksm,'%s',0,0,0)\n",k);
    FFINDBYKEY(ksm,k,0,0,0);
    PRINTFILEINFO(ksm);

    memset(k,' ',sizeof(k));
    strncpy(k,argv[1],sizeof(argv[1]));  /*  <=== note the difference! */
    printf("FFINDBYKEY(ksm,'%s',0,0,0)\n",k);
    FFINDBYKEY(ksm,k,0,0,0);
    PRINTFILEINFO(ksm);

    FREAD(ksm,b,-64);
    printf("%-.64s\n",b);
    FCLOSE(ksm,0,0);
}

qndffind.exec KEY3
first record: ANOTHERKEY      DATA

FFINDBYKEY(ksm,'KEY3',0,0,0)

+-F-I-L-E---I-N-F-O-R-M-A-T-I-O-N---D-I-S-P-L-A-Y+
!  FILE NAME IS KSAMXL.WORK.EMERSON              !
!  FOPTIONS: SYS,ASCII,FORMAL,F,NOCCTL,FEQ,KXL   !
!            NOLABEL                             !
!  AOPTIONS: UPDATE,NOMR,LOCK,DEF,BUF,NOMULTI    !
!            WAIT,NOCOPY                         !
!  DEVICE TYPE: 3      DEVICE SUBTYPE: 8         !
!  LDEV: 2        DRT: 8         UNIT: 0         !
!  RECORD SIZE: 64     BLOCK SIZE: 4096  (BYTES) !
!  EXTENT SIZE: 75     MAX EXTENTS: 8            !
!  RECPTR: 2           RECLIMIT: 1023            !
!  LOGCOUNT: 6            PHYSCOUNT: 1           !
!  EOF AT: 5           LABEL ADDR: %00000000000  !
!  FILE CODE: 0        ULABELS: 0                !
!  FILE OWNER: TOM.EMERSON                       !
!  PHYSICAL STATUS: ????????????????             !
!  ERROR NUMBER: 172   RESIDUE: 64       (BYTES) !
!  BLOCK NUMBER: 1            NUMREC: 4          !
+------------------------------------------------+
FFINDBYKEY(ksm,'KEY3            ',0,0,0)

+-F-I-L-E---I-N-F-O-R-M-A-T-I-O-N---D-I-S-P-L-A-Y+
!  FILE NAME IS KSAMXL.WORK.EMERSON              !
!  FOPTIONS: SYS,ASCII,FORMAL,F,NOCCTL,FEQ,KXL   !
!            NOLABEL                             !
!  AOPTIONS: UPDATE,NOMR,LOCK,DEF,BUF,NOMULTI    !
!            WAIT,NOCOPY                         !
!  DEVICE TYPE: 3      DEVICE SUBTYPE: 8         !
!  LDEV: 2        DRT: 8         UNIT: 0         !
!  RECORD SIZE: 64     BLOCK SIZE: 4096  (BYTES) !
!  EXTENT SIZE: 75     MAX EXTENTS: 8            !
!  RECPTR: 4           RECLIMIT: 1023            !
!  LOGCOUNT: 9            PHYSCOUNT: 1           !
!  EOF AT: 5           LABEL ADDR: %00000000000  !
!  FILE CODE: 0        ULABELS: 0                !
!  FILE OWNER: TOM.EMERSON                       !
!  PHYSICAL STATUS: ????????????????             !
!  ERROR NUMBER: 0     RESIDUE: 64       (BYTES) !
!  BLOCK NUMBER: 1            NUMREC: 4          !
+------------------------------------------------+
KEY3            DATA

> -----Original Message-----
> From: Russ Smith [mailto:[log in to unmask]]
> in a KSAM file using the following code:
>
>    char FindKey[26];
>
>    if(TestMode==1)
>       fprintf(stderr,"\nRead KSAM with: %s", FindKey);
>
>    FFINDBYKEY(KSAMFileNo, &FindKey, 0,0,0);
>    MPEerr(KSAMFileNo,1101);
>
> The records were not being found, so I inserted the call to my error
> subroutine to discover why.
>
> The reported tombstone shows the error to be 186 (Invalid Key
> Length), but
> the documentation I have for this intrinsic tells me that
> passing zeros in
> the key number, key length and reation operator parameters
> will default to
> "primary key", "full key usage" and "equals specified value",
> respectively.

ATOM RSS1 RSS2