*** /tmp/T0tgaGWd	Tue Nov 15 16:44:28 2005
--- dialects/hpux/kmem/dproc.c	Tue Nov 15 16:19:48 2005
***************
*** 150,169 ****
  	KA_T fp;
  	int err, i, j;
  
! #if	HPUXV>=1020
! struct ofile_t {
! 	struct ofa {
  		KA_T ofile;
  		int d1;
  		int pofile;
! 	} ofa[SFDCHUNK];
! };
! #endif	/* HPUXV>=1020 */
  
  #if	HPUXV>=800
  	char *c, *s;
  	KA_T pfp, ofp;
  	struct ofile_t oft;
  	struct pst_status ps;
  
  # if	HPUXV<1010
--- 150,194 ----
  	KA_T fp;
  	int err, i, j;
  
! #if	HPUXV>=1020 && HPUXV<1100
! 	struct ofile_t {
! 	    struct ofa {
  		KA_T ofile;
  		int d1;
  		int pofile;
! 	    } ofa[SFDCHUNK];
! 	};
! 	struct ofa *ofap;
! 	int ofasz = (int)sizeof(struct ofa);
! 	char *oftp = (char *)&oft;
! 	int oftsz = (int)sizeof(struct ofile_t);
! #else	/* HPUXV<1020 || HPUXV>=1100 */
! # if	HPUXV>=1100
! 	struct ofa {
! 	    KA_T ofile;
! 	    int d1;
! 	    short d2;
! 	    char d3;
! 	    char pofile;
! 	};
! 	struct ofa *ofap;
! 	int ofasz = (int)sizeof(struct ofa);
! 	char *oftp = (char *)NULL;
! 	int oftsz = (int)(sizeof(struct ofa) * SFDCHUNK);
! 	KA_T v;
! # endif	/* HPUXV>=1100 */
! #endif	/* HPUXV>=1020 && HPUXV<1100 */
  
  #if	HPUXV>=800
  	char *c, *s;
  	KA_T pfp, ofp;
+ 
+ #if	HPUXV<1020
  	struct ofile_t oft;
+ 	char *oftp = (char *)&oft;
+ 	int oftsz = (int)sizeof(struct ofile_t);
+ #endif	/* HPUXV<1020 */
+ 
  	struct pst_status ps;
  
  # if	HPUXV<1010
***************
*** 197,203 ****
--- 222,260 ----
  # endif	/* HPUXV>=1020 || (HPUXV>=900 && HPUXV<1000) */
  #endif	/* defined(HASFSTRUCT) */
  
+ #if	HPUXV>=1100
  /*
+  * Define FD chunk size and pointer for HP-UX >= 11.
+  */
+ 	if (!oftp) {
+ 	    if ((get_Nl_value("chunksz", Drive_Nl, &v) >= 0) && v) {
+ 		if (kread(v, (char *)&oftsz, sizeof(oftsz))) {
+ 		    (void) fprintf(stderr, "%s: can't get FD chunk size\n",
+ 			Pn);
+ 		    Exit(1);
+ 		}
+ 		if (!oftsz) {
+ 		    (void) fprintf(stderr, "%s: bad FD chunk size: %d\n",
+ 			Pn, oftsz);
+ 		    Exit(1);
+ 		}
+ 	    }
+ 	    ofasz = (int)(oftsz / SFDCHUNK);
+ 	    if (oftsz != (ofasz * SFDCHUNK)) {
+ 		(void) fprintf(stderr,
+ 		    "%s: FD chunk size (%d) not exact multiple of %d\n",
+ 		    Pn, oftsz, SFDCHUNK);
+ 		Exit(1);
+ 	    }
+ 	    if (!(oftp = (char *)malloc((MALLOC_S)oftsz))) {
+ 		(void) fprintf(stderr, "%s: no space for %d FD bytes\n",
+ 		    Pn, oftsz);
+ 		Exit(1);
+ 	    }
+ 	}
+ #endif	/* HPUXV>=1100 */
+ 
+ /*
   * Examine proc structures and their associated information.
   */
  
***************
*** 364,385 ****
  
  #if	HPUXV>=800
  		if (j >= SFDCHUNK) {
! 		    if (!pfp
! 		    ||  kread((KA_T)pfp, (char *)&ofp, sizeof(ofp))
! 		    ||  !ofp
! 		    ||  kread((KA_T)ofp, (char *)&oft, sizeof(oft)))
  			break;
  		    j = 0;
  		    pfp += sizeof(KA_T);
  		}
  		j++;
  
  # if	HPUXV>=1020
  #  if	defined(USESPOFILE)
! 		pof = (long)oft.ofa[j - 1].pofile;
  #  endif	/* defined(USESPOFILE) */
  
! 		if ((fp = (KA_T)oft.ofa[j - 1].ofile))
  # else	/* HPUXV<1020 */
  #  if	defined(USESPOFILE)
  		pof = (long)oft.pofile[j - 1];
--- 421,447 ----
  
  #if	HPUXV>=800
  		if (j >= SFDCHUNK) {
! 		    if (!pfp || kread((KA_T)pfp, (char *)&ofp, sizeof(ofp))
! 		    ||  !ofp || kread((KA_T)ofp, oftp, oftsz))
  			break;
  		    j = 0;
  		    pfp += sizeof(KA_T);
+ 
+ # if	HPUXV>=1020
+ 		    ofap = (struct ofa *)oftp;
+ # endif	/* HPUXV>=1020 */
+ 
  		}
  		j++;
  
  # if	HPUXV>=1020
  #  if	defined(USESPOFILE)
! 		pof = (long)ofap->pofile;
  #  endif	/* defined(USESPOFILE) */
  
! 		fp = (KA_T)ofap->ofile;
! 		ofap = (struct ofa *)((char *)ofap + ofasz);
! 		if (fp)
  # else	/* HPUXV<1020 */
  #  if	defined(USESPOFILE)
  		pof = (long)oft.pofile[j - 1];
*** /tmp/T0Rpa4Wd	Tue Nov 15 16:44:41 2005
--- dialects/hpux/kmem/dstore.c	Tue Nov 15 07:24:30 2005
***************
*** 116,121 ****
--- 116,126 ----
  # endif	/* defined(hp9000s800) || defined(__hp9000s800) */
  
  	{ "mvops",	"mvfs_vnodeops"		},
+ 
+ # if	HPUXV>=1100
+ 	{ "chunksz",	"sizeof_fd_chunk_t"	},
+ # endif	/* HPUXV>=1100 */
+ 
  	{ "",		""			},
  	{ NULL,		NULL			}
  };
