{ Командная строка программы LZFileTest. } {--------------------------------------------------------------------------- (c) Copyright Aleksandrov O.E., 2000 Molecular Physics department, USTU, Ekaterinsburg, K-2, 620002, RUSSIA phone 75-47-15 E-mail: aleks@dpt.ustu.ru (c) Copyright Александров О.Е., 2000 620002, Екатеринбург, К-2, УГТУ, Кафедра молекулярной физики тел. 75-47-15 E-mail: aleks@dpt.ustu.ru ----------------------------------------------------------------------------} UNIT FCmdLine; INTERFACE USES LZDic0, LZDic1, ComTypes; const cBufLengthMax=cMaxBufferLength; cBufLengthMin=1000; cBufLength=cBufLengthMax; cFNameIn='test.txt'; cFNameOut1='test._tx'; cFNameOut2='test.!tx'; procedure ShowHelp; type tAction=(aHelp, aCompress, aDecompress, aCompressAndDecompress); tProgramParameters=record FNameIn,FNameOut1,FNameOut2:string; Action:tAction; BufLength:word; DicSize:word; FragmentLength:word; iMax:word; end; procedure ParseCmdLine(var ProgParams:tProgramParameters); IMPLEMENTATION procedure ShowHelp; begin writeln; writeln('Использование программы:'); writeln(' ftest.exe команда [опции...]'); writeln(' Команды:'); writeln(' c - упаковать "файл0" в "файл1";'); writeln(' d - распаковать "файл0" в "файл1";'); writeln(' сd - упаковать "файл0" в "файл1", распаковать в "файл2"'); writeln(' и сравнить "файл0" с "файл2".'); writeln(' по умолчанию: "файл0"=',cFNameIn,', "файл1"=',cFNameOut1,', "файл2"=',cFNameOut2,'.'); writeln(' Опции:'); writeln(' /0:файл0 - имя для "файл0";'); writeln(' /1:файл1 - имя для "файл1";'); writeln(' /2:файл2 - имя для "файл2";'); writeln(' /b:NNNN - размер буфера файла NNNN [', cBufLengthMax, '] (', Pred(cBufLengthMin),'0 then begin writeln(' Разбор командной строки...'); if ParamStr(1)='c' then ProgParams.Action:=aCompress else if ParamStr(1)='d' then ProgParams.Action:=aDecompress else if ParamStr(1)='cd' then ProgParams.Action:=aCompressAndDecompress; for i:=2 to ParamCount do begin p:=ParamStr(i); if (not (fFile0 in Flags)) and (Copy(p,0,3)='/0:') then begin ProgParams.FNameIn:=Copy(p,4,$FF); Include(Flags,fFile0); end else if (not (fFile1 in Flags)) and (Copy(p,0,3)='/1:') then begin ProgParams.FNameOut1:=Copy(p,4,$FF); Include(Flags,fFile1); end else if (not (fFile2 in Flags)) and (Copy(p,0,3)='/2:') then begin ProgParams.FNameOut2:=Copy(p,4,$FF); Include(Flags,fFile2); end else if (not (fBuffer in Flags)) and (Copy(p,0,3)='/b:') then begin Include(Flags,fBuffer); Val(Copy(p,4,$FF),n,e); if e=0 then begin if NcBufLengthMax then begin writeln(^G' буфер слишком велик: ', n,', использую максимальный: ',cBufLengthMax); n:=cBufLengthMax; end; ProgParams.BufLength:=n; writeln(' использую буфер, байт: ', n); end else begin writeln(' !неправильное число:', ParamStr(i)); ProgParams.Action:=aHelp end; end else if (not (fDicSize in Flags)) and (Copy(p,0,3)='/l:') then begin Include(Flags,fDicSize); Val(Copy(p,4,$FF),n,e); if e=0 then begin if NcSizeInNodesMax then begin writeln(^G' словарь слишком велик: ', n,', использую максимальный: ',cSizeInNodesMax); n:=cSizeInNodesMax; end; ProgParams.DicSize:=n; writeln(' использую словарь, символов: ', n); end else begin writeln(' !неправильное число:', ParamStr(i)); ProgParams.Action:=aHelp end; end else if (not (fFragLen in Flags)) and (Copy(p,0,3)='/z:') then begin Include(Flags,fFragLen); Val(Copy(p,4,$FF),n,e); if e=0 then begin if NcSizeInNodesMax then begin writeln(^G' длина фрагмента слишком велика: ', n,', использую максимальную: ',cSizeInNodesMax); n:=cSizeInNodesMax; end; ProgParams.FragmentLength:=n; writeln(' макс.длина фрагмента, символов: ', n); end else begin writeln(' !неправильное число:', ParamStr(i)); ProgParams.Action:=aHelp end; end else if (not (fRepeat in Flags)) and (Copy(p,0,3)='/r:') then begin Include(Flags,fRepeat); Val(Copy(p,4,$FF),n,e); if e=0 then begin if (0<=N) and (N<=100) then begin ProgParams.iMax:=n; end else begin writeln(' !недопустимое число:', ParamStr(i)); end; end else begin writeln(' !неправильное число:', ParamStr(i)); ProgParams.Action:=aHelp end; end else ProgParams.Action:=aHelp; end; writeln(' Завершен разбор командной строки.'); end; end; END.