< -->
Program DSTIMGConv;
{$A+,B-,D-,E-,F-,G+,I+,L+,N+,O-,P-,Q-,R-,S+,T-,V+,X+,Y+}
Uses DOS;
const
DSz = 1474560;
TrSz = 512*18;
var
Track0, Track1 : array[0..512*18-1] of Byte;
FNMask, FN_Sr, FN_Dt : String;
Dirst: DirStr;
Namest: NameStr;
Extst: ExtStr;
fSrc, fDest : file;
Srch : SearchRec;
Srch1 : SearchRec;
CountFiles : Word;
NoConv : Word;
Conv : Word;
i : Word;
IOR : Integer;
iTr0s, iTr1s, iTr0d, iTr1d : LongInt;
{C:\PROGRA~2\BP70\TMP\denl.dst}
{C:\PROGRA~2\BP70\TMP\rtk.img}
Function UpString(Sra : String) : String;
var
i : Byte;
Sr : String;
begin
Sr := Sra;
for i := 1 to Length(Sr) do
Sr[i] := UpCase(Sr[i]);
UpString := Sr
end;
Procedure ConvToIMG;
begin
FN_Dt := Copy(UpString(FN_Sr), 1, Pos('.DST', FN_Sr))+'IMG';
FindFirst(Dirst+FN_Dt, AnyFile, Srch1);
if Srch1.Name=FN_Dt then
begin
WriteLn('Файл ', FN_Dt, ' уже есть!');
inc(NoConv);
Exit;
end;
Write(FN_Sr, ' -> ', FN_Dt, '... ');
Assign(fSrc, Dirst+FN_Sr);
Assign(fDest, Dirst+FN_Dt);
{$I-}
Reset(fSrc, 1);
{$I+}
IOR := IOResult;
if IOR<>0 then
begin
WriteLn('Ошибка чтения источника!(', IOR,')');
inc(NoConv);
Exit;
end;
if FileSize(fSrc)<>DSz then
begin
Close(fSrc);
WriteLn('Ошибочная длина конвертируемого файла!');
inc(NoConv);
Exit;
end;
{$I-}
ReWrite(fDest, 1);
{$I+}
IOR := IOResult;
if IOR<>0 then
begin
Close(fSrc);
WriteLn('Ошибка открытия файла-приёмника!(', IOR,')');
inc(NoConv);
Exit;
end;
iTr0s := 0;
iTr1s := DSz div 2;
iTr0d := 0;
iTr1d := TrSz;
for i := 0 to 79 do
begin
Seek(fSrc, iTr0s);
BlockRead(fSrc, Track0, TrSz);
Seek(fSrc, iTr1s);
BlockRead(fSrc, Track1, TrSz);
inc(iTr0s, TrSz);
inc(iTr1s, TrSz);
inc(iTr0d, TrSz);
inc(iTr1d, TrSz);
BlockWrite(fDest, Track0, 2*TrSz); {Пишем две дорожки}
end;
WriteLn('Сделано');
Close(fSrc);
Close(fDest);
inc(Conv);
end;
Procedure ConvToDST;
begin
FN_Dt := Copy(UpString(FN_Sr), 1, Pos('.IMG', FN_Sr))+'DST';
FindFirst(Dirst+FN_Dt, AnyFile, Srch1);
if Srch1.Name=FN_Dt then
begin
WriteLn('Файл ', FN_Dt, ' уже есть!');
inc(NoConv);
Exit;
end;
Write(FN_Sr, ' -> ', FN_Dt, '... ');
Assign(fSrc, Dirst+FN_Sr);
Assign(fDest, Dirst+FN_Dt);
{$I-}
Reset(fSrc, 1);
{$I+}
IOR := IOResult;
if IOR<>0 then
begin
WriteLn('Ошибка чтения источника!(', IOR,')');
inc(NoConv);
Exit;
end;
if FileSize(fSrc)<>1474560 then
begin
Close(fSrc);
WriteLn('Ошибочная длина конвертируемого файла!');
inc(NoConv);
Exit;
end;
{$I-}
ReWrite(fDest, 1);
{$I+}
IOR := IOResult;
if IOR<>0 then
begin
Close(fSrc);
WriteLn('Ошибка открытия файла-приёмника!(', IOR,')');
inc(NoConv);
Exit;
end;
iTr0s := 0;
iTr1s := TrSz;
iTr0d := 0;
iTr1d := DSz div 2;
for i := 0 to 79 do
begin
Seek(fSrc, iTr0s);
BlockRead(fSrc, Track0, TrSz);
inc(iTr0s, 2*TrSz);
BlockWrite(fDest, Track0, TrSz);
end;
for i := 0 to 79 do
begin
Seek(fSrc, iTr1s);
BlockRead(fSrc, Track1, TrSz);
inc(iTr1s, 2*TrSz);
BlockWrite(fDest, Track1, TrSz);
end;
WriteLn('Сделано');
Close(fSrc);
Close(fDest);
inc(Conv);
end;
Procedure ConvertFiles;
begin
CountFiles := 0;
NoConv := 0;
Conv := 0;
FNMask := ParamStr(1);
FSplit(FNMask, Dirst, Namest, Extst);
FindFirst(FNMask, $27, Srch);
While DOSError = 0 do
begin
FN_Sr := Srch.Name;
FSplit(Dirst+FN_Sr, Dirst, Namest, Extst);
if UpString(Extst)='.DST' then ConvToIMG else
if UpString(Extst)='.IMG' then ConvToDST else
begin
WriteLn('Конвертируемый файл должен иметь расширения .dst или .img! : ', FN_Sr);
inc(NoConv);
end;
FindNext(Srch);
inc(CountFiles);
end;
WriteLn;
WriteLn('-----===== Итог =====-----');
WriteLn('Всего файлов: ', CountFiles);
WriteLn('Пропущено: ', NoConv);
WriteLn('Отконвертировано: ', Conv);
end;
begin
WriteLn('_____________________________________________________');
WriteLn('DST/IMG Convertor. V1.0. 18-19.10.2003');
WriteLn('Программа конвертирует форматы файлов образов дискет.');
WriteLn('DST <-> IMG (IMG - более быстрый в использовании)');
WriteLn(#9#9#9#9#9#9'Shyar');
if ParamCount<>0 then ConvertFiles else
WriteLn('Укажите в коммандной строке имя конвертируемого файла (с расширением .dst/.img)');
end.
Назад