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)); writeln('sizeof(TSmallData): ', sizeof(TSmallData)); end.