view file.rhope @ 79:80d8c9248f85

Began work on File
author Mike Pavone <pavone@retrodev.com>
date Sat, 10 Jul 2010 18:02:04 -0400
parents
children d78613686a38
line wrap: on
line source



Blueprint Stat
{
	
}

Blueprint File
{
	Name
}

Blueprint File Read
{
	Name
	Descriptor(Int32,Naked)
	Info
	Buffer
}

Blueprint File Write
{
	Name
	Descriptor(Int32,Naked)
	Info
	Buffer
}

Blueprint File ReadWrite
{
	Name
	Read Offset(Int64,Naked)
	Descriptor(Int32,Naked)
	Info
	Buffer
}

File[name:out]
{
	out <- [Build[File()]]Name <<[name]
}


Open@File[file,mode:out,error]
{
	If[[mode]=["r"]]
	{ 
		imode <- 
		type <- File Read()
		out <- Val[ofile]
	}{
		If[[mode]=["w"]]
		{ 
			imode <- 
			type <- File Write()
			out <- Val[ofile]
		}{
			,error <- If[[mode]=["rw"]]
			{ 
				imode <- 
				type <- File ReadWrite()
				out <- [ofile]Read Offset <<[0i64]
			}
		}
	}
	fd <- open[[file]Name >>]
	error <- If[[fd]=[-1i32]] {}
	{
		ofile <- [[[[Build[type]	
			]Name <<[ [file]Name >> ]
			]Descriptor <<[fd]
			]Info <<[Stat[fd]]
			]Buffer <<[Array[]]
	}
}

Read@File[file,bytes:data,outfile,error]
{
	,error <- [file]Open["r"]
	{
		data,outfile,error <- [~]Read[bytes]
	}
}

Append@File[file,data:out,error]
{
	,error <- [file]Open["w"]
	{
		out,error <- [~]Append[data]
	}
}

String@File[file:out,error]
{
	,error <- [file]Open["w"]
	{
		out,error <- String[~]
	}
}

Read@File Read[file,inbytes(Int32):data,outfile,error]
{
	buflen <- [[file]Buffer >>]Length
	If[buflen]
	{
		If[[inbytes]=[buflen]]
		{	
			data <- [file]Buffer >>
			outfile <- [file]Buffer <<[Array[]]
		}{
			If[[inbytes]<[buflen]]
			{
			
			}{
				
			}
		}
	}{
		readbytes, mdata <- read[[file]Descriptor >>, [Array[]]Set[inbytes, 0u8], Int64[inbytes]]
		error <- If[[readbytes]<[0i64]] {}
		{
			outfile <- file
			data <- [mdata]Length <<[ Trunc Int32[readbytes] ]
		}
			
	}
}