Subversion Repositories decoder

Rev

Blame | Last modification | View Log | RSS feed

{ Allgemeine Funktion zum Verarbeiten der Kommandozeilenparameter }
// ursprünglich von OneInst
procedure TMainForm.ProcessCommandline(lpData: Pointer);
var
  arbeitsverzeichnis: string;
  i: integer;
begin
  ParamZeile := ParamBlobToStr(lpData);

  // Anwendung dient nur als Hilfeaufruf

  if GebeLinieaus(ParamZeile, 1) = '/?' then
  begin
    m_help.Click;
    close;
    exit;
  end;

  // Anwendung dient nur als Cleaner

  if paramzeile_firstposition('/clean') <> -1 then
  begin
    // 10 Sekunden warten, bis ggf. die temporären Dateien freigegeben wurden
    if (lowercase(GebeLinieaus(ParamZeile, 2)) = '/silent') then Schlafen(10000);
    DeleteTempFiles;
    close;
    exit;
  end;

  // Verarbeitung der Befehlszeile

  if (ZaehleLinien(ParamZeile) > 1) then
  begin
    if (paramzeile_firstposition('/c') <> -1) and (paramzeile_firstposition('/x') <> -1) then
    begin
      if ZaehleLinien(ParamZeile) <> 4 then
      begin
        errorlevel := 3; // Falsche Syntax
      end
      else if not fileexists(GebeLinieaus(ParamZeile, 1)) and not directoryexists(GebeLinieaus(ParamZeile, 1)) then
      begin
        errorlevel := 9; // Datei oder Ordner nicht gefunden.
      end
      else
      begin
        if fileexists(GebeLinieaus(ParamZeile, 1)) then
        begin
          GetDir(0, arbeitsverzeichnis);
          ausgabegesetzt := arbeitsverzeichnis+'\'+GebeLinieaus(ParamZeile, 4);
          openfile(GebeLinieaus(ParamZeile, 1), '', true);

          if mode = tcDecrypted then
          begin
            // Datei verschlüsseln
            if lowercase(extractfileext(ausgabegesetzt)) <> lowercase(ExtDC4) then
              ausgabegesetzt := ausgabegesetzt + ExtDC4; // Ausgabe muss .dc4 haben!
            edt_passwort.Text := GebeLinieaus(ParamZeile, 3);
            edt_passwort2.Text := GebeLinieaus(ParamZeile, 3);
            try
              m_encrypt.Click;
            except
              // Falls ein Fehler auftreten sollte, soll der Ablauf hier nicht stehen
              // bleiben, deswegen der Try-Except-Block.
              errorlevel := 2; // Fehler bei Ver/Entschlüsselung
            end;
          end;

          if mode = tcEncrypted then
          begin
            // Datei oder Ordner entschlüsseln
            if lowercase(extractfileext(ausgabegesetzt)) = lowercase(ExtDC4) then
              ausgabegesetzt := copy(ausgabegesetzt, 0, length(ausgabegesetzt)-length(ExtDC4)); // Ausgabe darf nicht .dc4 haben!
            edt_passwort.Text := GebeLinieaus(ParamZeile, 3);
            try
              m_decrypt.Click;
            except
              // Falls ein Fehler auftreten sollte, soll der Ablauf hier nicht stehen
              // bleiben, deswegen der Try-Except-Block.
              errorlevel := 2; // Fehler bei Ver/Entschlüsselung
            end;
          end;
        end
        else if directoryexists(GebeLinieaus(ParamZeile, 1)) then
        begin
          // Ordner verschlüsseln
          openfolder(GebeLinieaus(ParamZeile, 1));
          edt_passwort.Text := GebeLinieaus(ParamZeile, 3);
          edt_passwort2.Text := GebeLinieaus(ParamZeile, 3);
          ausgabegesetzt := GebeLinieaus(ParamZeile, 4);
          if lowercase(extractfileext(ausgabegesetzt)) <> lowercase(ExtDC4) then
          ausgabegesetzt := ausgabegesetzt + ExtDC4; // Ausgabe muss .dc4 haben!
          try
            m_encrypt.Click;
          except
            // Falls ein Fehler auftreten sollte, soll der Ablauf hier nicht stehen
            // bleiben, deswegen der Try-Except-Block.
            errorlevel := 2; // Fehler bei Ver/Entschlüsselung
          end;
        end;
      end;
      close;
    end
    else if (lowercase(GebeLinieaus(ParamZeile, 2)) = '/e') then
    begin
      if (ZaehleLinien(ParamZeile) = 2) or ((ZaehleLinien(ParamZeile) = 3) and (GebeLinieaus(ParamZeile, 3) = '/notsilent')) then
      begin
        if directoryexists(GebeLinieaus(ParamZeile, 1)) then
        begin
          dc_deletedir(GebeLinieaus(ParamZeile, 1));
          if directoryexists(GebeLinieaus(ParamZeile, 1)) then
          begin
            if (GebeLinieaus(ParamZeile, 3) = '/notsilent') then
              Application.MessageBox(pchar(GetLangEntry('delerror')), pchar(GetLangEntry('error')), MB_OK + MB_ICONERROR)
            else
              errorlevel := 8; // Datei oder Ordner konnte nicht oder nur teilweise entfernt werden.
          end
          else if (GebeLinieaus(ParamZeile, 3) = '/notsilent') then
            Application.MessageBox(pchar(GetLangEntry('delok')), pchar(GetLangEntry('information')), MB_OK + MB_ICONINFORMATION)
        end
        else if fileexists(GebeLinieaus(ParamZeile, 1)) then
        begin
          dc_deletefile(GebeLinieaus(ParamZeile, 1));
          if fileexists(GebeLinieaus(ParamZeile, 1)) then
          begin
            if (GebeLinieaus(ParamZeile, 3) = '/notsilent') then
              Application.MessageBox(pchar(GetLangEntry('delerror')), pchar(GetLangEntry('error')), MB_OK + MB_ICONERROR)
            else
              errorlevel := 8; // Datei oder Ordner konnte nicht oder nur teilweise entfernt werden.
          end
          else if (GebeLinieaus(ParamZeile, 3) = '/notsilent') then
            Application.MessageBox(pchar(GetLangEntry('delok')), pchar(GetLangEntry('information')), MB_OK + MB_ICONINFORMATION)
        end
        else
        begin
          if (GebeLinieaus(ParamZeile, 3) = '/notsilent') then
            Application.MessageBox(pchar(GetLangEntry('fileorfoldernotfound')), pchar(GetLangEntry('error')), MB_OK + MB_ICONERROR)
          else
            errorlevel := 9; // Datei oder Ordner nicht gefunden.
        end;
      end
      else
      begin
        errorlevel := 3; // Falsche Syntax
      end;
      close;
    end
    else
    begin
      show;

      steuerelementesperren(true);
      zeige_wartenform(true);
      try

      try
        kazip.close;
      except

      end;

      if fileexists(GetTempDir+TempPre+mainform.temp_unique_number+TempExtZip) then deletefile(GetTempDir+TempPre+mainform.temp_unique_number+TempExtZip);
      CreateZipFile(GetTempDir+TempPre+mainform.temp_unique_number+TempExtZip);
      for i := 1 to ZaehleLinien(ParamZeile) do
      begin
        addtozip(GebeLinieaus(ParamZeile, i), GetTempDir+TempPre+mainform.temp_unique_number+TempExtZip)
      end;

      openfile(GetTempDir+TempPre+mainform.temp_unique_number+TempExtZip, GetLangEntry('dateiensammlung'), true);

      finally
      steuerelementesperren(false);
      zeige_wartenform(false);
      end;

      application.Restore;
      application.BringToFront;
    end;
  end
  else
  begin
    show;

    if fileexists(GebeLinieaus(ParamZeile, 1)) then
    begin
      steuerelementesperren(true);
      zeige_wartenform(true);
      try
        openfile(GebeLinieaus(ParamZeile, 1), '', false);
      finally
        steuerelementesperren(false);
        zeige_wartenform(false);
      end;
    end
    else if directoryexists(GebeLinieaus(ParamZeile, 1)) then
    begin
      steuerelementesperren(true);
      zeige_wartenform(true);
      try
        openfolder(GebeLinieaus(ParamZeile, 1));
      finally
        steuerelementesperren(false);
        zeige_wartenform(false);
      end;
    end
    else
    begin
      application.Restore;
      application.BringToFront;
    end;

  end;

end;