62 |
|
|
63 |
|
implementation |
64 |
|
{$R *.dfm} |
65 |
< |
uses Main, ValueEdit; |
65 |
> |
uses Main, ValueEdit, RawList; |
66 |
|
|
67 |
|
procedure TForm_RawEdit.NewFile(fileinfo: TFileInfo); |
68 |
|
var |
114 |
|
begin |
115 |
|
for i := 0 to filelist.Count - 1 do |
116 |
|
begin |
117 |
< |
if ConManager.Connection[ConID].ExtractFileIDOfName(filelist.Items.Strings[i]) = RawInfo.SrcID then |
117 |
> |
if ConManager.Connection[ConID].ExtractFileIDOfName(filelist.Items.Strings[i]) = Raw_Info.SrcID then |
118 |
|
begin |
119 |
|
filelist.ItemIndex := i; |
120 |
|
listClick(Self); |
131 |
|
end; |
132 |
|
end; |
133 |
|
mem := nil; |
134 |
< |
ConManager.Connection[ConID].LoadRawFile(raw_info.SrcID, raw_info.SrcOffset, mem); |
134 |
> |
ConManager.Connection[ConID].LoadRawFile(raw_info.SrcID, raw_info.SrcOffset, TStream(mem)); |
135 |
|
hex.LoadFromStream(mem); |
136 |
|
ClearValues; |
137 |
|
hexSelectionChanged(Self); |
145 |
|
procedure TForm_RawEdit.list_offsetClick(Sender: TObject); |
146 |
|
begin |
147 |
|
ClearValues; |
148 |
< |
dat_offset := StrToInt('$' + MidStr( |
148 |
> |
datoffset := StrToInt('$' + MidStr( |
149 |
|
list_offset.Items.Strings[list_offset.ItemIndex], 3, 8)); |
150 |
< |
LoadRaw(Connection.GetRawInfo(fileid, dat_offset)); |
151 |
< |
end; |
152 |
< |
|
153 |
< |
|
154 |
< |
|
155 |
< |
|
156 |
< |
function IntToBin(Value: Byte): String; |
157 |
< |
var |
158 |
< |
i: Byte; |
159 |
< |
begin |
160 |
< |
Result := ''; |
161 |
< |
for i := 7 downto 0 do |
162 |
< |
begin |
163 |
< |
Result := Result + IntToStr((Value shr i) and $01); |
164 |
< |
end; |
150 |
> |
LoadRaw(ConManager.Connection[ConID].GetRawInfo(fileid, datoffset)); |
151 |
|
end; |
152 |
|
|
153 |
|
|
155 |
|
|
156 |
|
function TForm_RawEdit.GetValue(datatype: Word; offset: LongWord): String; |
157 |
|
var |
158 |
< |
Data: Tdata; |
158 |
> |
Data: TByteData; |
159 |
|
i: Word; |
160 |
|
floatformat: TFormatSettings; |
161 |
|
begin |
216 |
|
i: Byte; |
217 |
|
begin |
218 |
|
for i := 1 to value_viewer.RowCount - 1 do |
233 |
– |
begin |
219 |
|
value_viewer.Cells[1, i] := ''; |
235 |
– |
end; |
220 |
|
end; |
221 |
|
|
222 |
|
|
225 |
|
procedure TForm_RawEdit.WriteValues; |
226 |
|
var |
227 |
|
i, j: Integer; |
228 |
< |
Data: Tdata; |
228 |
> |
Data: TByteData; |
229 |
|
str: String; |
230 |
|
Value: LongWord; |
231 |
|
floatformat: TFormatSettings; |
346 |
|
Self.OnNewFileSelected := Self.NewFile; |
347 |
|
|
348 |
|
exts := ''; |
349 |
< |
if Length(RawListHandlers) > 0 then |
349 |
> |
if Length(RawLists.RawListHandlers) > 0 then |
350 |
|
begin |
351 |
< |
for i := 0 to High(RawListHandlers) do |
351 |
> |
for i := 0 to High(RawLists.RawListHandlers) do |
352 |
|
if Length(exts) > 0 then |
353 |
< |
exts := exts + ',' + RawListHandlers[i].Ext |
353 |
> |
exts := exts + ',' + RawLists.RawListHandlers[i].Ext |
354 |
|
else |
355 |
< |
exts := RawListHandlers[i].Ext; |
355 |
> |
exts := RawLists.RawListHandlers[i].Ext; |
356 |
|
end; |
357 |
|
Self.AllowedExts := exts; |
358 |
|
|
387 |
|
function TForm_RawEdit.Save: Boolean; |
388 |
|
var |
389 |
|
mem: TMemoryStream; |
406 |
– |
Data: Tdata; |
390 |
|
i: LongWord; |
391 |
|
begin |
392 |
|
case MessageBox(Self.Handle, PChar('Save changes to .raw-part of file ' + |
393 |
< |
Connection.GetFileInfo(fileid).FileName + '?'), PChar('Data changed...'), |
393 |
> |
ConManager.Connection[ConID].GetFileInfo(fileid).Name + '?'), PChar('Data changed...'), |
394 |
|
MB_YESNOCANCEL) of |
395 |
|
idYes: |
396 |
|
begin |
397 |
|
mem := TMemoryStream.Create; |
398 |
|
hex.SaveToStream(mem); |
399 |
|
mem.Seek(0, soFromBeginning); |
400 |
< |
SetLength(Data, mem.Size); |
418 |
< |
mem.Read(Data[0], mem.Size); |
400 |
> |
ConManager.Connection[ConID].UpdateRawFile(fileid, datoffset, mem); |
401 |
|
mem.Free; |
420 |
– |
Connection.UpdateRawFile(fileid_opened, dat_offset_opened, |
421 |
– |
Length(Data), @Data[0]); |
402 |
|
hex.Modified := False; |
403 |
|
for i := 0 to hex.Datasize - 1 do |
404 |
|
hex.ByteChanged[i] := False; |
407 |
|
idNo: |
408 |
|
Result := True; |
409 |
|
idCancel: |
430 |
– |
begin |
410 |
|
Result := False; |
432 |
– |
end; |
411 |
|
end; |
412 |
|
end; |
413 |
|
|
417 |
|
procedure TForm_RawEdit.FormCloseQuery(Sender: TObject; var CanClose: Boolean); |
418 |
|
begin |
419 |
|
if hex.Modified then |
442 |
– |
begin |
420 |
|
if not Save then |
421 |
|
CanClose := False; |
445 |
– |
end; |
422 |
|
end; |
423 |
|
|
424 |
|
|
504 |
|
var |
505 |
|
fs: TFileStream; |
506 |
|
begin |
507 |
< |
saved.Filter := 'Files of matching extension (*.' + Connection.GetFileInfo( |
508 |
< |
fileid).Extension + ')|*.' + Connection.GetFileInfo(fileid).Extension + |
507 |
> |
saved.Filter := 'Files of matching extension (*.' + |
508 |
> |
ConManager.Connection[ConID].GetFileInfo(fileid).Extension + ')|*.' + |
509 |
> |
ConManager.Connection[ConID].GetFileInfo(fileid).Extension + |
510 |
|
'|All files|*.*'; |
511 |
< |
saved.DefaultExt := Connection.GetFileInfo(fileid).Extension; |
511 |
> |
saved.DefaultExt := ConManager.Connection[ConID].GetFileInfo(fileid).Extension; |
512 |
|
if saved.Execute then |
513 |
|
begin |
514 |
|
fs := TFileStream.Create(saved.FileName, fmCreate); |
524 |
|
var |
525 |
|
// Data: Tdata; |
526 |
|
fs: TFileStream; |
527 |
+ |
data: TByteData; |
528 |
+ |
i: Integer; |
529 |
+ |
rawinfo: TRawDataInfo; |
530 |
|
begin |
531 |
< |
opend.Filter := 'Files of matching extension (*.' + Connection.GetFileInfo( |
532 |
< |
fileid).Extension + ')|*.' + Connection.GetFileInfo(fileid).Extension + |
531 |
> |
opend.Filter := 'Files of matching extension (*.' + |
532 |
> |
ConManager.Connection[ConID].GetFileInfo(fileid).Extension + ')|*.' + |
533 |
> |
ConManager.Connection[ConID].GetFileInfo(fileid).Extension + |
534 |
|
'|All files|*.*'; |
535 |
|
if opend.Execute then |
536 |
|
begin |
537 |
|
fs := TFileStream.Create(opend.FileName, fmOpenRead); |
538 |
|
if fs.Size <> hex.DataSize then |
539 |
|
begin |
540 |
< |
ShowMessage('Can''t import ' + ExtractFilename(opend.FileName) + |
541 |
< |
', file has to have same size as file in .dat.' + CrLf + |
542 |
< |
'Size of file in .dat: ' + FormatFileSize(hex.datasize) + CrLf + |
543 |
< |
'Size of chosen file: ' + FormatFileSize(fs.Size)); |
544 |
< |
end |
545 |
< |
else |
546 |
< |
begin |
547 |
< |
hex.LoadFromStream(fs); |
548 |
< |
hex.Modified := True; |
549 |
< |
end; |
540 |
> |
if (not (CR_ResizeRaw in ConManager.Connection[ConID].ChangeRights)) and (not (CR_AppendRaw in ConManager.Connection[ConnectionID].ChangeRights)) then |
541 |
> |
begin |
542 |
> |
ShowMessage('Can''t import ' + ExtractFilename(importd.FileName) + |
543 |
> |
', file has to have same size as file in .raw with this backend.' + CrLf + |
544 |
> |
'Size of file in .raw: ' + FormatFileSize(hex.DataSize) + CrLf + |
545 |
> |
'Size of chosen file: ' + FormatFileSize(fs.Size)); |
546 |
> |
Exit; |
547 |
> |
end else begin |
548 |
> |
if MessageBox(Self.Handle, |
549 |
> |
PChar('File has different size from the file in the .raw.' + CrLf + |
550 |
> |
'Size of file in .dat: ' + FormatFileSize(hex.DataSize) + CrLf + |
551 |
> |
'Size of chosen file: ' + FormatFileSize(fs.Size) + CrLf + |
552 |
> |
'Replace anyway?' + CrLf + |
553 |
> |
'WARNING: This only replaces the raw-data. It doesn''t' + CrLf + |
554 |
> |
'do the according changes in the .dat. Oni probably' + CrLf + |
555 |
> |
'won''t be able to use the data correctly!'), PChar('Different size'), MB_YESNO + MB_ICONWARNING) = ID_NO then |
556 |
> |
begin |
557 |
> |
Exit; |
558 |
> |
end; |
559 |
> |
end; |
560 |
> |
rawinfo := ConManager.Connection[ConID].GetRawInfo(fileid, datoffset); |
561 |
> |
if CR_ResizeRaw in ConManager.Connection[ConID].ChangeRights then |
562 |
> |
ConManager.Connection[ConID].UpdateRawFile(fileid, datoffset, fs) |
563 |
> |
else if CR_AppendRaw in ConManager.Connection[ConID].ChangeRights then |
564 |
> |
i := ConManager.Connection[ConID].AppendRawFile(rawinfo.LocSep, fs); |
565 |
> |
ConManager.Connection[ConID].UpdateDatFilePart(fileid, datoffset, 4, @i); |
566 |
> |
end else begin |
567 |
> |
ConManager.Connection[ConID].UpdateRawFile(fileid, datoffset, fs); |
568 |
> |
end; |
569 |
> |
fs.Seek(0, soFromBeginning); |
570 |
> |
hex.LoadFromStream(fs); |
571 |
> |
hex.Modified := False; |
572 |
> |
for i := 0 to hex.Datasize - 1 do |
573 |
> |
hex.ByteChanged[i] := False; |
574 |
|
fs.Free; |
575 |
|
end; |
576 |
|
end; |
695 |
|
|
696 |
|
procedure TForm_RawEdit.SetNewValue(datatype: Word; offset: LongWord; Value: String); |
697 |
|
var |
698 |
< |
Data: Tdata; |
698 |
> |
Data: TByteData; |
699 |
|
value_int: LongWord; |
700 |
|
value_float: Single; |
701 |
|
i: Word; |