Exemple #1
0
static int makepartial(char *fn)
{
	char buf[1024];
	char goobuf[60000];

	int fd, fd2;
	int i;

	fd = open(fn, O_RDONLY);
	if (fd < 0)
		return 0;

	snprintf(buf, sizeof buf, "%s/users/%d/badxfer.dat", 
		origdir, user.user_account_id);
	fd2 = open(buf, O_WRONLY | O_CREAT, 0666);
	if (fd2 == -1) {
		close(fd);
		snprintf(buf, sizeof buf, "%s/%s", 
			currnode->MULTI_TEMPORARY, fn);
		unlink(buf);
		return 0;
	}
	fsetperm(fd2, 0666);
	strlcpy(buf, filepart(fn), sizeof buf);
	safe_write(fd2, buf, 256);
	while ((i = read(fd, &goobuf, 60000))) {
		safe_write(fd2, goobuf, i);
	}
	close(fd);
	close(fd2);
	unlink(fn);
	return 1;
}
Exemple #2
0
static int ftpdl(char *list, char *loog)
{
	FILE *listh;
	FILE *logh;

	char buf[1024];
	char buf2[1024];

	snprintf(buf2, sizeof buf2, "%s/users/%d/ftp",
		origdir, user.user_account_id);
	mkdir(buf2, 0777);
	setperm(buf2, 0777);
	snprintf(buf2, sizeof buf2, "%s/users/%d/ftp/dl",
		origdir, user.user_account_id);
	mkdir(buf2, 0777);
	setperm(buf2, 0777);

	if (!(listh = fopen(list, "r")))
		return 0;

	logh = fopen(loog, "w");

	while (fgetsnolf(buf, 1024, listh)) {
		snprintf(buf2, sizeof buf2, "%s/users/%d/ftp/dl/%s",
			origdir, user.user_account_id, filepart(buf));
		//symlink(buf, buf2);
		link(buf, buf2);
		if (logh) {
			struct stat st;
			stat(buf, &st);
			fprintf(logh,
				"s %6d     0 bps    0 cps   0 errors     0 1024 %s 0\n",
				(int) st.st_size, filepart(buf));

		}
	}
	fclose(listh);
	if (logh)
		fclose(logh);
	return 1;
}
Exemple #3
0
//Connect detectors (sensors)
void VRML97_TriggerRoutesWrite(VRMLData *dat, char *trig, char *name, char *clock,int flags)
{
	name = filepart(name);
	VRML97_TouchTriggerRoute(dat,trig,name,clock);
	if(flags&(1UL<<VTAGID_PROXIMITY))		// trigger flags???
		VRML97_ProximityTriggerRoute(dat,trig,name,clock);
	if(flags&(1UL<<VTAGID_VISIBILITY))
		VRML97_VisibilityTriggerRoute(dat,trig,name,clock);
	if(flags&(1UL<<VTAGID_TOUCH))
		VRML97_GropeTriggerRoute(dat,trig,name,clock);
	return;
}
Exemple #4
0
static int sflagfile(char *file)
{
	struct stat st;
	char fpath[1024];
	const char *s;

	memset(fpath, 0, 1024);
	if (stat(file, &st) == -1)
		return 0;
	s = filepart(file);
	strncpy(fpath, file, s - file);

	if (!S_ISREG(st.st_mode))
		return 0;

	return flagres(addtag(fpath, s, 0, st.st_size, FLAG_FREE), s, st.st_size);

}
Exemple #5
0
int main(int argc, char* argv[])
{
	char*	filename;

	Log_SetTrace(false);

	filename = filepart(argv[0]);

	if (strcmp(filename, "bdbdump") == 0)
		return bdbdump(argc, argv, true);
	else if (strcmp(filename, "bdblist") == 0)
		return bdbdump(argc, argv, false);
	else if (strcmp(filename, "bdbrestore") == 0)
		return bdbrestore(argc, argv);
	else
		fprintf(stderr, "\n\tusage: bdbdump|bdblist|bdbrestore <bdb-file>\n");
	
	return 1;
}
Exemple #6
0
// recursive...
static int VRML97_SceneObjWrite (VRMLData *dat,LWItemID id, char *oname)
{
	unsigned int comflags=0,sound=0;
	int k,s,t=1,typ,clockLoop=1, clockTrigger=0,sclockLoop=1, sclockTrigger=1,csiz=0,LOD=0, animated=0; 
	ObjectDB	*odb=NULL;
	LWItemID	kid;
	double	dur=0.0;
 	char cname[84], *com_url=NULL;

	*cname = 0;
	*tagBuf = 0;
	if(getItemTag(itemInfo,id,VTAG_IGNORE"=", tagBuf,MAX_LIGHT_NAME))
	{
			com_url = strtok(tagBuf,"\n");
			fprintf(dat->vr->file,"%s### Intentionally Ignoring %s, and descendants ( %s ) \n",dat->vr->indent,oname,com_url);
			return 0;
	}
	typ = itemInfo->type(id);
	if(typ==LWI_OBJECT)
	{
		odb = getObjectDB(id, GlobalGlobal);

	/*	if(getItemTag(itemInfo,id,VTAG_SEQUENCE"=", cname,MAX_LIGHT_NAME))
		{
			com_url = strtok(cname,"\n");
			if(*com_url)
				sscanf(com_url,"%d %d",&sclockLoop,&sclockTrigger);
			com_url = NULL;
		} */
		if(getItemTag(itemInfo,id,VTAG_MORPH"=", tagBuf,MAX_LIGHT_NAME))
		{
			com_url = strtok(tagBuf,"\n");
			if(*com_url)
			{
				sscanf(com_url,"%d %d %d %d",&k,&t,&s,&sclockLoop);
				t -= k;
			}
			com_url = NULL;
		}
		if(getItemTag(itemInfo,id,VTAG_URL"=", tagBuf,MAX_LIGHT_NAME))
		{
			com_url = strtok(tagBuf,"\n");
			fprintf(dat->vr->file,"%sAnchor { url [ %s ]  children\n",dat->vr->indent,com_url);
		}  // Handle Collision, LOD, BillBoard here too!?
		LOD = findItemTag(itemInfo, id, VTAG_LOD);
	}
	strncpy(tagBuf,(oname),MAX_LIGHT_NAME);
	oname = filepart(oname);
	OpenItemTransform(dat,id,oname);
	if(typ==LWI_OBJECT)
	{
		OpenItemPivotTransform(dat,id,oname);
		if(LOD)
			VRML97_LODNodeWrite(dat,id,oname);
		else
		{
			if( (dat->vr->vrprefs&VRPREF_INCLUDE_OBJS) )
			{
				if( (dat->vr->vrprefs&VRPREF_PROTO_OBJS) )
				{
					if(objInfo->numPolygons(id)) // skip NULLs
						VRML97_ProtoInstWrite(dat,id,oname);
				}
				else
				{
					if(odb)
						VRML2_ObjWrite(dat,odb,"","");
				}
			}
			else
			{
				if( (dat->vr->vrprefs&VRPREF_PROTO_OBJS) )
				{
	#ifndef EXTERNPROTO_WORKING
					VRML97_InlineObjDefWrite(dat,id,odb,oname);
	#else
					if(objInfo->numPolygons(id)) // skip NULLs
						VRML97_ProtoInstWrite(dat,id,oname);
				//	VRML97_ExternProtoWrite(dat,id,oname);
	#endif		
				}
				else
					VRML97_InlineObjDefWrite(dat,id,odb,oname);
			}
		}
	}
	else if(typ==LWI_LIGHT)
		VRML97_LightWrite(dat, id, oname, 0);

	comflags=VRML97_ObjTagsParse(dat,id,oname);
	k = 1;
	for(kid=itemInfo->firstChild(id); kid!=LWITEM_NULL; kid=itemInfo->nextChild(id, kid) )	
	{
		fprintf(dat->vr->file,"%s \t\t # child #%d of %s\n",dat->vr->indent,k++,oname);
		buildItemVRCloneName(kid,cname,84);
		VRML97_SceneObjWrite(dat,kid, cname);	
	}
	sprintf(cname,"%s",oname);

	dur = itemAnimationTime(id,&k);

	//	if( ( k || obj->morfTarg 
	if( ( (k>3) || (comflags&(1UL<<VTAGID_SOUND)) || (comflags&(1UL<<VTAGID_MORPH)) ) )	// any animation
	{
		animated = 1;
		VRML97_TriggerWrite(dat,id,odb,comflags,oname);
	}


	if(typ==LWI_OBJECT)
	{
		CloseItemPivotTransform(dat,id,oname);	// enclose children
		CloseItemTransform(dat,oname);
		if(com_url)
			fprintf(dat->vr->file,"%s} #end Anchor\n",dat->vr->indent);
	}
	else
		CloseItemTransform(dat,oname);

	dur = VRML97_MoveInterpolatorWrite(dat,id,cname, &clockTrigger, &clockLoop);
	if(dur>0.0)
	{
		clockLoop = clockLoop>1 ? 1:0;//(obj->o_motEnv->flags&MOTF_STOP) ? 0:1;
		clockTrigger = clockTrigger>1 ? 1:0; //comflags&(1UL<<VTAGID_AUTOSTART) ? 1:0; //(obj->o_motEnv->flags&(MOTF_STOP|MOTF_REPEAT)) ? 1:0;
		VRML97_SceneClockWrite(dat,cname, clockLoop, clockTrigger,dur, VDEF_TIMER);
	}  
	if(typ==LWI_LIGHT)
	{
		LWEnvelopeID intens;
		lightIntensity(id,0.0,&intens);
		if(intens)
		{
			dur = envDuration(intens, &clockLoop);
			if( (dur>0.0) && clockLoop)
				VRML97_ValueInterpolatorWrite(dat,intens,cname,&clockTrigger,  &clockLoop);
			VRML97_SceneClockWrite(dat,cname, clockLoop, clockTrigger,dur, VDEF_TIMER);
		}
	}
	else if(typ==LWI_OBJECT)
	{
		if( comflags&(1UL<<VTAGID_MORPH) )
		{
			sclockTrigger = comflags&(1UL<<VTAGID_AUTOSTART) ? 1:0;
			if(t)
				dur = ((double)t)/sceneInfo->framesPerSecond;
			VRML97_SceneClockWrite(dat,cname, sclockLoop, sclockTrigger,dur, VDEF_FXTIMER);
		}
	}
	return comflags;

}
Exemple #7
0
// connect timers to interpolators
int VRML97_TimerRoutesWrite(VRMLData *dat, LWItemID id, LWChannelID chan, char *name) //, int swtch)
{
	int tot=0;
	if(!id && !chan) 
		return tot;	 
	name = filepart(name);
	if(id)	 
	{	 
		LWDVector tim;
		int		k[3];
		LWChannelID ch[3];
		int mov=0,siz=0,rot=0, typ;
		name = filepart(name);
		typ = itemInfo->type(id);
		k[0] = itemKeys(id, LWIP_POSITION, ch,tim);
		k[1] = itemKeys(id, LWIP_ROTATION, ch,tim+1);
		if(typ==LWI_OBJECT)
		{
			k[2] = itemKeys(id, LWIP_SCALING, ch,tim+2);
			tot = MAX3(k[0],k[1],k[2]);
		}
		else
			tot = MAX(k[0],k[1]);

		if(typ==LWI_OBJECT)
		{
			if(k[0]>3)	 //XYZ
			{
				fprintf(dat->vr->file,"%sROUTE %s"VDEF_TIMER"."FIELD_FRACTION" TO %s"VDEF_MOVER".set_fraction \n",dat->vr->indent,name,name);
				tot++;
				fprintf(dat->vr->file,"%sROUTE %s"VDEF_MOVER".value_changed TO %s"VDEF_XFORM".set_translation \n",dat->vr->indent,name,name);
				tot++;
			}
			if(k[2]>3)	 	// Scale
			{
				fprintf(dat->vr->file,"%sROUTE %s"VDEF_TIMER"."FIELD_FRACTION" TO %s"VDEF_SIZER".set_fraction \n",dat->vr->indent,name,name);
				tot++;
				fprintf(dat->vr->file,"%sROUTE %s"VDEF_SIZER".value_changed TO %s"VDEF_XFORM".set_scale \n",dat->vr->indent,name,name);
				tot++;
			}
			if(k[1]>3)		// HPB
			{
				fprintf(dat->vr->file,"%sROUTE %s"VDEF_TIMER"."FIELD_FRACTION" TO %s"VDEF_ROTATOR".set_fraction \n",dat->vr->indent,name,name);
				tot++;
				fprintf(dat->vr->file,"%sROUTE %s"VDEF_ROTATOR".value_changed TO %s"VDEF_XFORM".set_rotation \n",dat->vr->indent,name,name);
				tot++;
			}
		}
		else if(typ==LWI_LIGHT)	// write ROUTES for intensity, if necessary
		{
			LWEnvelopeID	env;
			if(k[0]>3)	 //XYZ
			{
				fprintf(dat->vr->file,"%sROUTE %s"VDEF_TIMER"."FIELD_FRACTION" TO %s"VDEF_MOVER".set_fraction \n",dat->vr->indent,name,name);
				tot++;
				fprintf(dat->vr->file,"%sROUTE %s"VDEF_MOVER".value_changed TO %s"VDEF_XFORM".set_translation \n",dat->vr->indent,name,name);
				tot++;
			}
			if(k[1]>3)		// HPB
			{
				fprintf(dat->vr->file,"%sROUTE %s"VDEF_TIMER"."FIELD_FRACTION" TO %s"VDEF_ROTATOR".set_fraction \n",dat->vr->indent,name,name);
				tot++;
				fprintf(dat->vr->file,"%sROUTE %s"VDEF_ROTATOR".value_changed TO %s"VDEF_XFORM".set_rotation \n",dat->vr->indent,name,name);
				tot++;
			}
			lightIntensity(id, 0.0, &env);
			if(env)
			{
				tim[2] = envDuration(env, &rot);
				if(rot>1) // keys!!
				{
					fprintf(dat->vr->file,"%sROUTE %s"VDEF_TIMER"."FIELD_FRACTION" TO %s"VDEF_ENVELOPE".set_fraction \n",dat->vr->indent,name,name);
					tot++;
					fprintf(dat->vr->file,"%sROUTE %s"VDEF_ENVELOPE".value_changed TO %s.set_intensity \n",dat->vr->indent,name,name);
					tot++;
				}
			}
		}
		else // Camera: write ROUTES for ViewPoint position, orientation, not Transform
		{
			if(k[0]>3)	 //XYZ
			{
				fprintf(dat->vr->file,"%sROUTE %s"VDEF_TIMER"."FIELD_FRACTION" TO %s"VDEF_MOVER".set_fraction \n",dat->vr->indent,name,name);
				tot++;
				fprintf(dat->vr->file,"%sROUTE %s"VDEF_MOVER".value_changed TO %s.set_position \n",dat->vr->indent,name,name);
				tot++;
			}
			if(k[1]>3)		// HPB
			{
				fprintf(dat->vr->file,"%sROUTE %s"VDEF_TIMER"."FIELD_FRACTION" TO %s"VDEF_ROTATOR".set_fraction \n",dat->vr->indent,name,name);
				tot++;
				fprintf(dat->vr->file,"%sROUTE %s"VDEF_ROTATOR".value_changed TO %s.set_orientation \n",dat->vr->indent,name,name);
				tot++;
			}

		}/*		if(tot && swtch)
		{
			fprintf(dat->vr->file,"%sROUTE %s"VDEF_SWITCH".touchTime TO %s"VDEF_TIMER".startTime \n",dat->vr->indent,name,name);
			tot++;
		} */
	}
	else if(chan)
	{
		fprintf(dat->vr->file,"%sROUTE %s"VDEF_TIMER"."FIELD_FRACTION" TO %s"VDEF_ENVELOPE".set_fraction \n",dat->vr->indent,name,name);
		tot++;
	}
	return tot;
}
void extractmatrices(const char* nucsfile,
		     const Projection* P,
		     const Symmetry* S,
		     const Interaction* Int,
		     const void *obs,
		     const double* norm,
		     const double cmfactor,
		     int n, int diagonal,
		     int j, int p)
{
  int odd=P->odd;
  int jmax=P->jmax;
  complex double H[n*n];
  complex double VC[n*n];
  complex double T[n*n];
  complex double R2[n*n];
  complex double N[n*n];

  complex double phase[n];
  
  const Observablesod ***obsme = obs;

  int a, b;
  int m, k;
  int nj, ipj;

  nj = n*(j+1);
  ipj = idxpij(jmax,p,j);

  // calculate phase relation with respect to first Slater det
  a=0;
  for (b=0; b<n; b++)
    for (m=-j; m<=j; m += 2)
      for (k=-j; k<=j; k+= 2)
	if (SymmetryAllowed(S[a], p, j, m) && SymmetryAllowed(S[b], p, j, k))
	  phase[b] = cexp(I*carg(obsme[a+b*n][ipj][idxjmk(j,m,k)].n));


  char outfilename[255];
  FILE* outfp;

  // Overlap matrix

  for (b=0; b<n; b++) {
    for (a=diagonal ? b : 0; a<n; a += diagonal ? n : 1)
      for (m=-j; m<=j; m += 2)
	for (k=-j; k<=j; k+= 2)
	  if (SymmetryAllowed(S[a], p, j, m) && SymmetryAllowed(S[b], p, j, k)) {
	    N[a+b*n] = obsme[a+b*n][ipj][idxjmk(j,m,k)].n/cmfactor*
	      norm[a]*norm[b]/(conj(phase[a])*phase[b]);
	  }
  }			

  snprintf(outfilename, 255, "%s.N%s-%d%c.bin", 
	   filepart(nucsfile), diagonal ? "matrixd" : "matrix", 
	   j, p ? '-' : '+');
  outfp = fopen(outfilename, "w");
  fwritecmatbin(outfp, n, N);
  fclose(outfp);

  // Hamiltonian matrix

  for (b=0; b<n; b++) {
    for (a=diagonal ? b : 0; a<n; a += diagonal ? n : 1)
      for (m=-j; m<=j; m += 2)
	for (k=-j; k<=j; k+= 2)
	  if (SymmetryAllowed(S[a], p, j, m) && SymmetryAllowed(S[b], p, j, k)) {
	    H[a+b*n] = obsme[a+b*n][ipj][idxjmk(j,m,k)].h/cmfactor*
	      norm[a]*norm[b]/(conj(phase[a])*phase[b]);
	  }
  }			

  snprintf(outfilename, 255, "%s.H%s-%d%c.bin", 
	   filepart(nucsfile), diagonal ? "matrixd" : "matrix", 
	   j, p ? '-' : '+');
  outfp = fopen(outfilename, "w");
  fwritecmatbin(outfp, n, H);
  fclose(outfp);

  // T matrix

  for (b=0; b<n; b++) {
    for (a=diagonal ? b : 0; a<n; a += diagonal ? n : 1)
      for (m=-j; m<=j; m += 2)
	for (k=-j; k<=j; k+= 2)
	  if (SymmetryAllowed(S[a], p, j, m) && SymmetryAllowed(S[b], p, j, k)) {
	    T[a+b*n] = obsme[a+b*n][ipj][idxjmk(j,m,k)].t/cmfactor*
	      norm[a]*norm[b]/(conj(phase[a])*phase[b]);
	  }
  }			

  snprintf(outfilename, 255, "%s.T%s-%d%c.bin", 
	   filepart(nucsfile), diagonal ? "matrixd" : "matrix", 
	   j, p ? '-' : '+');
  outfp = fopen(outfilename, "w");
  fwritecmatbin(outfp, n, T);
  fclose(outfp);

  // Coulomb matrix
  // assume Coulomb is latest potential component

  for (b=0; b<n; b++) {
    for (a=diagonal ? b : 0; a<n; a += diagonal ? n : 1)
      for (m=-j; m<=j; m += 2)
	for (k=-j; k<=j; k+= 2)
	  if (SymmetryAllowed(S[a], p, j, m) && SymmetryAllowed(S[b], p, j, k)) {
	    VC[a+b*n] = obsme[a+b*n][ipj][idxjmk(j,m,k)].v[Int->n-1]/cmfactor*
	      norm[a]*norm[b]/(conj(phase[a])*phase[b]);
	  }
  }			

  snprintf(outfilename, 255, "%s.VC%s-%d%c.bin", 
	   filepart(nucsfile), diagonal ? "matrixd" : "matrix", 
	   j, p ? '-' : '+');
  outfp = fopen(outfilename, "w");
  fwritecmatbin(outfp, n, VC);
  fclose(outfp);


  // R2 matrix

  for (b=0; b<n; b++) {
    for (a=diagonal ? b : 0; a<n; a += diagonal ? n : 1)
      for (m=-j; m<=j; m += 2)
	for (k=-j; k<=j; k+= 2)
	  if (SymmetryAllowed(S[a], p, j, m) && SymmetryAllowed(S[b], p, j, k)) {
	    R2[a+b*n] = obsme[a+b*n][ipj][idxjmk(j,m,k)].r2m/cmfactor*
	      norm[a]*norm[b]/(conj(phase[a])*phase[b]);
	  }
  }			

  snprintf(outfilename, 255, "%s.R2%s-%d%c.bin", 
	   filepart(nucsfile), diagonal ? "matrixd" : "matrix", 
	   j, p ? '-' : '+');
  outfp = fopen(outfilename, "w");
  fwritecmatbin(outfp, n, R2);
  fclose(outfp);

}
Exemple #9
0
int main (int argc, char const * argv [])

{
	static char const * optv [] =
	{
		"convert .csv data to .html file",
		PUTOPTV_S_FUNNEL,
		"c:n:ps:t",
		"c s\tcomma characters [" LITERAL (CSV2HTML_COMMA) "]",
		"n n\tminimum number of columns",
		"p\tprint HTML page with header",
		"s s\tpage title string",
		"t\tprint HTML table only",
		(char const *) (0)
	};
	char const * string = (char *) (0);
	char const * comma = CSV2HTML_COMMA;
	unsigned column = 0;
	flag_t flags = (flag_t) (0);
	signed c;
	while (~ (c = getoptv (argc, argv, optv)))
	{
		switch (c)
		{
		case 'c':
			comma = optarg;
			break;
		case 'l':
			column = uintspec (optarg, 1, USHRT_MAX);
			break;
		case 'n':
			column = uintspec (optarg, 1, UCHAR_MAX);
			break;
		case 'p':
			_setbits (flags, CSV2HTML_PAGE);
			break;
		case 's':
			string = optarg;
			break;
		case 't':
			_setbits (flags, CSV2HTML_HTML);
			break;
		default: 
			break;
		}
	}
	argc -= optind;
	argv += optind;
	if (! argc)
	{
		if (! string)
		{
			string = "untitled";
		}
		function (string, comma, column, flags);
	}
	while ((argc) && (* argv))
	{
		if (efreopen (* argv, "rb", stdin))
		{
			if (! string)
			{
				string = filepart (* argv);
			}
			function (string, comma, column, flags);
		}
		argc--;
		argv++;
	}
	return (0);
}
Exemple #10
0
signed ReadPIB (struct int6k *int6k) 

{

	struct channel * channel = (struct channel *)(int6k->channel);
	struct message * message = (struct message *)(int6k->message);
#ifndef __GNUC__
#pragma pack (push,1)
#endif

	struct __packed vs_rd_mod_request 
	{
		struct header_eth ethernet;
		struct header_int intellon;
		uint8_t MODULEID;
		uint8_t MACCESS;
		uint16_t MLENGTH;
		uint32_t MOFFSET;
		uint8_t MSECRET [16];
	}
	* request = (struct vs_rd_mod_request *) (message);
	struct __packed vs_rd_mod_confirm 
	{
		struct header_eth ethernet;
		struct header_int intellon;
		uint8_t MSTATUS;
		uint8_t RESERVED1 [3];
		uint8_t MODULEID;
		uint8_t RESERVED;
		uint16_t MLENGTH;
		uint32_t MOFFSET;
		uint32_t CHKSUM;
		uint8_t BUFFER [INT6K_BLOCKSIZE];
	}
	* confirm = (struct vs_rd_mod_confirm *) (message);

#ifndef __GNUC__
#pragma pack (pop)
#endif

	uint32_t extent = 0;
	uint32_t offset = 0;
	signed length = INT6K_BLOCKSIZE;
	Request (int6k, "Read Parameters from Device");
	if (lseek (int6k->pib.file, 0, SEEK_SET)) 
	{
		error ((int6k->flags & INT6K_BAILOUT), errno, "Can't rewind %s", filepart (int6k->pib.name));
		return (1);
	}
	memset (message, 0, sizeof (struct message));
	do 
	{
		EthernetHeader (&message->ethernet, channel->peer, channel->host);
		IntellonHeader (&message->intellon, (VS_RD_MOD | MMTYPE_REQ));
		int6k->packetsize = ETHER_MIN_LEN;
		request->MODULEID = VS_MODULE_PIB;
		request->MLENGTH = HTOLE16 (length);
		request->MOFFSET = HTOLE32 (offset);
		if (SendMME (int6k) <= 0) 
		{
			error ((int6k->flags & INT6K_BAILOUT), ECANCELED, INT6K_CANTSEND);
			return (-1);
		}
		if (ReadMME (int6k, (VS_RD_MOD | MMTYPE_CNF)) <= 0) 
		{
			error ((int6k->flags & INT6K_BAILOUT), ECANCELED, INT6K_CANTREAD);
			return (-1);
		}
		if (confirm->MSTATUS) 
		{
			Failure (int6k, INT6K_WONTDOIT);
			return (-1);
		}

#if 1

		if (LE16TOH (confirm->MLENGTH) != length) 
		{
			Failure (int6k, INT6K_ERR_LENGTH);
			return (-1);
		}
		if (LE32TOH (confirm->MOFFSET) != offset) 
		{
			Failure (int6k, INT6K_ERR_OFFSET);
			return (-1);
		}

#else

		if (LE16TOH (confirm->MLENGTH) != length) 
		{
			error ((int6k->flags & INT6K_BAILOUT), 0, INT6K_ERR_LENGTH);
			length = INT6K_BLOCKSIZE;
			offset = 0;
			continue;
		}
		if (LE32TOH (confirm->MOFFSET) != offset) 
		{
			error ((int6k->flags & INT6K_BAILOUT), 0, INT6K_ERR_OFFSET);
			length = INT6K_BLOCKSIZE;
			offset = 0;
			continue;
		}

#endif

		length = LE16TOH (confirm->MLENGTH);
		offset = LE32TOH (confirm->MOFFSET);
		if (checksum_32 (confirm->BUFFER, length, confirm->CHKSUM)) 
		{
			error ((int6k->flags & INT6K_BAILOUT), ECANCELED, "Bad Packet Checksum");
			return (-1);
		}
		if (offset == extent) 
		{
			struct header_pib * header_pib = (struct header_pib *) (confirm->BUFFER);
			extent = header_pib->PIBLENGTH;
		}
		if ((offset + length) > extent) 
		{
			length = extent - offset;
		}
		if (lseek (int6k->pib.file, offset, SEEK_SET) != offset) 
		{
			error ((int6k->flags & INT6K_BAILOUT), errno, "can't seek %s", filepart (int6k->pib.name));
			return (-1);
		}
		if (write (int6k->pib.file, confirm->BUFFER, length) < length) 
		{
			error ((int6k->flags & INT6K_BAILOUT), errno, "can't save %s", filepart (int6k->pib.name));
			return (-1);
		}
		offset += length;
	}
	while (offset < extent);
	Confirm (int6k, "Read %s", int6k->pib.name);
	return (0);
}