Skip to content
Snippets Groups Projects
mgui.m 54.8 KiB
Newer Older
marwan's avatar
marwan committed
    %% Einlesen der gewnschten Spalten   
    % Zeilenvektor -> wie Spaltenvektor behandeln
    if Zeilen == 1
      [Spalten Zeilen] = size(VarValue); % Vertauschen 
    end

    % Wenn vorhanden, dann soll die alte Auswahl angezeigt werden
marwan's avatar
marwan committed
    oldcolumns = klick_list(2:end,end);
    oldcolumns = oldcolumns(oldcolumns(:) ~= 0); % Nur gewhltes zeigen
marwan's avatar
marwan committed
    oldcolumns = cellstr(num2str(oldcolumns')); % Umwandeln zu Textausgabe
    if isempty(oldcolumns)
      oldcolumns = cellstr(' ');
    end

    % Eingabe der Spalten
    set(0,'DefaultUIControlBackgroundColor',props.msgbox.BackgroundColor);
    answer = inputdlg('Use '','' or '':'' or '' '' for selecting the columns.','Multi-column vector',1,oldcolumns);
    set(0,props.root);

    % Wenn etwas eingegeben wurde
    if ~isempty(answer) 
      if strcmp(answer,':') | strcmp(answer,' '), answer='0'; end
marwan's avatar
marwan committed
      answer3 = str2double(char(answer)); % Umwandel in Zahlen
      answer3(answer3 > Spalten) = []; % Gewhltes <= Max. Spalten
marwan's avatar
marwan committed

      % Fehler sammeln -> Verarbeitung abbrechen
      if isempty(answer3)
        h=errordlg('Wrong input. Please use Matlab notation.','Multi-column vector');
marwan's avatar
marwan committed
        set(h,props.msgboxwin),h2=guihandles(h);set(h2.OKButton,props.msgbox)
        waitfor(h)
marwan's avatar
marwan committed
        return;
      end
      if size(answer3,1) ~= 1
        h=errordlg('The dimension of the input was multi-dimensional.','Multi-column vector');
marwan's avatar
marwan committed
        set(h,props.msgboxwin),h2=guihandles(h);set(h2.OKButton,props.msgbox)
        waitfor(h)
marwan's avatar
marwan committed
        return;
      end

      answer3 = answer3';
marwan's avatar
marwan committed
      klick_list(2:Zeilen,end) = 0; % Clean
      klick_list(2:(size(answer3,1)+1),end) = answer3;
marwan's avatar
marwan committed
    end

    %% Anzeigen der Parameter

    for i = 1:size(klick_list,2)
      klick_string = strcat(klick_string,var_list(klick_list(1,i)).name);
marwan's avatar
marwan committed
      selected = klick_list(klick_list(:,i) ~= 0,i);
marwan's avatar
marwan committed

      if size(selected,1) > 1
        klick_string = strcat(klick_string, '('); 

        for j = 2:size(selected,1)
          klick_string = strcat(klick_string,num2str(selected(j)));
          klick_string = strcat(klick_string, ','); 
        end
        klick_string(end) = []; 

        klick_string = strcat(klick_string, ')'); 
      end 
 
     klick_string = strcat(klick_string, ','); 
    end
    klick_string(end) = []; 

    % Speichern der Ausgabe
    set(hparm,'String',klick_string);
    set(hparm,'ToolTip',klick_string);


      % Speichern der Mhe
      set(hbcp,'UserData',klick_list);
      funktion(select).klicklist{nparm}=klick_list;
      funktion(select).klickstring{nparm}=klick_string;
      set(hfs,'UserData',funktion)


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  case ('load')

    %%% Ldt, so weit es geht, den Inhalt einer frei whlbaren Datei
    %%% unter einem frei whlbaren Namen im "base"

    %% Einlesen der gewnschten Datei
    % ffnen der Datei
    setptr(gcf,'watch')
    if isunix
       [Filename, Pathname]=uigetfile('*');
    else
       [Filename, Pathname]=uigetfile('*.*');
    end
    if Pathname == 0 & Filename == 0, setptr(gcf,'arrow'), return; end; % Wenn 'Cancel'

    fid = fopen([Pathname Filename],'r');
    if (fid ~= -1) % fopen liefert im Fehlerfall "-1"
      Matrix = []; % Variableninhalt
      %i = 0;
      Line = fgetl(fid); 
      while (Line ~=-1) %EOF
        if ~isempty(Line) & Line(1)~='%' %einlesen erster Parameter
          %i = i + 1;
          LineX = [];
          while ~isempty(Line)          
             [VarX,Line] = strtok(Line);
marwan's avatar
marwan committed
             VarX = str2double(VarX);
marwan's avatar
marwan committed
             if isempty(VarX) %unbekanntest wird als NaN gefiltert
               VarX = NaN;
             end;
             LineX = [LineX, VarX];
          end
          % Im Bedarfsfall die Matrix vergrssern
          if (size(LineX,2) > size(Matrix,2)) & (size(Matrix,1) ~=0)
marwan's avatar
marwan committed
            Matrix(:,size(Matrix,2)+1:size(LineX,2)) = NaN;
marwan's avatar
marwan committed
          end

          % Im Bedarfsfall die Eingelesene Zeile vergrssern
          if size(LineX,2) < size(Matrix,2)
marwan's avatar
marwan committed
            LineX(1,size(LineX,2)+1:size(Matrix,2)) = NaN;
marwan's avatar
marwan committed
          end
          % Zeile Anhngen
          Matrix = [Matrix; LineX];
        end
      Line = fgetl(fid); % Zeilenweises lesen
      end

      %% freien Variablennamen finden
      VarName_free = 0; % 0 = false // 1 = true

      while VarName_free == 0
        VarName_free = 1;

        % Variablennamen bestimmen
        set(0,'DefaultUIControlBackgroundColor',props.msgbox.BackgroundColor);
        VarName = inputdlg(['File ',Filename,' successfully read! Rows: ' num2str(size(Matrix,1)) ' Columns: ' num2str(size(Matrix,2)),char(10),'Choose a variable name:'],'New data');
        set(0,props.root);
marwan's avatar
marwan committed
        if isempty(VarName), break; end; % Wenn 'Cancel'
marwan's avatar
marwan committed

        % einlesen aller vorhandenen VariablenNamen und ihre Feldgrsse
        lokal_ws = evalin('base','whos');
   
        if length(lokal_ws) > 0
          for i=1:length(lokal_ws) % Alle Variablen Durchtesten
            if strcmp(lokal_ws(i).name,char(VarName))
              VarName_free = 0; % Variablenname existiert schon
              h = errordlg('Variable name already exists.','New data');
marwan's avatar
marwan committed
              set(h,props.msgboxwin),h2=guihandles(h);set(h2.OKButton,props.msgbox)
marwan's avatar
marwan committed
              waitfor(h); % wichtig! -> sonst kommt es zum Konflikt mit dem inputdialog
            end
          end 
        end
      end % while VarName_free
      if isempty(VarName), return; end; % Erster Sprung erfolgt nur aus der Whileschleife

      %% Speichern der Eingelesenen Werte
      assignin('base',char(VarName),Matrix);

      lokal_ws_all = evalin('base','whos');

      if length(lokal_ws_all) > 0
        j = 1;
        for i=1:length(lokal_ws_all)
          if strcmp(lokal_ws_all(i).class,'double') | strcmp(lokal_ws_all(i).class,'single') | strcmp(lokal_ws_all(i).class,'int8') | strcmp(lokal_ws_all(i).class,'uint8') | strcmp(lokal_ws_all(i).class,'int16') | strcmp(lokal_ws_all(i).class,'uint16') | strcmp(lokal_ws_all(i).class,'int32') | strcmp(lokal_ws_all(i).class,'uint32')
            Ausgabe(j,1) = cellstr([lokal_ws_all(i).name, ' [', num2str(lokal_ws_all(i).size(1)),'x',num2str(lokal_ws_all(i).size(2)), ']' ]);
            lokal_ws(j) = lokal_ws_all(i);
            j = j+1;
          end
        end 
      % Der Workspace ist leer 
      else
        h=errordlg('No numeric variables in the workspace.','Scan workspace');
marwan's avatar
marwan committed
        set(h,props.msgboxwin),h2=guihandles(h);set(h2.OKButton,props.msgbox)
marwan's avatar
marwan committed
        set(h,'Tag','helpdlgbox','HandleVisibility','On');
        Ausgabe(1,1) = cellstr('Empty');
        lokal_ws(1).name = [];
      end

      for i=1:4;
        hlbox=findobj('Tag',['listbox_parm',num2str(i)]);
marwan's avatar
marwan committed
        set(hlbox,'String',Ausgabe);
marwan's avatar
marwan committed
        set(hlbox,'UserData',lokal_ws);
      end
      
    % Datei konnte nicht geffnet werden.
    else
      h=errordlg('File not found.','IO process');  
      set(h,props.msgboxwin),h2=guihandles(h);set(h2.OKButton,props.msgbox)
      waitfor(h)
    end
    fclose(fid); % schliesen der Datei
    set(findobj('Tag','apply'),'Enable','On');
    setptr(gcf,'arrow')
    
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  case ('save')

    %%% Speichert die gewhlten Variablen und Spalten in einer frei whlbaren Datei
    %%% Der zu speichernde Inhalt liegt "nur" im ersten Parameter

    %% Bestimmen des Speicherortes
    setptr(gcf,'watch')
    [Filename, Pathname]=uiputfile('*.*');
    if Pathname == 0 & Filename == 0, setptr(gcf,'arrow'), return; end; % Wenn 'Cancel'

    %% Init
    temp=funktion(select).klicklist;
    if ~isempty(temp), 
       klick_list=temp{1}; 
    else
       klick_list=[];
    end
marwan's avatar
marwan committed
    if isempty(klick_list), klick_list=get(findobj('Tag','button_close_parm1'),'UserData'); end
    var_list = get(findobj('Tag','listbox_parm1'),'UserData');
marwan's avatar
marwan committed
    Matrix = []; % Zu speichernder Inhalt

marwan's avatar
marwan committed
    if isempty(var_list(1).name), return; end; % Wenn keine Variable vorhanden
marwan's avatar
marwan committed

    %% Zu speichernde Variable zusammenstellen
    for i = 1:size(klick_list,2); 
      % Einlesen des Variablennamens und zuweisen seines Inhaltes
      VarName = var_list(klick_list(1,i)).name;

      try
        VarValue = evalin('base',VarName);
      catch
        h=warndlg(['Variable ' VarName ' could not be found and will be ignored henceforth.'],'Scan workspace'); 
marwan's avatar
marwan committed
        set(h,props.msgboxwin),h2=guihandles(h);set(h2.OKButton,props.msgbox)
marwan's avatar
marwan committed
        set(h,'Tag','helpdlgbox','HandleVisibility','On');
        continue;
      end

      % Zeilenvektor in Spaltenvektor transformieren 
      if (size(VarValue,1)) == 1
        VarValue = VarValue';
      end

      % Feststellen der gewnschten Reihen
marwan's avatar
marwan committed
      SelectRows = klick_list(klick_list(:,i) ~= 0,i);
marwan's avatar
marwan committed
      SelectRows(1,:) = []; % Lsche Kopf (Enthlt Verweis auf den Variablennamen)

      % Wenn Spalten gewhlt wurden, dann den Varibleninhalt darauf begrenzen
      if ~isempty(SelectRows)
         VarValue = VarValue(:,SelectRows);
      end

      % Unterschiedliche Lnge -> Auffllen mit "NaN"
      if (size(Matrix,1) ~= size(VarValue,1)) & (size(Matrix,1) ~= 0)
        % Matrix zu lang
        if (size(Matrix,1) > size(VarValue,1))  
           VarValue((size(VarValue,1)+1):size(Matrix,1),:) = NaN;
        % Spaltenvektor zu lang
        else
           Matrix((size(Matrix,1)+1):size(VarValue,1),:) = NaN;
        end
      end

      Matrix = [Matrix VarValue]; 
    end

    %% Speichern
marwan's avatar
marwan committed
    eval('SaveMatrix = Matrix;');
marwan's avatar
marwan committed
    save([Pathname Filename], 'SaveMatrix', '-ascii');
    setptr(gcf,'arrow')
    
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

  case('add_programme')

    setptr(gcf,'watch')
    prompt={'Name of the programme to be added:','Minimal number of parameters (e.g. 1):','Maximal number of parameters (max. 4):'};
    def={'','',''};
    set(0,'DefaultUIControlBackgroundColor',props.msgbox.BackgroundColor);
    answer = inputdlg(prompt,'Add a Matlab programme',1,def);
    set(0,props.root);
    if ~isempty(answer) 
       if isempty(which(answer{1})) & ~isempty(answer{1})
          h=errordlg(['Programme not found.',char(10),'Please ensure, that the programme is inside the Matlab search path.'],'Add a Matlab programme');
          set(h,props.msgboxwin),h2=guihandles(h);set(h2.OKButton,props.msgbox)
          waitfor(h)
          setptr(gcf,'arrow')
marwan's avatar
marwan committed
          return
marwan's avatar
marwan committed
       elseif isempty(answer{1})
          setptr(gcf,'arrow')
          return
       else
          if answer{2}=='', answer{2}='0'; end
          if answer{3}=='', answer{3}='0'; end
marwan's avatar
marwan committed
          if str2double(answer{3})>4, answer{3}='4'; 
marwan's avatar
marwan committed
             h=warndlg(['In this version, the number of parameters is',char(10),...
marwan's avatar
marwan committed
                        'limited to 4. Your input was set to this value.'],'Add a Matlab programme'); 
             set(h,props.msgboxwin),h2=guihandles(h);set(h2.OKButton,props.msgbox)
marwan's avatar
marwan committed
             set(h,'Tag','helpdlgbox','HandleVisibility','On');
             waitfor(h)
marwan's avatar
marwan committed
          end
          if str2double(answer{2})>4, answer{2}='4'; 
marwan's avatar
marwan committed
             h=warndlg(['In this version, the number of parameters is',char(10),...
marwan's avatar
marwan committed
                        'limited to 4. Your input was set to this value.'],'Add a Matlab programme'); 
             set(h,props.msgboxwin),h2=guihandles(h);set(h2.OKButton,props.msgbox)
marwan's avatar
marwan committed
             set(h,'Tag','helpdlgbox','HandleVisibility','On');
             waitfor(h)
marwan's avatar
marwan committed
          end
          if str2double(answer{2})>str2double(answer{3}), answer{2}=answer{3}; 
marwan's avatar
marwan committed
             h=warndlg(['The maximal number of parameters can not be smaller',char(10),...
marwan's avatar
marwan committed
                        'than the minimal number of parameters. The minimal',char(10),...
                        'number of parameters was set to ',char(answer{3}),'.'],'Add a Matlab programme'); 
             set(h,props.msgboxwin),h2=guihandles(h);set(h2.OKButton,props.msgbox)
marwan's avatar
marwan committed
             set(h,'Tag','helpdlgbox','HandleVisibility','On');
             waitfor(h)
marwan's avatar
marwan committed
          end
          flag=0;
          for i=1:length(funktion),
             if strcmpi(funktion(i).name,answer{1})
                h=errordlg('Programme already installed.','Add a Matlab programme');
marwan's avatar
marwan committed
                set(h,props.msgboxwin),h2=guihandles(h);set(h2.OKButton,props.msgbox)
                waitfor(h)
marwan's avatar
marwan committed
                flag=1;
                break
             end
          end
          if flag==0
            mguircfile=which('mgui.rc');
marwan's avatar
marwan committed
            fid=fopen(mguircfile,'a');
marwan's avatar
marwan committed
            if fid>1;
              fprintf(fid,'%s\n',[answer{1},' ',answer{2},' ',answer{3}]);
            else
                h=errordlg('Could not open the mgui.rc file.','Add a Matlab programme');
marwan's avatar
marwan committed
                set(h,props.msgboxwin),h2=guihandles(h);set(h2.OKButton,props.msgbox)
                waitfor(h)
marwan's avatar
marwan committed
            end
            fclose(fid);
marwan's avatar
marwan committed
            funktion(end+1).name = answer(1);
marwan's avatar
marwan committed
            funktion(end).min = str2double(answer{2});
            funktion(end).max = str2double(answer{3});
            funktion(end).akt = str2double(answer{2}); 
marwan's avatar
marwan committed
            funktion(end).klicklist{4}=[];
            funktion(end).klickstring{4}=[];
            set(hfs,'UserData',funktion,'String', [funktion.name]);
%            set(hfs,'Value',length(funktion));
%            mgui mod2;
            set(0,'DefaultUIControlBackgroundColor',props.msgbox.BackgroundColor);
            answer2=questdlg([upper(char(answer{1})),' was successfully installed and',char(10),... 
marwan's avatar
marwan committed
                'is now added to the function listbox.'],'Add a Matlab programme',...
                'OK','Show mgui.rc','OK'); 
marwan's avatar
marwan committed
            set(0,props.root);
marwan's avatar
marwan committed
            if strcmp(answer2,'Show mgui.rc')
marwan's avatar
marwan committed
               if isunix
                 editor='vi';
               else
                 editor='notepad';
               end
               builtinEd=0;
               
               if isempty(javachk('mwt', 'The MATLAB Editor'));
                 if com.mathworks.ide.editor.EditorOptions.getBuiltinEditor == 0,
                    editor = char(com.mathworks.ide.editor.EditorOptions.getOtherEditor);
                 else
                    com.mathworks.ide.editor.EditorApplication.openDocument(mguircfile);
                    builtinEd=1;
                 end;
               end
               
               if isunix & builtinEd==0
                  if strcmp(editor,'vi') == 1
                     editor = 'xterm -e vi';
                  end
                  eval(['!' editor ' "' mguircfile '" &'])
               elseif ~isunix & builtinEd==0
                 eval(['!"' editor '" "' mguircfile '" &'])
               end
marwan's avatar
marwan committed
                              
            end
          end
marwan's avatar
marwan committed
       end
    end 
    setptr(gcf,'arrow')
end

set(0,props.root);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function lokal_ws=check_workspace
    %% Aktualisieren der Variablen
    % Einlesen aller vorhandenen VariablenNamen und ihre Feldgrsse
    lokal_ws_all = evalin('base','whos');
    hMF = findobj('Tag','MainFrame');
    hfs = findobj('Tag','function_select');
    if ~(isempty(hMF)), props = get(hMF,'UserData'); else error('Properties not found.'), end
    select = get(hfs,'Value');
    funktion = get(hfs,'UserData');
    FN_Name = funktion(select).name;

    if length(lokal_ws_all) > 0
      j = 1;
      for i=1:length(lokal_ws_all)
        if strcmp(lokal_ws_all(i).class,'double') | strcmp(lokal_ws_all(i).class,'single') | strcmp(lokal_ws_all(i).class,'int8') | strcmp(lokal_ws_all(i).class,'uint8') | strcmp(lokal_ws_all(i).class,'int16') | strcmp(lokal_ws_all(i).class,'uint16') | strcmp(lokal_ws_all(i).class,'int32') | strcmp(lokal_ws_all(i).class,'uint32')
          Ausgabe(j,1) = cellstr([lokal_ws_all(i).name, ' [', num2str(lokal_ws_all(i).size(1)),'x',num2str(lokal_ws_all(i).size(2)), ']' ]);
          lokal_ws(j) = lokal_ws_all(i);
          j = j+1;
        end
      end 
    % Der Workspace ist leer 
    end
marwan's avatar
marwan committed
    if ~exist('lokal_ws','var') | isempty(lokal_ws)
marwan's avatar
marwan committed
      if ~strcmp(FN_Name,'load')
         h=errordlg('No numeric variables in the workspace.','Scan workspace');
marwan's avatar
marwan committed
         set(h,props.msgboxwin),h2=guihandles(h);set(h2.OKButton,props.msgbox)
         set(h,'Tag','helpdlgbox','HandleVisibility','On');
marwan's avatar
marwan committed
      end
      Ausgabe(1,1) = cellstr('Empty');
      lokal_ws(1).name = [];
    end
    neu_var={lokal_ws.name};

 for i=1:4;
   hparm = findobj('Tag',['button_parm' num2str(i)]);
   hlbox = findobj('Tag',['listbox_parm' num2str(i)]);
   for l=5:length(funktion),
      temp=funktion(l).klicklist;
marwan's avatar
marwan committed
      if ~isempty(temp), klick_list=temp{i}; else klick_list = []; end
marwan's avatar
marwan committed
      temp=get(hlbox,'UserData');
      if ~isempty(temp) & ~isempty(klick_list)
        old_var={temp.name};
        old_klicklist=klick_list(1,:);
        for k=1:length(old_klicklist)
marwan's avatar
marwan committed
          if length(old_klicklist)<k, klick_list(1,k)=NaN; break, end
          if length(old_var)<old_klicklist(k), klick_list(1,k)=NaN; break, end
marwan's avatar
marwan committed
          temp=find(strcmp(neu_var,old_var(old_klicklist(k))));
marwan's avatar
marwan committed
          if ~isempty(temp)
            klick_list(1,k)=temp;
marwan's avatar
marwan committed
          else
marwan's avatar
marwan committed
            klick_list(1,k)=NaN;
marwan's avatar
marwan committed
          end
        end
marwan's avatar
marwan committed
        klick_list(:,isnan(klick_list(1,:)))=[];
        klick_string=make_klick_string(klick_list,lokal_ws);
marwan's avatar
marwan committed
        funktion(l).klicklist{i}=klick_list;
        funktion(l).klickstring{i}=klick_string;
marwan's avatar
marwan committed
        if select==l,
marwan's avatar
marwan committed
           set(hlbox,'Value',klick_list(1,:));
           set(hparm,'String',klick_string);
           set(hparm,'ToolTip',klick_string);
marwan's avatar
marwan committed
         end
marwan's avatar
marwan committed
      end
   end
   set(hfs,'UserData',funktion)
marwan's avatar
marwan committed
   set(hlbox,'String',Ausgabe,'UserData',lokal_ws);
marwan's avatar
marwan committed
 end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

marwan's avatar
marwan committed
function klick_string=make_klick_string(klick_list,var_list)
marwan's avatar
marwan committed

    klick_string='';

    if ~isempty(klick_list)

      for i = 1:size(klick_list,2)
        klick_string = strcat(klick_string,var_list(klick_list(1,i)).name);
marwan's avatar
marwan committed
        selected = klick_list(klick_list(:,i) ~= 0,i);
marwan's avatar
marwan committed

        if size(selected,1) > 1 % Wenn Einzelwerte gefunden wurden
          klick_string = strcat(klick_string, '('); 

          for j = 2:size(selected,1)
            klick_string = strcat(klick_string,num2str(selected(j)));
            klick_string = strcat(klick_string, ','); 
          end
          klick_string(end) = []; 

          klick_string = strcat(klick_string, ')'); 
        end 
 
        klick_string = strcat(klick_string, ','); 
      end
      klick_string(end) = []; 

    end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function check_apply

hfs    = findobj('Tag','function_select');
select = get(hfs,'Value');
funktion = get(hfs,'UserData');

    %% Alle "Klick_listen" durchsuchen, ob "Apply" ausgefhrt werden darf
    FN_Akt   = funktion(select).akt;

    trigger = 0;
    % Alle "Klick_list"en durchsuchen
    for i = 1 : FN_Akt
      hbcp = findobj('Tag',['button_close_parm' num2str(i)]);
      temp=funktion(select).klicklist;
marwan's avatar
marwan committed
      if ~isempty(temp), klick_list=temp{i}; else klick_list=[]; end
marwan's avatar
marwan committed
      if isempty(klick_list), klick_list=get(hbcp,'UserData'); end
      if isempty(klick_list)
        trigger = 1;
      end
    end
    % Wenn mindestens eine leere dabei, dann die Ausfhrung verhindern
    if trigger
      set(findobj('Tag','apply'),'Enable','off');
    else
      set(findobj('Tag','apply'),'Enable','on');
    end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ENDE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%