ViewVC Help
View File | Revision Log | View Changeset | Root Listing
root/Oni2/oup/current/Code/OniDataClass.pas
(Generate patch)

Comparing oup/current/Code/OniDataClass.pas (file contents):
Revision 56 by alloc, Mon Dec 25 18:36:41 2006 UTC vs.
Revision 86 by alloc, Sun Jan 14 20:19:08 2007 UTC

# Line 135 | Line 135 | type
135    published
136    end;
137  
138 +  TOniDataEmpty = class(TOniData)
139 +  private
140 +  protected
141 +  public
142 +    constructor Create(OLDBFilename: String; var Result: Boolean); override;
143 +    procedure Close; override;
144 + {
145 +    procedure UpdateListCache;
146 +    //      function GetDatLinks(srcid:LongWord):TDatLinks;
147 +    function GetFileInfo(fileid: LongWord): TFileInfo; override;
148 +    function GetFilesList(ext: String; pattern: String;
149 +      NoEmptyFiles: Boolean; sort: TSortType): TStringArray; override;
150 +    function GetFilesCount: LongWord; override;
151 +    function GetExtensionsList: TStringArray; override;
152 +    function GetExtendedExtensionsList: TExtensionsMap; override;
153 +    function GetNamedFilesMap: TNamedFilesMap;
154 +
155 +    function LoadDatFile(fileid: LongWord): Tdata; override;
156 +    procedure UpdateDatFile(fileid: LongWord; Data: Tdata); override;
157 +    procedure LoadDatFilePart(fileid, offset, size: LongWord; target: Pointer); override;
158 +    procedure UpdateDatFilePart(fileid, offset, size: LongWord; target: Pointer); override;
159 +
160 +    function GetRawList(fileid: LongWord): TRawList; override;
161 +    procedure LoadRawFile(fileid, dat_offset: LongWord; target: Pointer); override;
162 +    procedure UpdateRawFile(fileid, dat_offset: LongWord; size: LongWord;
163 +      target: Pointer); override;
164 +    procedure LoadRawFilePart(fileid, dat_offset: LongWord;
165 +      offset, size: LongWord; target: Pointer); override;
166 +    procedure UpdateRawFilePart(fileid, dat_offset: LongWord;
167 +      offset, size: LongWord; target: Pointer); override;
168 + }  published
169 +  end;
170  
171   const
172    ODB_None = -1;
# Line 142 | Line 174 | const
174    ODB_ADB  = 1;
175  
176   var
177 + //  OniDataConnection: TOniData;
178 +  DataConnections: array of TOniData;
179    OniDataConnection: TOniData;
180  
181 < function CreateDataConnection(filename: String; backend: Integer): Boolean;
182 < procedure CloseDataConnection;
181 > function CreateDataConnection(filename: String; backend: Integer): TOniData;
182 > procedure CloseDataConnection(connection: TOniData);
183 >
184  
185  
186  
# Line 1371 | Line 1406 | end;
1406  
1407  
1408  
1409 < function CreateDataConnection(filename: String; backend: Integer): Boolean;
1409 > function CreateDataConnection(filename: String; backend: Integer): TOniData;
1410   var
1411    answer: Boolean;
1412 +  i: Integer;
1413   begin
1414 <  if Assigned(OniDataConnection) then
1414 >  if Length(DataConnections) > 0 then
1415 >  begin
1416 >    for i := 0 to High(DataConnections) do
1417 >    begin
1418 >      if ExtractFileName(DataConnections[i].FFileName) = ExtractFileName(filename) then
1419 >      begin
1420 >        if DataConnections[i].FFileName <> filename then
1421 >        begin
1422 >          Result := nil;
1423 >          ShowMessage('You can not open two files with the same name at a time.');
1424 >        end
1425 >        else
1426 >          Result := DataConnections[i];
1427 >        Exit;
1428 >      end;
1429 >    end;
1430 >  end;
1431 >
1432 >  if not FileExists(filename) then
1433    begin
1434 <    OniDataConnection.Close;
1435 <    OniDataConnection.Free;
1436 <    OniDataConnection := nil;
1434 >    ShowMessage('File "' + filename + '" does not exist!');
1435 >    Result := nil;
1436 >    Exit;
1437    end;
1438 +
1439 +  SetLength(DataConnections, Length(DataConnections) + 1);
1440 +  i := High(DataConnections);
1441    case backend of
1442      ODB_Dat:
1443 <      OniDataConnection := TOniDataDat.Create(filename, answer);
1443 >      DataConnections[i] := TOniDataDat.Create(filename, answer);
1444      ODB_ADB:
1445 <      OniDataConnection := TOniDataADB.Create(filename, answer);
1445 >      DataConnections[i] := TOniDataADB.Create(filename, answer);
1446      else
1447        ShowMessage('Unknown Backend');
1448 <      Result := False;
1448 >      Result := nil;
1449        Exit;
1450    end;
1451  
1452    if answer then
1453    begin
1454 <    //      ShowMessage('file loaded');
1455 <    //      ShowMessage('Files: '+IntToStr(OniDataConnection.GetFilesCount));
1399 <    Result := True;
1454 >    Result := DataConnections[i];
1455 > //    Result := True;
1456    end
1457    else
1458    begin
1459      ShowMessage('File not loaded');
1460 <    OniDataConnection.Close;
1461 <    OniDataConnection.Free;
1462 <    Result := False;
1460 >    DataConnections[i].Close;
1461 >    DataConnections[i].Free;
1462 >    DataConnections[i] := nil;
1463 >    SetLength(DataConnections, Length(DataConnections) - 1);
1464 >    Result := nil;
1465    end;
1466   end;
1467  
1468  
1469  
1470  
1471 < procedure CloseDataConnection;
1471 > procedure CloseDataConnection(connection: TOniData);
1472 > var
1473 >  i: Integer;
1474 >  found: Boolean;
1475   begin
1476 <  if Assigned(OniDataConnection) then
1476 >  if Assigned(connection) then
1477    begin
1478 <    OniDataConnection.Close;
1479 <    OniDataConnection := nil;
1478 >    found := False;
1479 >    for i := 0 to High(DataConnections) do
1480 >    begin
1481 >      if not found then
1482 >      begin
1483 >        if DataConnections[i] = connection then
1484 >        begin
1485 >          DataConnections[i].Close;
1486 >          DataConnections[i].Free;
1487 >          DataConnections[i] := nil;
1488 >          found := True;
1489 >        end;
1490 >      end
1491 >      else
1492 >      begin
1493 >        DataConnections[i - 1] := DataConnections[i];
1494 >      end;
1495 >    end;
1496 >    if found then
1497 >      SetLength(DataConnections, Length(DataConnections) - 1);
1498    end;
1499   end;
1500  
1501 +
1502 +
1503 +
1504 + constructor TOniDataEmpty.Create(OLDBFilename: String; var Result: Boolean);
1505 + var
1506 +  i, j:  Byte;
1507 +  temps: String;
1508 + begin
1509 +  ShowMessage('OLD');
1510 + end;
1511 +
1512 + procedure TOniDataEmpty.Close;
1513 + begin
1514 +  ShowMessage('OLD');
1515 + end;
1516 +
1517   end.

Diff Legend

Removed lines
+ Added lines
< Changed lines (old)
> Changed lines (new)