Index: /issm/trunk-jpl/src/m/io/fileptr.js
===================================================================
--- /issm/trunk-jpl/src/m/io/fileptr.js	(revision 19809)
+++ /issm/trunk-jpl/src/m/io/fileptr.js	(revision 19810)
@@ -12,4 +12,6 @@
 	this.view =NaN;
 	this.ptr =NaN;
+	this.buffersize =NaN;
+	this.mode ='';
 	this.options = new pairoptions(Array.prototype.slice.call(arguments));
 	
@@ -21,12 +23,29 @@
 			console.log(sprintf("       ptr: %i\n",this.ptr));
 			console.log(sprintf("       increment: %i\n",this.increment));
+			console.log(sprintf("       mode: %s\n",this.mode));
 
 		} //}}}
 		this.setdefaultparameters = function (options) { //{{{
-
-			this.increment=options.getfieldvalue('increment',80000); //80000 bytes,  10000 doubles.
-			this.buffer=new ArrayBuffer(this.increment);
+	
+			this.mode=options.getfieldvalue('mode');
 			this.ptr=0;
-			this.view=new DataView(this.buffer);
+			this.increment=0;
+			this.buffersize=0;
+			if (this.mode=='w'){
+				this.increment=options.getfieldvalue('increment',80000); //80000 bytes,  10000 doubles.
+				this.buffer=new ArrayBuffer(this.increment);
+				this.view=new DataView(this.buffer);
+			}
+			else if(this.mode == 'r'){
+				
+				/*recover buffer and its size: */
+				var bufferin= options.getfieldvalue('buffer');
+				this.buffersize= options.getfieldvalue('buffersize');
+				
+				/*crete a typed array buffer: */
+				this.buffer=new ArrayBuffer(this.buffersize);
+				this.view=new DataView(this.buffer); 
+				for(var i=0;i<this.buffersize;i++) this.view.setUint8(i,bufferin[i]);
+			}
 
 		} //}}}
@@ -72,4 +91,48 @@
 			else throw Error('fileptr.fwrite error message: wrong type of format');
 		} //}}}
+		this.fread = function (size,format) { //{{{
+			
+			var value;
+
+			if(this.ptr==this.buffersize)return -1;
+			if(format == 'int'){
+				if(size==1){
+					value=this.view.getUint32(this.ptr,true); 
+					this.ptr+=4;
+				}
+				else{
+					value = new Uint32Array(size);
+					for(var i=0;i<size;i++){
+						value[i]=this.view.getUint32(this.ptr,true); 
+						this.ptr+=4;
+					}
+				}
+			}
+			else if(format == 'char'){
+				value = ''; 
+				for(var i=0;i<(size-1);i++){
+					value+= String.fromCharCode(this.view.getUint8(this.ptr,true));
+					this.ptr+=1;
+				}
+				this.ptr+=1; //pass over the '\0';
+
+			}
+			else if(format == 'double'){
+				if(size==1){
+					value=this.view.getFloat64(this.ptr,true);
+					this.ptr+=8;
+				}
+				else{ 
+					value = new Float64Array(size);
+					for(var i=0;i<size;i++){
+						value[i]=this.view.getFloat64(this.ptr,true);
+						this.ptr+=8;
+					}
+				}
+			}
+			else throw Error('fileptr.fwrite error message: wrong type of format');
+			
+			return value;
+		} //}}}
 		this.rawbuffer = function () { //{{{
 			return this.buffer.slice(0,this.ptr);
Index: /issm/trunk-jpl/src/m/solve/marshall.js
===================================================================
--- /issm/trunk-jpl/src/m/solve/marshall.js	(revision 19809)
+++ /issm/trunk-jpl/src/m/solve/marshall.js	(revision 19810)
@@ -13,5 +13,5 @@
 
 	//open file for binary writing
-	fid=new fileptr();
+	fid=new fileptr('mode','w');
 
 	//First, write MaximumNumberOfEnum to make sure that the Enums are synchronized
