JOE@FHCRCVAX.BITNET.UUCP (09/13/87)
Here's part 3 of INDEX, part 1 was posted Friday, part 2 Saturday, and this part on Sunday, the fourth and fifth parts will be posted on monday and tuesday. See part 1 for details. Cheers, Joe Meadows Jr. VAX/VMS System Manager / guru in training Fred Hutchinson Cancer Research Center 1124 Columbia St. Seattle Wa. 98104 bitnet - JOE@FHCRCVAX arpa - JOE%FHCRCVAX.BITNET@WISCVM.WISC.EDU voice - (206) 467-4970 $ create/log DISPLAYDEF.H $DECK /* This header file was created by Joe Meadows, and is not copyrighted in any way. No guarantee is made as to the accuracy of the contents of this header file. This header file was last modified on Sep. 8th, 1987. */ struct display_info { variant_union { variant_struct { long int di_l_dsplybits0; long int di_l_dsplybits1; } si_dummy_dsplybits_struct; variant_struct { unsigned di_v_credat : 1; unsigned di_v_revdat : 1; unsigned di_v_expdat : 1; unsigned di_v_bakdat : 1; unsigned di_v_revision : 1; unsigned di_v_extents : 1; unsigned di_v_headers : 1; unsigned di_v_lbn : 1; unsigned di_v_owner : 1; unsigned di_v_char : 1; unsigned di_v_journal : 1; unsigned di_v_prot : 1; unsigned di_v_fid : 1; unsigned di_v_backlink : 1; unsigned di_v_access : 1; unsigned di_v_highwater : 1; unsigned di_v_ru_active : 1; unsigned di_v_rectype : 1; unsigned di_v_fileorg : 1; unsigned di_v_attrib : 1; unsigned di_v_rsize : 1; unsigned di_v_alloc : 1; unsigned di_v_used : 1; unsigned di_v_wasted : 1; unsigned di_v_bktsize : 1; unsigned di_v_vfcsize : 1; unsigned di_v_maxrec : 1; unsigned di_v_defext : 1; unsigned di_v_gbc : 1; unsigned di_v_version_limit : 1; unsigned di_v_filename : 1; unsigned di_v_fullname : 1; unsigned di_v_acl : 1; } di_dummy_dsplybits; } di_dummy_dsply_union; }; $EOD $ create/log FATDEF.H $DECK /* This header file was created by Joe Meadows, and is not copyrighted in any way. No guarantee is made as to the accuracy of the contents of this header file. This header file was last modified on Sep. 8th, 1987. */ #define FAT$K_LENGTH 32 #define FAT$C_LENGTH 32 #define FAT$S_FATDEF 32 struct FATDEF { variant_union { unsigned char fat$b_rtype; variant_struct { unsigned fat$v_rtype : 4; unsigned fat$v_fileorg : 4; } fat$r_rtype_bits; } fat$r_rtype_overlay; # define FAT$S_RTYPE 4 # define FAT$V_RTYPE 0 # define FAT$C_UNDEFINED 0 # define FAT$C_FIXED 1 # define FAT$C_VARIABLE 2 # define FAT$C_VFC 3 # define FAT$C_STREAM 4 # define FAT$C_STREAMLF 5 # define FAT$C_STREAMCR 6 # define FAT$S_FILEORG 4 # define FAT$V_FILEORG 4 # define FAT$C_SEQUENTIAL 0 # define FAT$C_RELATIVE 1 # define FAT$C_INDEXED 2 # define FAT$C_DIRECT 3 variant_union { unsigned char fat$b_rattrib; variant_struct { unsigned fat$v_fortrancc : 1; unsigned fat$v_impliedcc : 1; unsigned fat$v_printcc : 1; unsigned fat$v_nospan : 1; } fat$r_rattrib_bits; } fat$r_rattrib_overlay; # define FAT$V_FORTRANCC 0 # define FAT$M_FORTRANCC 1 # define FAT$V_IMPLIEDCC 1 # define FAT$M_IMPLIEDCC 2 # define FAT$V_PRINTCC 2 # define FAT$M_PRINTCC 4 # define FAT$V_NOSPAN 3 # define FAT$M_NOSPAN 8 unsigned short int fat$w_rsize; variant_union { unsigned long int fat$l_hiblk; variant_struct { unsigned short int fat$w_hiblkh; unsigned short int fat$w_hiblkl; } FATDEF$DUMMY_0; } FATDEF$DUMMY_1; variant_union { unsigned long int fat$l_efblk; variant_struct { unsigned short int fat$w_efblkh; unsigned short int fat$w_efblkl; } FATDEF$DUMMY_2; } FATDEF$DUMMY_3; unsigned short int fat$w_ffbyte; unsigned char fat$b_bktsize; unsigned char fat$b_vfcsize; unsigned short int fat$w_maxrec; unsigned short int fat$w_defext; unsigned short int fat$w_gbc; char fat$fill[8]; unsigned short int fat$w_versions; }; $EOD $ create/log FID.C $DECK /* Modification History -------------------- Sep. 8, 1987 JEM - Conversion from BETA to Release */ #include descrip #include iodef #include "fibdef.h" #include "atrdef.h" int fid_to_name(channel,fid,name) short int *channel; struct {short int w_fid[3];} *fid; struct dsc$descriptor *name; { static struct fibdef Fib; /* short fib */ static struct dsc$descriptor FibDesc = {FIB$K_ACCDATA,DSC$K_DTYPE_Z,DSC$K_CLASS_S,&Fib}; static struct { short int len; char buff[ATR$S_FILE_SPEC-2]; } filespec; static struct ATRDEF Atr[] = { ATR$S_FILE_SPEC,ATR$C_FILE_SPEC,&filespec, 0,0,0 }; short int iosb[4]; int status; Fib.fib$w_fid[0]=fid->w_fid[0]; Fib.fib$w_fid[1]=fid->w_fid[1]; Fib.fib$w_fid[2]=fid->w_fid[2]; /* Use the IO$_ACCESS function to return info about the file */ status = sys$qiow(0,*channel,IO$_ACCESS,&iosb,0,0,&FibDesc,0,0,0,&Atr,0); if (!(status & 1)) return(status); status = iosb[0]; if (!(status & 1)) return(status); status = str$copy_r(name,&filespec.len,&filespec.buff); return(status); } $EOD $ create/log FILEINFO.H $DECK /* This header file was created by Joe Meadows, and is not copyrighted in any way. No guarantee is made as to the accuracy of the contents of this header file. This header file was last modified on Sep. 8th, 1987. */ #include fab #include nam #include xab struct FileInfo { long int fi_l_begadr; long int fi_l_endadr; long int fi_l_offset; long int fi_l_pagcnt; long int fi_l_recoff; long int fi_l_recsiz; long int fi_l_blkoff; long int fi_l_blksiz; long int fi_l_filsiz; variant_union { long int fi_l_flag; variant_struct { unsigned fi_m_write : 1; unsigned fi_m_append : 1; } FileInfo$FlagBits; } FileInfo$FlagUnion; struct FAB fi_r_fab; struct NAM fi_r_nam; struct XABFHC fi_r_xabfhc; }; $EOD $ create/log FM2DEF.H $DECK /* This header file was created by Joe Meadows, and is not copyrighted in any way. No guarantee is made as to the accuracy of the contents of this header file. This header file was last modified on Sep. 8th, 1987. */ #define FM2$C_PLACEMENT 0 #define FM2$C_FORMAT1 1 #define FM2$C_FORMAT2 2 #define FM2$C_FORMAT3 3 #define FM2$K_LENGTH0 2 #define FM2$C_LENGTH0 2 #define FM2$K_LENGTH1 4 #define FM2$C_LENGTH1 4 #define FM2$S_FM2DEF 4 #define FM2$K_LENGTH2 6 #define FM2$C_LENGTH2 6 #define FM2$S_FM2DEF1 6 #define FM2$K_LENGTH3 8 #define FM2$C_LENGTH3 8 #define FM2$S_FM2DEF2 8 struct fm2def { variant_union { unsigned short int fm2$w_word0; variant_struct { unsigned : 14; unsigned fm2$v_format : 2; } fm2$dummy_word0_format; variant_struct { unsigned fm2$v_exact : 1; unsigned fm2$v_oncyl : 1; unsigned : 10; unsigned fm2$v_lbn : 1; unsigned fm2$v_rvn : 1; } fm2$dummy_word0_placement; variant_struct { unsigned : 8; unsigned fm2$v_highlbn : 6; } fm2$dummy_word0_highlbn; variant_struct { unsigned fm2$v_count2 : 14; } fm2$dummy_word0_count2; unsigned char fm2$b_count1; } fm2$dummy_word0_union; variant_union { unsigned short int fm2$w_lowlbn; unsigned long int fm2$l_lbn2; variant_struct { unsigned short int fm2$w_lowcount; unsigned long int fm2$l_lbn3; } fm2$dummy_lbn_struct; } fm2$dummy_lbn_union; }; $EOD $ create/log FREPTECNT.C $DECK /* Modification History -------------------- Sep. 8, 1987 JEM - Conversion from BETA to Release */ #include jpidef int freptecnt() { static int frep=0; static struct { short int buflen; short int itmcod; long int bufadr; long int retlen; } ItmLst[] = { 4,JPI$_FREPTECNT,&frep,0, 0,0,0,0 }; if (SYS$GETJPIW(0,0,0,&ItmLst,0,0,0) & 1) return(frep); else return(0); } $EOD $ create/log GETDVI.C $DECK /* Modification History -------------------- Sep. 8, 1987 JEM - Conversion from BETA to Release */ #include descrip #include dvidef struct itmlstdef { short int buflen; short int itmcod; char *bufaddr; long int *retlen; }; #define DEVLEN 64 int get_root_name(device,root) struct dsc$descriptor *device,*root; { char devnam[DEVLEN]; long int devnamlen; struct itmlstdef itmlst[] = {DEVLEN,DVI$_ROOTDEVNAM,0,0,0,0,0,0}; long int status; itmlst[0].bufaddr = devnam; itmlst[0].retlen = &devnamlen; status = sys$getdvi(0,0,device,&itmlst,0,0,0,0); if (status & 1) str$copy_r(root,&devnamlen,devnam); return(status); } int get_next_device(device,next) struct dsc$descriptor *device,*next; { char devnam[DEVLEN]; long int devnamlen; struct itmlstdef itmlst[] = {DEVLEN,DVI$_NEXTDEVNAM,0,0,0,0,0,0}; long int status; itmlst[0].bufaddr = devnam; itmlst[0].retlen = &devnamlen; status = sys$getdvi(0,0,device,&itmlst,0,0,0,0); if (status & 1) str$copy_r(next,&devnamlen,devnam); return(status); } $EOD $ create/log GET_HEADER.C $DECK /* Modification History -------------------- Sep. 8, 1987 JEM - Conversion from BETA to Release */ #include descrip #include iodef #include "fibdef.h" #include "atrdef.h" #include "fh2def.h" #include "fileinfo.h" char *get_header(fid,ofid,context,cached,chan) short int fid[3],ofid[3]; struct FileInfo *context; int cached; short int chan; { struct fh2def *fh2; static char *blockaddr=0; static long int block=512; long int blocknum,addr,i,j,status; static struct fibdef fib; /* short fib */ static struct dsc$descriptor fibdesc = {FIB$K_ACCDATA,DSC$K_DTYPE_Z,DSC$K_CLASS_S,&fib}; static struct ATRDEF atr[] = { ATR$S_HEADER,ATR$C_HEADER,0, 0,0,0 }; short int iosb[4]; if (fid[0] == 0) return(0); /* if cached and the fid is valid, just grab the header */ /* this condition should mean they are doing a FULLNAME search */ /* or asking for an extension header for FULLNAME or FILE_ID search */ if ((cached && (fid[0] != 0) && (fid[1] != 0)) || fid[2] != 0) { if (blockaddr == 0) { status = lib$get_vm(&block,&blockaddr); if (!(status & 1)) return(0); }; atr[0].atr$l_addr = blockaddr; for (i=0;i<3;i++) fib.fib$w_fid[i] = fid[i]; /* Use the IO$_ACCESS function to return info about the file */ status = sys$qiow(0,chan,IO$_ACCESS, &iosb,0,0,&fibdesc,0,0,0,&atr,0); if ((status & 1) && (iosb[0] & 1)) fh2 = blockaddr; else { fh2 = 0; /* assume this last ditch effort won't work */ /* well, it didn't work for some reason.. Let's see if we can jog it's memory concerning this file by opening the darned thing. This seems to be a bug, but, heck, this seems to be a work around */ /* Here we need to open the file pointed to by ofid.. Let's set the fib to NORECORD so we don't set dates.. */ for (i=0;i<3;i++) fib.fib$w_fid[i] = ofid[i]; fib.fib$l_acctl = FIB$M_NOLOCK | FIB$M_NORECORD; status = sys$qiow(0,chan,IO$_ACCESS|IO$M_ACCESS, &iosb,0,0,&fibdesc,0,0,0,0,0); if ((status & 1) && (iosb[0] & 1)) { for (i=0;i<3;i++) fib.fib$w_fid[i] = fid[i]; /* status = sys$qiow(0,context->fi_r_fab.fab$l_stv,IO$_ACCESS, &iosb,0,0,&fibdesc,0,0,0,&atr,0); */ status = sys$qiow(0,chan,IO$_ACCESS,&iosb,0,0,&fibdesc,0,0,0,&atr,0); if ((status & 1) && (iosb[0] & 1)) fh2 = blockaddr; }; for (i=0;i<3;i++) fib.fib$w_fid[i] = ofid[i]; fib.fib$l_acctl = FIB$M_NORECORD; status = sys$qiow(0,chan,IO$_DEACCESS,&iosb,0,0,&fibdesc,0,0,0,0,0); }; return(fh2); }; /* get the header */ if (fid[0]) { /* see if it is already mapped in */ blocknum = fid[0] + context->fi_l_recoff; if ((blocknum > context->fi_l_offset) &(blocknum < context->fi_l_offset+context->fi_l_pagcnt+1)) { /* the header is already mapped into memory */ addr = blocknum - context->fi_l_offset; addr = addr*512 + context->fi_l_begadr; j=1; for (i=0;i<3;i++) if ((fid[i] != (struct fh2 *)addr->fh2$w_fid[i]) && (fid[i] != 0)) j=0; if (j) fh2 = addr; else fh2 = 0; } else { fh2 = 0; /* need to read the right block into memory */ status = read_section_block(&context,&blocknum,&blockaddr); if (status & 1) fh2 = blockaddr; }; } else fh2 = 0; /* if cached and we found a header, and the header fid isn't set to */ /* zero, then get the real (possibly cached) header */ /* these conditions should be met if they specified a FILE_ID search */ if (cached && fh2 && fh2->fh2$w_fid[0]) { if (blockaddr == 0) { status = lib$get_vm(&block,&blockaddr); if (!(status & 1)) return(0); }; atr[0].atr$l_addr = blockaddr; for (i=0;i<3;i++) fib.fib$w_fid[i]=fh2->fh2$w_fid[i]; /* Use the IO$_ACCESS function to return info about the file */ status = sys$qiow(0,chan,IO$_ACCESS,&iosb,0,0,&fibdesc,0,0,0,&atr,0); if ((status & 1) && (iosb[0] & 1)) fh2 = blockaddr; else fh2 = 0; }; return(fh2); } $EOD $ create/log HM2DEF.H $DECK /* This header file was created by Joe Meadows, and is not copyrighted in any way. No guarantee is made as to the accuracy of the contents of this header file. This header file was last modified on Sep. 8th, 1987. */ #define HM2$C_LEVEL1 257 #define HM2$C_LEVEL2 512 #define HM2$M_READCHECK 1 #define HM2$M_WRITCHECK 2 #define HM2$M_ERASE 4 #define HM2$M_NOHIGHWATER 8 #define HM2$M_CLASS_PROT 16 #define HM2$S_HM2DEF 512 #define HM2$S_CREDATE 8 #define HM2$S_RETAINMIN 8 #define HM2$S_RETAINMAX 8 #define HM2$S_REVDATE 8 #define HM2$S_MIN_CLASS 20 #define HM2$S_MAX_CLASS 20 #define HM2$S_STRUCNAME 12 #define HM2$S_VOLNAME 12 #define HM2$S_OWNERNAME 12 #define HM2$S_FORMAT 12 #define DATE {unsigned : 32; unsigned : 32;} struct hm2def { unsigned long int hm2$l_homelbn; unsigned long int hm2$l_alhomelbn; unsigned long int hm2$l_altidxlbn; variant_union { unsigned short int hm2$w_struclev; variant_struct { unsigned char hm2$b_strucver; unsigned char hm2$b_struclev; } hm2$dummy_w_struclev_struct; } hm2$dummy_w_struclev_union; unsigned short int hm2$w_cluster; unsigned short int hm2$w_homevbn; unsigned short int hm2$w_alhomevbn; unsigned short int hm2$w_altidxvbn; unsigned short int hm2$w_ibmapvbn; unsigned long int hm2$l_ibmaplbn; unsigned long int hm2$l_maxfiles; unsigned short int hm2$w_ibmapsize; unsigned short int hm2$w_resfiles; unsigned short int hm2$w_devtype; unsigned short int hm2$w_rvn; unsigned short int hm2$w_setcount; variant_union { unsigned short int hm2$w_volchar; variant_struct { unsigned hm2$v_readcheck : 1; unsigned hm2$v_writcheck : 1; unsigned hm2$v_erase : 1; unsigned hm2$v_nohighwater : 1; unsigned hm2$v_class_prot : 1; } hm2$dummy_w_volchar_struct; } hm2$dummy_w_volchar_union; unsigned long int hm2$l_volowner; unsigned long int hm2$l_sec_mask; unsigned short int hm2$w_protect; unsigned short int hm2$w_fileprot; unsigned short int hm2$w_recprot; unsigned short int hm2$w_checksum1; struct DATE hm2$q_credate; unsigned char hm2$b_window; unsigned char hm2$b_lru_lim; unsigned short int hm2$w_extend; struct DATE hm2$q_retainmin; struct DATE hm2$q_retainmax; struct DATE hm2$q_revdate; unsigned char hm2$r_min_class[HM2$S_MIN_CLASS]; unsigned char hm2$r_max_class[HM2$S_MAX_CLASS]; unsigned char hm2$fill_0[320]; unsigned long int hm2$l_serialnum; unsigned char hm2$t_strucname[HM2$S_STRUCNAME]; unsigned char hm2$t_volname[HM2$S_VOLNAME]; unsigned char hm2$t_ownername[HM2$S_OWNERNAME]; unsigned char hm2$t_format[HM2$S_FORMAT]; unsigned char hm2$fill_1[2]; unsigned short int hm2$w_checksum2; }; $EOD $ create/log INDEX.C $DECK /* INDEX, written by Joe Meadows, released to the world Sep. 8th, 1987. This is a public domain utility. No parts of this utility are copyrighted in any way. It may be used in any way, by anyone. There are no restrictions on this code. You may include it in a commercial package if you wish. Joe Meadows Jr. VAX/VMS System Manager / guru in training Fred Hutchinson Cancer Research Center 1124 Columbia St. Seattle Wa. 98104 bitnet - JOE@FHCRCVAX arpa - JOE%FHCRCVAX.BITNET@WISCVM.WISC.EDU voice - (206) 467-4970 */ /* Modification History -------------------- Sep. 8, 1987 JEM - Conversion from BETA to Release */ #include stdio #include "hm2def.h" #include "fh2def.h" #include "fm2def.h" #include "fi2def.h" #include "FileInfo.h" /* includes FAB, NAM, and XAB */ #include "searchdef.h" /* includes DESCRIP */ #include "displaydef.h" main() { static struct dsc$descriptor device = {0, DSC$K_DTYPE_T, DSC$K_CLASS_D, 0}; static struct dsc$descriptor devdesc = {0, DSC$K_DTYPE_T, DSC$K_CLASS_S, 0}; static $DESCRIPTOR(defaultname,""); static $DESCRIPTOR(null,"\0"); static short int indexf_fid[3] = {1,1,0}; static short int fid[3] = {0,0,0}; static struct dsc$descriptor filename = {0, DSC$K_DTYPE_T, DSC$K_CLASS_D, 0}; static struct dsc$descriptor dynstr = {0, DSC$K_DTYPE_T, DSC$K_CLASS_D, 0}; static long int pagecount=0,opagecount=0; static long int offset=1; static long int flag=0; static long lastfid=0,currfid=0,endfid=0; static struct FileInfo *context; static struct FAB *fabptr; static struct NAM *namptr; static struct display_info display; static struct search_info search; static struct hm2def *hm2; static struct fh2def *fh2; static struct fm2def *fm2; static long int fm2offset; static long int count,lbn; static struct fi2def *fi2; static long int status=1; static char *block=0; static long int blocknum; static short int chan=0,tmpchan=0; static long int i=0,j=0,k=0,volume=0; if (cli_present("OUTPUT") & 1) { /* we should see if they want output to go to a file or to SYS$OUTPUT */ status = cli_get_value("OUTPUT",&dynstr); if (status & 1) { str$append(&dynstr,&null); freopen(dynstr.dsc$a_pointer,"w",stdout,"rfm=var","rat=cr"); }; }; (void) init_display(&display); status = init_search(&search); if (!(status & 1)) return(status); if (cli_present("FULLNAME") & 1) { /* if FULLNAME specified, use lib$find_file to get the file ids, get the header, and display */ while (cli_get_value("FULLNAME",&dynstr) & 1) { i = 2; /* flag for lib$find_file, MULTIPLE bit set */ while (lib$find_file(&dynstr,&filename,&fabptr,0,0,0,&i) & 1) { namptr = fabptr->fab$l_nam; /* assign a temporary channel to the device */ devdesc.dsc$w_length = namptr->nam$t_dvi[0]; devdesc.dsc$a_pointer = &(*namptr).nam$t_dvi[1]; /* assign a channel to the device */ status=sys$assign(&devdesc,&tmpchan,0,0); if (!(status & 1)) return(status); fh2 = get_header((*namptr).nam$w_fid,(*namptr).nam$w_fid, context,1,tmpchan); if (fh2) if (search_header(&search,fh2,context,1,tmpchan)) display_header(&display,namptr->nam$w_fid[0],fh2, context,1,tmpchan); status=sys$dassgn(tmpchan); }; /* while (lib$find_file()) */ }; /* while (cli_get_value("FULLNAME")) */ /* if they did a /FULLNAME search, and didn't do a /FILE_ID search, then we could just quit now.. */ if ((cli_present("FILE_ID") & 1) == 0) return; }; /* if (cli_present("fullname")) */ /* get the name of the device which we're planning on checking */ status=cli_get_value("P1",&device); if (!(status & 1)) return(status); /* add in logic for /VOLUME for volume sets. If set, then go through each of the index files, one at a time.. */ if (cli_present("VOLUME") & 1) { /* Oh boy, we need to loop through all of the index files! */ volume = 1; status = get_root_name(&device,&device); if (!(status & 1)) return(status); }; /* loop through all the index files, this is accomplished via a call */ /* to get_next_device at the end of the while loop (only if /VOLUME set) */ while (status & 1) { /* assign a channel to the device */ status=sys$assign(&device,&chan,0,0); if (!(status & 1)) return(status); /* find out the complete name of INDEXF.SYS (this is to be sure and get the device name right, even if you're sitting in a rooted directory */ status = fid_to_name(&chan,indexf_fid,&filename); if (!(status & 1)) return(status); /* don't ask for more pages than we can handle, in fact, lets leave a mild safety net */ pagecount = freptecnt() - 1000; /* if FILE_ID search, then map in a small part of the file */ if (cli_present("FILE_ID") & 1) pagecount = 10; offset = 1; /* map in part of the file now */ status=map_section(&filename,&defaultname,&pagecount, &offset,&flag,&context); if (!(status & 1)) return(status); /* home block is usually block number 2 */ hm2 = (struct hm2def *)(context->fi_l_begadr+512); if (hm2->hm2$b_struclev != 2) { printf("Sorry, INDEX only works for structure level 2 disks.\n"); return; }; offset = hm2->hm2$w_ibmapvbn + hm2->hm2$w_ibmapsize; context->fi_l_recoff = offset - 1; /* Store the indexf offset here */ opagecount = pagecount; pagecount -= (offset - 1); endfid = pagecount; lastfid = context->fi_l_filsiz - offset + 1; fh2 = context->fi_l_begadr + 512*(offset-1); if (cli_present("FILE_ID") & 1) { /* if FILE_ID specified, get the header, and display */ while (cli_get_value("FILE_ID",&dynstr) & 1) { if (ots$cvt_ti_l(&dynstr,&i) & 1) { fid[0] = i; fh2 = get_header(fid,fid,context,1,chan); if (fh2) if (search_header(&search,fh2,context,1,chan)) display_header(&display,fid[0],fh2,context,1,chan); }; }; } else for (currfid=1;currfid<=lastfid;currfid++) { if (currfid>endfid) { /* okay, that should have been the last one in this segment.. */ /* lets read in the next section of the file */ offset = offset + pagecount; pagecount = opagecount; status=map_section(&filename,&defaultname, &pagecount,&offset,&flag,&context); if (!(status & 1)) return(status); endfid = endfid + pagecount; fh2 = context->fi_l_begadr; }; if (search_header(&search,fh2,context,0,chan)) (void)display_header(&display,currfid,fh2,context,0,chan); /* okay, point to the next file header */ ++fh2; }; /* call it a day, clean up and go home.... */ status=delete_section(&context); if (!(status & 1)) return(status); if (volume) status = get_next_device(&device,&device); else status = 0; }; /* while (status & 1) */ } $EOD $ create/log INDEX.CLD $DECK define type placement_keywords keyword EXACT keyword ON_CYLINDER keyword RELATIVE_VOLUME_NUMBER keyword LBN_SPECIFIED define type match_keywords keyword AND keyword OR define type PROTECTION_FIELDS keyword SYSTEM, value keyword OWNER, value keyword GROUP, value keyword WORLD, value define type PROTECTION_KEYWORDS keyword SET, value(required, list, type=PROTECTION_FIELDS) keyword CLEAR, value(required, list, type=PROTECTION_FIELDS) define type DISPLAY_KEYWORDS keyword ALL negatable keyword ACL negatable keyword TYPE negatable keyword ORGANIZATION negatable keyword ATTRIBUTES negatable keyword CHARACTERISTICS negatable keyword JOURNAL negatable keyword CREATION_DATE negatable keyword REVISION_DATE negatable keyword EXPIRATION_DATE negatable keyword BACKUP_DATE negatable keyword NUMBER_OF_REVISIONS negatable keyword VFC_SIZE negatable keyword RECORD_SIZE negatable keyword MAXIMUM_RECORD_SIZE negatable keyword USED negatable keyword FIRST_FREE_BYTE negatable keyword ALLOCATED negatable keyword DEFAULT_EXTEND_QUANTITY negatable keyword BUCKET_SIZE negatable keyword GLOBAL_BUFFER_COUNT negatable keyword VERSION_LIMIT negatable keyword EXTENTS negatable keyword HEADERS negatable keyword LBN negatable keyword OWNER_UIC negatable keyword PROTECTION negatable keyword FILE_ID negatable keyword DIRECTORY_FILE_ID negatable keyword ACCESS_MODE negatable keyword HIGHWATER_MARK negatable keyword ACTIVE_RECOVERY_UNITS negatable keyword WASTED_BLOCKS negatable keyword NAME negatable keyword FULLNAME negatable define type RECTYPE_KEYWORDS keyword UNDEFINED negatable keyword FIXED negatable keyword VARIABLE negatable keyword VFC negatable keyword STREAM negatable keyword LFSTREAM negatable keyword CRSTREAM negatable define type FILEORG_KEYWORDS keyword SEQUENTIAL negatable keyword RELATIVE negatable keyword INDEXED negatable keyword DIRECT negatable define type ATTRIB_KEYWORDS keyword FORTRANCC negatable keyword IMPLIEDCC negatable keyword PRINTCC negatable keyword SPAN negatable define type CHAR_KEYWORDS keyword ACL_CORRUPT negatable keyword BACKUP negatable keyword BEST_TRY_CONTIGUOUS negatable keyword CHARGE negatable keyword CONTIGUOUS negatable keyword DIRECTORY negatable keyword ERASE_ON_DELETE negatable keyword FILE_CORRUPT negatable keyword LOCKED negatable keyword MARKED_FOR_DELETE negatable keyword SPOOL negatable keyword READ_VERIFY negatable keyword WRITE_BACK negatable keyword WRITE_VERIFY negatable define type JOURNAL_KEYWORDS keyword JOURNAL negatable keyword AIJNL negatable keyword ATJNL negatable keyword BIJNL negatable keyword RUJNL negatable keyword NEVER_RU negatable keyword ONLY_RU negatable define type ACCESS_KEYWORDS keyword USER negatable keyword SUPERVISOR negatable keyword EXECUTIVE negatable keyword KERNEL negatable define verb INDEX image INDEX parameter P1 default value (default="SYS$DISK",type=$infile) qualifier OUTPUT value (default="INDEXF.LIS",type=$outfile) qualifier DISPLAY value (required,list,type=DISPLAY_KEYWORDS) qualifier MATCH value (required,type=MATCH_KEYWORDS) qualifier ACL qualifier ACE value (required,list,type=$uic) qualifier TYPE value (required,list,type=RECTYPE_KEYWORDS) qualifier ORGANIZATION value (required,list,type=FILEORG_KEYWORDS) qualifier ATTRIBUTES value (required,list,type=ATTRIB_KEYWORDS) qualifier CHARACTERISTICS value (required,list,type=CHAR_KEYWORDS) qualifier PLACEMENT value (required,list,type=PLACEMENT_KEYWORDS) qualifier JOURNAL value (required,list,type=JOURNAL_KEYWORDS) qualifier ACCESS_MODE value (required,list,type=ACCESS_KEYWORDS) qualifier CREATION_DATE value (required,list,type=$datetime) qualifier REVISION_DATE value (required,list,type=$datetime) qualifier EXPIRATION_DATE value (required,list,type=$datetime) qualifier BACKUP_DATE value (required,list,type=$datetime) qualifier NUMBER_OF_REVISIONS value (required,list,type=$number) qualifier VFC_SIZE value (required,list,type=$number) qualifier RECORD_SIZE value (required,list,type=$number) qualifier MAXIMUM_RECORD_SIZE value (required,list,type=$number) qualifier USED value (required,list,type=$number) qualifier FIRST_FREE_BYTE value (required,list,type=$number) qualifier ALLOCATED value (required,list,type=$number) qualifier DEFAULT_EXTEND_QUANTITY value (required,list,type=$number) qualifier BUCKET_SIZE value (required,list,type=$number) qualifier GLOBAL_BUFFER_COUNT value (required,list,type=$number) qualifier VERSION_LIMIT value (required,list,type=$number) qualifier EXTENTS value (required,list,type=$number) qualifier HEADERS value (required,list,type=$number) qualifier LBN value (required,list,type=$number) qualifier OWNER_UIC value (required,list,type=$uic) qualifier PROTECTION value (required,list,type=protection_keywords) qualifier FILE_ID value (required,list,type=$number) qualifier DIRECTORY_FILE_ID value (required,list,type=$number) qualifier HIGHWATER_MARK value (required,list,type=$number) qualifier ACTIVE_RECOVERY_UNITS value (required,list) qualifier WASTED_BLOCKS value (required,list,type=$number) qualifier NAME value (required,list) qualifier FULLNAME value (required,list) qualifier VOLUME $EOD $ create/log INDEX.COM $DECK $ say = "write sys$output" $ if p1.eqs."" then say "Linking INDEX''p2'" $ if p1.eqs."ALL" then say "Compiling INDEX utility" $ if (p1.nes."").and.(p1.nes."ALL") then say "Compiling ''p1'" $ if p1.eqs."ALL" .or. p1.eqs."CLI" then cc/debug cli $ if p1.eqs."ALL" .or. p1.eqs."DISPLAY" then cc/debug display $ if p1.eqs."ALL" .or. p1.eqs."FID" then cc/debug fid $ if p1.eqs."ALL" .or. p1.eqs."FREPTECNT" then cc/debug freptecnt $ if p1.eqs."ALL" .or. p1.eqs."GET_HEADER" then cc/debug get_header $ if p1.eqs."ALL" .or. p1.eqs."GETDVI" then cc/debug getdvi $ if p1.eqs."ALL" .or. p1.eqs."INDEX" then cc/debug index $ if p1.eqs."ALL" .or. p1.eqs."PARSE_UIC" then macro/debug parse_uic $ if p1.eqs."ALL" .or. p1.eqs."SEARCH" then cc/debug search $ if p1.eqs."ALL" .or. p1.eqs."SECTION" then cc/debug section $ link'p2' index,cli,display,fid,freptecnt,get_header,getdvi,search,section,- parse_uic,c/option $EOD $ create/log INDEX.COMPILE $DECK index.c,.obj,cc/debug cli.c,.obj,cc/debug display.c,.obj,cc/debug fid.c,.obj,cc/debug freptecnt.c,.obj,cc/debug get_header.c,.obj,cc/debug getdvi.c,.obj,cc/debug search.c,.obj,cc/debug section.c,.obj,cc/debug parse_uic.mar,.obj,macro/debug c.opt,,,/option $EOD