Newer
Older
ubixfs-2 / TESTFS.PAS
@flameshadow flameshadow on 10 Jun 2005 4 KB UbixFS
uses UbixFS, Device, ramDrive, diskDrv, debug, strings, dos, crt, math;

var
    drive : PRamDrive;
   // drive:PDiskDrive;
    fs: PUbixFS;
    filehandle:int32;
    buf:array[0..1023] of integer;
    count:integer;
    handle2:integer;

procedure copyToFS(source:string);
var 
  handle:integer;
  f:file;
  buf:pointer;
  size:integer;
  dest:pchar;
  destSize:integer;
begin

  assign(f, source);
  {$I-} reset(f, 1); {$I+}
  if IOREsult <> 0 then exit;
  size := filesize(f);
  getmem(buf, size);
  fillchar(buf^, size, 0);
  blockread(f, buf^, size);
  destSize := length(source) + 2;
  GetMem(dest, destSize);
  fillchar(dest^, destSize, 0);
  strPCopy(dest, '/'+source);
  close(f);
  handle := fs^.vfs_fCreate(dest);
  if (handle = -1) then writeln('Error creating file in FS');
  fs^.vfs_write(handle, buf, size);
  fs^.vfs_close(handle);
  freemem(buf, size);
  freemem(dest, destSize);
end;

procedure copyFromFS(source:pchar; dest:string);
var
  handle:integer;
  f:file;
  buf:pointer;
  size:integer;
begin
  assign(f, dest);
  rewrite(f, 1);
  blockwrite(f, buf^, size);
  close(f);
end;

procedure test1(const file1, file2:string);
const buf1Size = 1 shl 12;
const buf2Size = 1 shl 13;
var 
  f1, f2:file;
  d1, d2:integer;
  dest:pchar;
  buf:pointer;
  bytesReadIn:integer;
  lResult:integer;
begin
  assign(f1, file1);
  assign(f2, file2);
  {$I-} reset(f1, 1); {$I+}
  if IOResult <> 0 then exit;
  {$I-} reset(f2, 1); {$I+}
  if IOResult <> 0 then exit;
  getMem(buf, max(buf1Size, buf2Size));

  getMem(dest, length(file1)+2);
  strPCopy(dest, '/'+file1);
  d1 := fs^.vfs_fCreate(dest);
  if (d1 = -1) then writeln('Error creating file in FS');
  freeMem(dest, length(file1)+2);
  getMem(dest, length(file2)+2);
  strPCopy(dest, '/'+file2);
  d2 := fs^.vfs_fCreate(dest);
  freemem(dest, length(file2)+2);
  if (d2 = -1) then writeln('Error creating file in FS');
  repeat
    bytesReadIn := 0;
    blockRead(f1, buf^, buf1Size, lResult);
    inc(bytesReadIn, lResult);
writeln(file1, '  -------->');
    fs^.vfs_write(d1, buf, lResult);
writeln('<---------');
    blockRead(f2, buf^, buf2Size, lResult);
    inc(bytesReadIn, lResult);
writeln(file2, '  -------->');
    fs^.vfs_write(d2, buf, lResult); 
writeln('<---------');
  until bytesReadIn = 0;
  fs^.vfs_close(d1);
  fs^.vfs_close(d2);
  freemem(buf, max(buf1Size, buf2Size));
  close(f1);
  close(f2);
end;

procedure test2(const file1, file2, file3:string);
const bufSize = 1 shl 10;
var 
  f1, f2, f3:file;
  d1, d2, d3:integer;
  dest:pchar;
  buf:pointer;
  bytesReadIn:integer;
  lResult:integer;
begin
  assign(f1, file1);
  assign(f2, file2);
  assign(f3, file3);
  {$I-} reset(f1, 1); {$I+}
  if IOResult <> 0 then exit;
  {$I-} reset(f2, 1); {$I+}
  if IOResult <> 0 then exit;
  {$I-} reset(f3, 1); {$I+}
  if IOResult <> 0 then exit;
  getMem(buf, bufSize);
  getMem(dest, length(file1)+2);
  strPCopy(dest, '/'+file1);
  d1 := fs^.vfs_fCreate(dest);
  if (d1 = -1) then writeln('Error creating file in FS');
  freeMem(dest, length(file1)+2);
  getMem(dest, length(file2)+2);
  strPCopy(dest, '/'+file2);
  d2 := fs^.vfs_fCreate(dest);
  freemem(dest, length(file2)+2);
  if (d2 = -1) then writeln('Error creating file in FS');
  getMem(dest, length(file3)+2);
  strPCopy(dest, '/'+file3);
  d3 := fs^.vfs_fCreate(dest);
  freemem(dest, length(file3)+2);
  if (d3 = -1) then writeln('Error creating file in FS');

  repeat
    bytesReadIn := 0;
    blockRead(f1, buf^, bufSize, lResult);
    inc(bytesReadIn, lResult);
    fs^.vfs_write(d1, buf, lResult);
    blockRead(f2, buf^, bufSize, lResult);
    inc(bytesReadIn, lResult);
    fs^.vfs_write(d2, buf, lResult); 
    blockRead(f3, buf^, bufSize, lResult);
    inc(bytesReadIn, lResult);
    fs^.vfs_write(d3, buf, lResult); 

  until bytesReadIn = 0;
  fs^.vfs_close(d1);
  fs^.vfs_close(d2);
  freemem(buf, bufSize);
  close(f1);
  close(f2);
end;

var searchRec:TSearchRec;

begin

//  new(drive, init(2880)); // allocate a ramdrive that's 2880 sectors long (floppy size)
  new(drive, init(8192*4)); // allocate a ramdrive that's big
//  new(drive, init('ubixfs.dsk'));
  new(fs, init(drive));
  fs^.vfs_format(drive, 1024, FALSE); 
  fs^.vfs_init();
  fs^.printSuperBlock();
  fs^.examine();

  findfirst('*.pas', anyFile, searchrec);
  while (doserror = 0) do 
    begin
      if (searchRec.attr and directory <> directory) then copyToFS(searchRec.name);
      findNext(searchRec);
    end; 
  test1('1.bmp', '2.bmp');
  copyToFS('3.bmp');
  //test1('4.bmp', '5.bmp'); 
  test2('4.bmp', '5.bmp', '6.bmp'); 
  fs^.vfs_mkdir('/foo');
  fs^.vfs_mkdir('/foo/bar');
  fs^.visualize();
  fs^.examine();  

//  fs^.vfs_unlink('/1.bmp');
  dispose(fs, done);
  dispose(drive, done);

  writeln('sizeof(diskSuperBlock): ',sizeof(TdiskSuperBlock));
  writeln('sizeof(ubixfsInode): ',sizeof(TubixfsInode));
  writeln('sizeof(dataStream): ', sizeof(TdataStream));
end.