#include /* defines for rabs and fabs */ #include /* defins printf... */ #include /* defines strlen */ #include /* defines exit */ #include /* defines sys$open et al */ #include struct FAB outfab; struct RAB outrab; struct XABKEY outkey; struct XABKEY inkey0; struct XABKEY inkey1; error_exit (code, value) long code; long value; { void lib$signal(); lib$signal (code, value); } char OUTPUT_NAME [] = { "test.idx"}; struct rec { char k0ind0[ 32 ]; char k0ind1[ 32 ]; char k0ind2[ 32 ]; char data [64]; } rec; void main (void) { int i; long status; /* set up output fab */ outfab = cc$rms_fab; outfab.fab$b_fac = FAB$M_GET | FAB$M_PUT | FAB$M_UPD | FAB$M_DEL; outfab.fab$b_shr = FAB$M_SHRGET | FAB$M_SHRPUT | FAB$M_SHRUPD | FAB$M_SHRDEL; /* read/write sharing */ outfab.fab$l_fna = (char *) &OUTPUT_NAME; /* logical name OUTFILE */ outfab.fab$b_fns = strlen(OUTPUT_NAME); outfab.fab$w_mrs = sizeof(rec); /* record size */ outfab.fab$b_org = FAB$C_IDX; outfab.fab$b_rat = FAB$M_CR; /* implied carriage return */ outfab.fab$l_fop = FAB$M_CIF | FAB$M_CBT; outfab.fab$b_rfm = FAB$C_VAR; /* set up output rab */ outrab = cc$rms_rab; outrab.rab$l_fab = &outfab; outrab.rab$l_rbf = (char *)&rec; outrab.rab$b_rac = RAB$C_KEY; outrab.rab$l_ubf = (char *)&rec; outrab.rab$w_usz = sizeof(rec); outrab.rab$l_rbf = (char *)&rec; outrab.rab$w_rsz = sizeof(rec); outrab.rab$b_krf = 0; outfab.fab$l_xab = &outkey; outkey = cc$rms_xabkey; outkey.xab$b_ref = 0; outkey.xab$b_dtp = XAB$C_STG; outkey.xab$w_pos0= 0; outkey.xab$b_siz0= sizeof(rec.k0ind0); outkey.xab$w_pos1= sizeof(rec.k0ind0); outkey.xab$b_siz1= sizeof(rec.k0ind1); outkey.xab$w_pos2= sizeof(rec.k0ind0)+sizeof(rec.k0ind1); outkey.xab$b_siz2= sizeof(rec.k0ind2); printf("\nCreate out file"); status = sys$create (&outfab); if (! (status & 1)) error_exit (status, outfab.fab$l_stv); printf("\nConnect RAB to FAB out file"); status = sys$connect (&outrab); if (! (status & 1)) error_exit (status, outrab.rab$l_stv); outrab.rab$b_krf = 0; outrab.rab$b_rac = RAB$C_KEY; outrab.rab$l_kbf = (char *)&rec; outrab.rab$b_ksz = sizeof(rec.k0ind0)+sizeof(rec.k0ind1)+sizeof(rec.k0ind2); outrab.rab$l_ubf = (char *)&rec; outrab.rab$w_usz = sizeof(rec); memset (&rec,0,sizeof(rec)); sprintf(rec.k0ind0,"vmsnet.test"); sprintf(rec.k0ind1,"Aaaa"); sprintf(rec.k0ind2,"9999"); sprintf(rec.data,"Data1"); status = sys$put (&outrab); if (! (status & 1)) error_exit (status, outrab.rab$l_stv); memset (&rec,0,sizeof(rec)); sprintf(rec.k0ind0,"vmsnet.test"); sprintf(rec.k0ind1,"Zzzz"); sprintf(rec.k0ind2,"0000"); sprintf(rec.data,"Data2"); status = sys$put (&outrab); if (! (status & 1)) error_exit (status, outrab.rab$l_stv); /*------------------------------------------------------- */ outkey.xab$w_pos2= 0 ; outkey.xab$b_siz2= 0 ; outrab.rab$b_ksz = sizeof(rec.k0ind0)+sizeof(rec.k0ind1); memset (&rec,0,sizeof(rec)); sprintf(rec.k0ind0,"vmsnet.test"); sprintf(rec.k0ind1,"Zzzz"); status = sys$get (&outrab); if (! (status & 1)) error_exit (status, outrab.rab$l_stv); printf("\n$Get k0ind0=%s, rec.k0ind1=%s, k0ind2=%s", rec.k0ind0, rec.k0ind1, rec.k0ind2); memset (&rec,0,sizeof(rec)); sprintf(rec.k0ind0,"vmsnet.test"); sprintf(rec.k0ind1,"Aaaa"); status = sys$get (&outrab); if (! (status & 1)) error_exit (status, outrab.rab$l_stv); printf("\n$Get k0ind0=%s, rec.k0ind1=%s, k0ind2=%s", rec.k0ind0, rec.k0ind1, rec.k0ind2); /*------------------------------------------------------- */ outkey.xab$w_pos1= 0 ; outkey.xab$b_siz1= 0 ; outkey.xab$w_pos2= sizeof(rec.k0ind0)+sizeof(rec.k0ind1); outkey.xab$b_siz2= sizeof(rec.k0ind2); outrab.rab$b_ksz = sizeof(rec.k0ind0)+sizeof(rec.k0ind1); /* +sizeof(rec.k0ind2); */ memset (&rec,0,sizeof(rec)); sprintf(rec.k0ind0,"vmsnet.test"); /* sprintf(rec.k0ind1,"Aaaa"); */ status = sys$get (&outrab); if (! (status & 1)) error_exit (status, outrab.rab$l_stv); printf("\n$Get k0ind0=%s, rec.k0ind1=%s, k0ind2=%s", rec.k0ind0, rec.k0ind1, rec.k0ind2); memset (&rec,0,sizeof(rec)); sprintf(rec.k0ind0,"vmsnet.test"); sprintf(rec.k0ind2,"Zzzz"); status = sys$get (&outrab); if (! (status & 1)) error_exit (status, outrab.rab$l_stv); printf("\n$Get k0ind0=%s, rec.k0ind1=%s, k0ind2=%s", rec.k0ind0, rec.k0ind1, rec.k0ind2); /*II */ memset (&rec,0,sizeof(rec)); sprintf(rec.k0ind0,"vmsnet.test"); sprintf(rec.k0ind1,"9999"); status = sys$get (&outrab); if (! (status & 1)) error_exit (status, outrab.rab$l_stv); printf("\n$Get k0ind0=%s, rec.k0ind1=%s, k0ind2=%s", rec.k0ind0, rec.k0ind1, rec.k0ind2); memset (&rec,0,sizeof(rec)); sprintf(rec.k0ind0,"vmsnet.test"); sprintf(rec.k0ind2,"0000"); status = sys$get (&outrab); if (! (status & 1)) error_exit (status, outrab.rab$l_stv); printf("\n$Get k0ind0=%s, rec.k0ind1=%s, k0ind2=%s", rec.k0ind0, rec.k0ind1, rec.k0ind2); /* outrab.rab$b_rac = RAB$C_SEQ; status = sys$rewind (&outrab); if (! (status & 1)) error_exit (status, outrab.rab$l_stv); rec.f = 0; rec.l = 0; for (i = 0; i < 100;i++) { status = sys$get (&outrab); if (! (status & 1)) error_exit (status, outrab.rab$l_stv); printf("\n$Get sts=%s,l=%d,f=%d",rec.sts,rec.l,rec.f); } */ status = sys$close (&outfab); if (! (status & 1)) error_exit (status, outfab.fab$l_stv); }