From d622b6e7666d59c1be5210ad10dbda97e641688e Mon Sep 17 00:00:00 2001
From: Henry Luetcke <hluetcke@ethz.ch>
Date: Tue, 6 Jul 2021 16:03:43 +0200
Subject: [PATCH] update HTML doc with m2html

---
 OpenBis.m                                     |    2 +-
 html/OpenBis.html                             | 1155 -----------------
 html/alpha.png                                |  Bin 0 -> 273 bytes
 html/c++.png                                  |  Bin 0 -> 327 bytes
 html/c.png                                    |  Bin 0 -> 252 bytes
 html/demoicon.gif                             |  Bin 0 -> 214 bytes
 html/df_to_table.html                         |   92 --
 html/down.png                                 |  Bin 0 -> 133 bytes
 html/doxysearch.php                           |  329 +++++
 html/fortran.png                              |  Bin 0 -> 265 bytes
 html/hp.png                                   |  Bin 0 -> 255 bytes
 html/index.html                               |   28 +
 html/left.png                                 |  Bin 0 -> 136 bytes
 html/linux.png                                |  Bin 0 -> 272 bytes
 html/m2html.css                               |   90 ++
 html/matlab-openbis/OpenBis.html              |  633 +++++++++
 html/matlab-openbis/df_to_table.html          |   58 +
 html/matlab-openbis/index.html                |   31 +
 html/matlab-openbis/obi_test.html             |  116 ++
 html/matlab-openbis/passcode.html             |  132 ++
 html/matlab-openbis/passwordEntryDialog.html  |  540 ++++++++
 .../user_url_pw_input_dialog.html             |  143 ++
 html/matlab-openbis/user_url_pw_inputdlg.html |   64 +
 html/matlabicon.gif                           |  Bin 0 -> 574 bytes
 html/mex.png                                  |  Bin 0 -> 242 bytes
 html/passwordEntryDialog.html                 |  826 ------------
 html/pcode.png                                |  Bin 0 -> 212 bytes
 html/right.png                                |  Bin 0 -> 136 bytes
 html/sgi.png                                  |  Bin 0 -> 263 bytes
 html/simulinkicon.gif                         |  Bin 0 -> 977 bytes
 html/solaris.png                              |  Bin 0 -> 286 bytes
 html/up.png                                   |  Bin 0 -> 162 bytes
 html/user_url_pw_inputdlg.html                |  102 --
 html/windows.png                              |  Bin 0 -> 286 bytes
 34 files changed, 2165 insertions(+), 2176 deletions(-)
 delete mode 100644 html/OpenBis.html
 create mode 100644 html/alpha.png
 create mode 100644 html/c++.png
 create mode 100644 html/c.png
 create mode 100644 html/demoicon.gif
 delete mode 100644 html/df_to_table.html
 create mode 100644 html/down.png
 create mode 100644 html/doxysearch.php
 create mode 100644 html/fortran.png
 create mode 100644 html/hp.png
 create mode 100644 html/index.html
 create mode 100644 html/left.png
 create mode 100644 html/linux.png
 create mode 100644 html/m2html.css
 create mode 100644 html/matlab-openbis/OpenBis.html
 create mode 100644 html/matlab-openbis/df_to_table.html
 create mode 100644 html/matlab-openbis/index.html
 create mode 100644 html/matlab-openbis/obi_test.html
 create mode 100644 html/matlab-openbis/passcode.html
 create mode 100644 html/matlab-openbis/passwordEntryDialog.html
 create mode 100644 html/matlab-openbis/user_url_pw_input_dialog.html
 create mode 100644 html/matlab-openbis/user_url_pw_inputdlg.html
 create mode 100644 html/matlabicon.gif
 create mode 100644 html/mex.png
 delete mode 100644 html/passwordEntryDialog.html
 create mode 100644 html/pcode.png
 create mode 100644 html/right.png
 create mode 100644 html/sgi.png
 create mode 100644 html/simulinkicon.gif
 create mode 100644 html/solaris.png
 create mode 100644 html/up.png
 delete mode 100644 html/user_url_pw_inputdlg.html
 create mode 100644 html/windows.png

diff --git a/OpenBis.m b/OpenBis.m
index c1c37e89f2c..5ba8f44e0dc 100644
--- a/OpenBis.m
+++ b/OpenBis.m
@@ -320,7 +320,7 @@ classdef OpenBis
             % code ... new experiment code
             % project ... project for new experiment ('/SPACE/Project')
             % Usage:
-            % exp = obi.new_experiment('type', 'EXP1234', '/SPACE/Project')
+            % exp = obi.new_experiment('DEFAULT_EXPERIMENT', 'EXP1234', '/SPACE/Project')
             
             % determine type object
             t = obj.pybis.get_experiment_type(type);
diff --git a/html/OpenBis.html b/html/OpenBis.html
deleted file mode 100644
index 29a410ec83d..00000000000
--- a/html/OpenBis.html
+++ /dev/null
@@ -1,1155 +0,0 @@
-
-<!DOCTYPE html
-  PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head>
-      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-   <!--
-This HTML was auto-generated from MATLAB code.
-To make changes, update the MATLAB code and republish this document.
-      --><title>OpenBis</title><meta name="generator" content="MATLAB 9.4"><link rel="schema.DC" href="http://purl.org/dc/elements/1.1/"><meta name="DC.date" content="2019-03-21"><meta name="DC.source" content="OpenBis.m"><style type="text/css">
-html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td{margin:0;padding:0;border:0;outline:0;font-size:100%;vertical-align:baseline;background:transparent}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:'';content:none}:focus{outine:0}ins{text-decoration:none}del{text-decoration:line-through}table{border-collapse:collapse;border-spacing:0}
-
-html { min-height:100%; margin-bottom:1px; }
-html body { height:100%; margin:0px; font-family:Arial, Helvetica, sans-serif; font-size:10px; color:#000; line-height:140%; background:#fff none; overflow-y:scroll; }
-html body td { vertical-align:top; text-align:left; }
-
-h1 { padding:0px; margin:0px 0px 25px; font-family:Arial, Helvetica, sans-serif; font-size:1.5em; color:#d55000; line-height:100%; font-weight:normal; }
-h2 { padding:0px; margin:0px 0px 8px; font-family:Arial, Helvetica, sans-serif; font-size:1.2em; color:#000; font-weight:bold; line-height:140%; border-bottom:1px solid #d6d4d4; display:block; }
-h3 { padding:0px; margin:0px 0px 5px; font-family:Arial, Helvetica, sans-serif; font-size:1.1em; color:#000; font-weight:bold; line-height:140%; }
-
-a { color:#005fce; text-decoration:none; }
-a:hover { color:#005fce; text-decoration:underline; }
-a:visited { color:#004aa0; text-decoration:none; }
-
-p { padding:0px; margin:0px 0px 20px; }
-img { padding:0px; margin:0px 0px 20px; border:none; }
-p img, pre img, tt img, li img, h1 img, h2 img { margin-bottom:0px; } 
-
-ul { padding:0px; margin:0px 0px 20px 23px; list-style:square; }
-ul li { padding:0px; margin:0px 0px 7px 0px; }
-ul li ul { padding:5px 0px 0px; margin:0px 0px 7px 23px; }
-ul li ol li { list-style:decimal; }
-ol { padding:0px; margin:0px 0px 20px 0px; list-style:decimal; }
-ol li { padding:0px; margin:0px 0px 7px 23px; list-style-type:decimal; }
-ol li ol { padding:5px 0px 0px; margin:0px 0px 7px 0px; }
-ol li ol li { list-style-type:lower-alpha; }
-ol li ul { padding-top:7px; }
-ol li ul li { list-style:square; }
-
-.content { font-size:1.2em; line-height:140%; padding: 20px; }
-
-pre, code { font-size:12px; }
-tt { font-size: 1.2em; }
-pre { margin:0px 0px 20px; }
-pre.codeinput { padding:10px; border:1px solid #d3d3d3; background:#f7f7f7; }
-pre.codeoutput { padding:10px 11px; margin:0px 0px 20px; color:#4c4c4c; }
-pre.error { color:red; }
-
-@media print { pre.codeinput, pre.codeoutput { word-wrap:break-word; width:100%; } }
-
-span.keyword { color:#0000FF }
-span.comment { color:#228B22 }
-span.string { color:#A020F0 }
-span.untermstring { color:#B20000 }
-span.syscmd { color:#B28C00 }
-
-.footer { width:auto; padding:10px 0px; margin:25px 0px 0px; border-top:1px dotted #878787; font-size:0.8em; line-height:140%; font-style:italic; color:#878787; text-align:left; float:none; }
-.footer p { margin:0px; }
-.footer a { color:#878787; }
-.footer a:hover { color:#878787; text-decoration:underline; }
-.footer a:visited { color:#878787; }
-
-table th { padding:7px 5px; text-align:left; vertical-align:middle; border: 1px solid #d6d4d4; font-weight:bold; }
-table td { padding:7px 5px; text-align:left; vertical-align:top; border:1px solid #d6d4d4; }
-
-
-
-
-
-  </style></head><body><div class="content"><h2>Contents</h2><div><ul><li><a href="#2">Constructor method</a></li><li><a href="#3">Masterdata methods</a></li><li><a href="#4">Space methods</a></li><li><a href="#5">Project methods</a></li><li><a href="#6">Experiment methods</a></li><li><a href="#7">Object methods</a></li><li><a href="#8">Dataset methods</a></li></ul></div><pre class="codeinput"><span class="keyword">classdef</span> OpenBis
-    <span class="comment">% OpenBis   High-level class for interacting with Python (pyBIS) Openbis objects</span>
-    <span class="comment">% This class creates a MATLAB OpenBis object that encapsulates the Python (pyBIS) Openbis object</span>
-    <span class="comment">% and provides methods for interacting with the Python (pyBIS) Openbis object.</span>
-    <span class="comment">%</span>
-    <span class="comment">% Usage:</span>
-    <span class="comment">% Construct the MATLAB OpenBis object like this:</span>
-    <span class="comment">% obi = OpenBis()</span>
-    <span class="comment">% This will ask for URL, user name and password to connect to openBIS server.</span>
-    <span class="comment">% These can also be provided as optional input arguments.</span>
-    <span class="comment">%</span>
-    <span class="comment">% Methods are generally called like this:</span>
-    <span class="comment">% spaces = obi.get_spaces()</span>
-    <span class="comment">% space = obi.get_space(code)</span>
-    <span class="comment">%</span>
-    <span class="comment">% Logout:</span>
-    <span class="comment">% obi.logout()</span>
-
-
-    <span class="keyword">properties</span>
-        pybis <span class="comment">% Python Openbis object</span>
-    <span class="keyword">end</span>
-
-
-    <span class="keyword">methods</span>
-</pre><h2 id="2">Constructor method</h2><pre class="codeinput">        <span class="keyword">function</span> obj = OpenBis(varargin)
-            <span class="comment">% OpenBis   Constructor method for class OpenBis</span>
-            <span class="comment">% Creates the Python Openbis object and logs into the server</span>
-            <span class="comment">% Optional positional input arguments:</span>
-            <span class="comment">% url ... URL of the openBIS server (incl. port)</span>
-            <span class="comment">% user ... user name for openBIS</span>
-            <span class="comment">% pw ... password for openBIS</span>
-            <span class="comment">% Usage:</span>
-            <span class="comment">% obi = OpenBis() --&gt; opens UI to enter URL, user name and password</span>
-            <span class="comment">% obi = OpenBis('server_url', 'user_name', 'user_password')</span>
-
-            <span class="keyword">if</span> nargin &gt; 0
-                url = varargin{1};
-                user = varargin{2};
-                pw = varargin{3};
-            <span class="keyword">else</span>
-                [url, user, pw] = user_url_pw_inputdlg;
-            <span class="keyword">end</span>
-
-            o = py.pybis.Openbis(url, pyargs(<span class="string">'verify_certificates'</span>, 0));
-            o.login(user, pw, pyargs(<span class="string">'save_token'</span>, 1));
-            obj.pybis = o;
-        <span class="keyword">end</span>
-
-        <span class="keyword">function</span> logout(obj)
-            <span class="comment">%logout</span>
-            <span class="comment">% Log out of openBIS.</span>
-            <span class="comment">% Usage:</span>
-            <span class="comment">% obi.logout()</span>
-            <span class="comment">%</span>
-            <span class="comment">% After logout, the session token is no longer valid.</span>
-
-            obj.pybis.logout();
-        <span class="keyword">end</span>
-
-        <span class="keyword">function</span> tf= is_session_active(obj)
-            <span class="comment">%is_session_active</span>
-            <span class="comment">% Check if the session token is still active. Returns true or false.</span>
-            <span class="comment">% Usage:</span>
-            <span class="comment">% true_false = obi.is_session_active()</span>
-
-            tf  = obj.pybis.is_session_active();
-        <span class="keyword">end</span>
-
-        <span class="keyword">function</span> token = token(obj)
-            <span class="comment">%token</span>
-            <span class="comment">% Returns the current session token.</span>
-            <span class="comment">% Usage:</span>
-            <span class="comment">% token = obi.token()</span>
-
-            token  = char(obj.pybis.token);
-        <span class="keyword">end</span>
-</pre><h2 id="3">Masterdata methods</h2><p>this section defines Matlab equivalents of the following pyBIS methods:   get_experiment_types   get_sample_types   get_material_types   get_dataset_types   get_terms   get_tags</p><pre class="codeinput">        <span class="keyword">function</span> experiment_types = get_experiment_types(obj)
-            <span class="comment">%get_experiment_types</span>
-            <span class="comment">% Return a table of all available experiment types.</span>
-            <span class="comment">% Usage:</span>
-            <span class="comment">% experiment_types = obi.get_experiment_types()</span>
-
-            experiment_types = obj.pybis.get_experiment_types();
-            experiment_types = df_to_table(experiment_types.df);
-        <span class="keyword">end</span>
-
-        <span class="keyword">function</span> sample_types = get_sample_types(obj)
-            <span class="comment">%get_sample_types</span>
-            <span class="comment">% Return table of all available sample types.</span>
-            <span class="comment">% Usage:</span>
-            <span class="comment">% sample_types = obi.get_sample_types()</span>
-
-            sample_types = obj.pybis.get_sample_types();
-            sample_types = df_to_table(sample_types.df);
-        <span class="keyword">end</span>
-
-        <span class="keyword">function</span> material_types = get_material_types(obj)
-            <span class="comment">%get_material_types</span>
-            <span class="comment">% Return table of all available material types.</span>
-            <span class="comment">% Usage:</span>
-            <span class="comment">% material_types = obi.get_material_types()</span>
-
-            material_types = obj.pybis.get_material_types();
-            material_types = df_to_table(material_types.df);
-        <span class="keyword">end</span>
-
-        <span class="keyword">function</span> dataset_types = get_dataset_types(obj)
-            <span class="comment">%get_dataset_types</span>
-            <span class="comment">% Return table of all available dataset types.</span>
-            <span class="comment">% Usage:</span>
-            <span class="comment">% dataset_types = obi.get_dataset_types()</span>
-
-            dataset_types = obj.pybis.get_dataset_types();
-            dataset_types = df_to_table(dataset_types.df);
-        <span class="keyword">end</span>
-
-        <span class="keyword">function</span> terms = get_terms(obj)
-            <span class="comment">%get_terms</span>
-            <span class="comment">% Return table of all available terms.</span>
-            <span class="comment">% Usage:</span>
-            <span class="comment">% terms = obi.get_terms()</span>
-
-            terms = obj.pybis.get_terms();
-            terms = df_to_table(terms.df);
-        <span class="keyword">end</span>
-
-        <span class="keyword">function</span> tags = get_tags(obj)
-            <span class="comment">%get_tags</span>
-            <span class="comment">% Return table of all available tags.</span>
-            <span class="comment">% Usage:</span>
-            <span class="comment">% tags = obi.get_tags()</span>
-
-            tags = obj.pybis.get_tags();
-            tags = df_to_table(tags.df);
-        <span class="keyword">end</span>
-</pre><h2 id="4">Space methods</h2><p>this section defines Matlab equivalents of the following pyBIS methods:   get_spaces   get_space   new_space   space.delete</p><pre class="codeinput">        <span class="keyword">function</span> spaces = get_spaces(obj)
-            <span class="comment">%get_spaces</span>
-            <span class="comment">% Return table of all available spaces.</span>
-            <span class="comment">% Usage:</span>
-            <span class="comment">% spaces = obi.get_spaces()</span>
-
-            spaces = obj.pybis.get_spaces();
-            spaces = df_to_table(spaces.df);
-        <span class="keyword">end</span>
-
-        <span class="keyword">function</span> space = get_space(obj, code)
-            <span class="comment">%get_space</span>
-            <span class="comment">% Fetch space with matching space code and return the space object.</span>
-            <span class="comment">% An error is raised if a space with the code is not found on the server.</span>
-            <span class="comment">% Required input arguments:</span>
-            <span class="comment">% code ... space code</span>
-            <span class="comment">% Usage:</span>
-            <span class="comment">% space = obi.get_space('code')</span>
-
-            space = obj.pybis.get_space(code);
-        <span class="keyword">end</span>
-
-        <span class="keyword">function</span> space = new_space(obj, code, description)
-            <span class="comment">%new_space</span>
-            <span class="comment">% Create a new space with code and description and return the space object</span>
-            <span class="comment">% Required input arguments:</span>
-            <span class="comment">% code ... Space code</span>
-            <span class="comment">% description ... Space description</span>
-            <span class="comment">% Usage:</span>
-            <span class="comment">% space = obi.new_space('code', 'description')</span>
-
-            space = obj.pybis.new_space(pyargs(<span class="string">'code'</span>,  code, <span class="keyword">...</span>
-                <span class="string">'description'</span>, description));
-            space.save;
-        <span class="keyword">end</span>
-
-        <span class="keyword">function</span> delete_space(obj, code, reason)
-            <span class="comment">%delete_space</span>
-            <span class="comment">% Delete space with code and provide a reason for deletion</span>
-            <span class="comment">% Required input arguments:</span>
-            <span class="comment">% code ... Space code</span>
-            <span class="comment">% reason ... reason for deletion</span>
-            <span class="comment">% Usage:</span>
-            <span class="comment">% obi.delete_space('code', 'reason')</span>
-
-            space = obj.pybis.get_space(code);
-            space.delete(reason);
-        <span class="keyword">end</span>
-</pre><h2 id="5">Project methods</h2><p>this section defines Matlab equivalents of the following pyBIS methods:   get_projects   get_project   new_project   project.delete</p><pre class="codeinput">        <span class="keyword">function</span> projects = get_projects(obj, space, code)
-            <span class="comment">%get_projects</span>
-            <span class="comment">% Return table of matching projects.</span>
-            <span class="comment">% Input arguments:</span>
-            <span class="comment">% space ... space to fetch projects from</span>
-            <span class="comment">% project ... fetch projects matching code</span>
-            <span class="comment">% Usage:</span>
-            <span class="comment">% projects = obi.get_projects('space', 'code')</span>
-
-            projects = obj.pybis.get_projects(pyargs(<span class="string">'space'</span>,  space, <span class="string">'code'</span>, code));
-            projects = df_to_table(projects.df);
-        <span class="keyword">end</span>
-
-        <span class="keyword">function</span> project = get_project(obj, id)
-            <span class="comment">%get_project</span>
-            <span class="comment">% Fetch project with matching project id and return the project object.</span>
-            <span class="comment">% An error is raised if a project with the id is not found on the server.</span>
-            <span class="comment">% Required input arguments:</span>
-            <span class="comment">% id ... project id</span>
-            <span class="comment">% Usage:</span>
-            <span class="comment">% project = obi.get_project('id')</span>
-
-            project = obj.pybis.get_project(id);
-        <span class="keyword">end</span>
-
-        <span class="keyword">function</span> project = new_project(obj, space, code, description)
-            <span class="comment">%new_project</span>
-            <span class="comment">% Create a new project in space with code and description</span>
-            <span class="comment">% Return the project object</span>
-            <span class="comment">% Input arguments</span>
-            <span class="comment">% space ... Space code</span>
-            <span class="comment">% code ... Project code / id</span>
-            <span class="comment">% description ... Project description</span>
-            <span class="comment">% Usage:</span>
-            <span class="comment">% project = obi.new_project('space', 'code', 'description')</span>
-
-            space = obj.pybis.get_space(space);
-            project = space.new_project(pyargs(<span class="string">'code'</span>, code,  <span class="string">'description'</span>, description));
-            project.save();
-        <span class="keyword">end</span>
-
-        <span class="keyword">function</span> delete_project(obj, code, reason)
-            <span class="comment">%delete_project</span>
-            <span class="comment">% Delete project with code and provide a reason for deletion</span>
-            <span class="comment">% Required input arguments:</span>
-            <span class="comment">% code ... Project code</span>
-            <span class="comment">% reason ... reason for deletion</span>
-            <span class="comment">% Usage:</span>
-            <span class="comment">% obi.delete_project('code', 'reason')</span>
-
-            project = obj.pybis.get_project(code);
-            project.delete(reason);
-        <span class="keyword">end</span>
-</pre><h2 id="6">Experiment methods</h2><p>this section defines the following Matlab methods:   get_experiments   get_experiment   new_experiment</p><pre class="codeinput">        <span class="keyword">function</span> experiments = get_experiments(obj, varargin)
-            <span class="comment">%get_experiments</span>
-            <span class="comment">% Return table of matching experiments.</span>
-            <span class="comment">% Optional input arguments:</span>
-            <span class="comment">% space ... space to fetch experiments from</span>
-            <span class="comment">% type ... fetch experiments of specific type</span>
-            <span class="comment">% project ... project to fetch experiments from</span>
-            <span class="comment">% Usage:</span>
-            <span class="comment">% experiments = obi.get_experiments()</span>
-            <span class="comment">% experiments = obi.get_experiments('space', 'SPACE')</span>
-            <span class="comment">% experiments = obi.get_experiments('space', 'SPACE', 'type', 'UNKNOWN')</span>
-
-            space = <span class="string">''</span>;
-            type = <span class="string">''</span>;
-            project = <span class="string">''</span>;
-
-            p = inputParser;
-            addRequired(p, <span class="string">'obj'</span>);
-            addParameter(p, <span class="string">'space'</span>, space, @ischar);
-            addParameter(p, <span class="string">'type'</span>, type, @ischar);
-            addParameter(p, <span class="string">'project'</span>, project, @ischar);
-            parse(p, obj, varargin{:});
-            a = p.Results;
-
-            experiments = obj.pybis.get_experiments(pyargs(<span class="string">'space'</span>, a.space, <span class="string">'type'</span>, a.type, <span class="string">'project'</span>, a.project));
-            experiments = df_to_table(experiments.df);
-        <span class="keyword">end</span>
-
-        <span class="keyword">function</span> experiment = get_experiment(obj, id)
-            <span class="comment">%get_experiment</span>
-            <span class="comment">% Return experiment with identifier</span>
-            <span class="comment">% ID can be either the Space + Object code (e.g. /SPACE/123456789) or the PermID (e.g. 20181002164551373-1234)</span>
-            <span class="comment">% Usage:</span>
-            <span class="comment">% exp = obi.get_experiment('/SPACE/PROJECT/EXP')</span>
-            <span class="comment">% exp = obi.get_experiment('permID')</span>
-
-            experiment = obj.pybis.get_experiment(id);
-        <span class="keyword">end</span>
-
-        <span class="keyword">function</span> experiment = new_experiment(obj, type, code, project)
-            <span class="comment">%new_experiment</span>
-            <span class="comment">% Create a new experiment of specific type in a defined project</span>
-            <span class="comment">% Required input arguments:</span>
-            <span class="comment">% type ... new experiment type</span>
-            <span class="comment">% code ... new experiment code</span>
-            <span class="comment">% project ... project for new experiment ('SPACE/Project')</span>
-            <span class="comment">% Usage:</span>
-            <span class="comment">% experiment = obi.new_experiment('type', 'space', 'Space/Project')</span>
-
-            experiment = obj.pybis.new_experiment(pyargs(<span class="string">'type'</span>, type, <span class="string">'code'</span>, code, <span class="string">'project'</span>, project));
-            experiment.save();
-        <span class="keyword">end</span>
-</pre><h2 id="7">Object methods</h2><p>this section defines following Matlab methods related to openBIS objects / samples:   get_object   get_objects   new_object   delete_object</p><pre class="codeinput">        <span class="keyword">function</span> objects = get_objects(obj, varargin)
-            <span class="comment">%get_objects</span>
-            <span class="comment">% Return a table of objects matching specified criteria</span>
-            <span class="comment">% Optional keyword arguments:</span>
-            <span class="comment">% id ... object identifier ('SPACE/PROJECT/')</span>
-            <span class="comment">% Usage:</span>
-            <span class="comment">% objects = obi.get_objects()</span>
-            <span class="comment">% objects = obi.get_objects('id', 'SPACE/')</span>
-
-            defaultId = <span class="string">''</span>;
-
-            p = inputParser;
-            addRequired(p, <span class="string">'obj'</span>);
-            addParameter(p, <span class="string">'id'</span>, defaultId, @ischar);
-            parse(p, obj, varargin{:});
-            a = p.Results;
-
-            objects = obj.pybis.get_objects(a.id);
-            objects = df_to_table(objects.df);
-        <span class="keyword">end</span>
-
-        <span class="keyword">function</span> object = get_object(obj, id)
-            <span class="comment">%get_object</span>
-            <span class="comment">% Return object (sample) corresponding to the id</span>
-            <span class="comment">% ID can be either the Space + Object code (e.g. /SPACE/123456789) or the PermID (e.g. 20181002164551373-1234)</span>
-            <span class="comment">% An error is raised if an object with the id is not found on the server.</span>
-            <span class="comment">% Required input arguments:</span>
-            <span class="comment">% id ... object id</span>
-            <span class="comment">% Usage:</span>
-            <span class="comment">% object = obi.get_object('id')</span>
-
-            object = obj.pybis.get_object(id);
-        <span class="keyword">end</span>
-
-        <span class="keyword">function</span> object = new_object(obj, type, space, code)
-            <span class="comment">%new_object</span>
-            <span class="comment">% Create a new object of type in space with code</span>
-            <span class="comment">% Return the object</span>
-            <span class="comment">% Input arguments</span>
-            <span class="comment">% type ... object type</span>
-            <span class="comment">% space ... Space code</span>
-            <span class="comment">% code ... object code</span>
-            <span class="comment">% Usage:</span>
-            <span class="comment">% object = obi.new_object('type', 'space', 'code')</span>
-
-            object = obj.pybis.new_object(pyargs(<span class="string">'type'</span>, type, <span class="string">'space'</span>, space, <span class="string">'code'</span>, code));
-            object.save();
-        <span class="keyword">end</span>
-
-        <span class="keyword">function</span> object = delete_object(obj, object, reason)
-            <span class="comment">%delete_object</span>
-            <span class="comment">% Delete object and provide a reason for deletion</span>
-            <span class="comment">% Required input arguments:</span>
-            <span class="comment">% object ... object returned by get_object / new_object methods</span>
-            <span class="comment">% reason ... reason for deletion</span>
-            <span class="comment">% Usage:</span>
-            <span class="comment">% obi.delete_object(object, 'reason')</span>
-
-            object.delete(reason)
-        <span class="keyword">end</span>
-</pre><h2 id="8">Dataset methods</h2><p>this section defines following Matlab methods:   get_datasets   get_dataset   get_dataset_files   dataset_download   new_dataset   new_dataset_container</p><pre class="codeinput">        <span class="keyword">function</span> datasets = get_datasets(obj, varargin)
-            <span class="comment">%get_datasets</span>
-            <span class="comment">% Return table of matching datasets.</span>
-            <span class="comment">% Optional input arguments:</span>
-            <span class="comment">% code ... dataset code / permId</span>
-            <span class="comment">% type ... dataset type</span>
-            <span class="comment">% experiment ... datasets in experiment</span>
-            <span class="comment">% project ... datasets in project</span>
-            <span class="comment">% tags ... datasets with tags</span>
-            <span class="comment">% Usage:</span>
-            <span class="comment">% datasets = obi.get_datasets()</span>
-            <span class="comment">% datasets = obi.get_datasets('type', 'RAW_DATA')</span>
-            <span class="comment">% datasets = obi.get_datasets('experiment', '/SPACE/PROJECT/EXPERIMENT')</span>
-
-            defaultCode = <span class="string">''</span>;
-            defaultType = <span class="string">''</span>;
-            defaultExp = <span class="string">''</span>;
-            defaultProj = <span class="string">''</span>;
-            defaultTags = <span class="string">''</span>;
-
-            p = inputParser;
-            addRequired(p, <span class="string">'obj'</span>);
-            addParameter(p, <span class="string">'code'</span>, defaultCode, @ischar);
-            addParameter(p, <span class="string">'type'</span>, defaultType, @ischar);
-            addParameter(p, <span class="string">'experiment'</span>, defaultExp, @ischar);
-            addParameter(p, <span class="string">'project'</span>, defaultProj, @ischar);
-            addParameter(p, <span class="string">'tags'</span>, defaultTags, @ischar);
-            parse(p, obj, varargin{:});
-            a = p.Results;
-
-            datasets = obj.pybis.get_datasets(pyargs(<span class="string">'code'</span>, a.code, <span class="string">'type'</span>, a.type, <span class="string">'experiment'</span>, a.experiment, <span class="keyword">...</span>
-                <span class="string">'project'</span>, a.project, <span class="string">'tags'</span>, a.tags));
-            datasets = df_to_table(datasets.df);
-        <span class="keyword">end</span>
-
-        <span class="keyword">function</span> dataset = get_dataset(obj, permid, varargin)
-            <span class="comment">%get_dataset</span>
-            <span class="comment">% Get dataset with permId. An error is raised if a dataset with the id is not found on the server.</span>
-            <span class="comment">% Input arguments:</span>
-            <span class="comment">% permId ... dataset permId</span>
-            <span class="comment">% Usage:</span>
-            <span class="comment">% dataset = obi.get_dataset('permId')</span>
-
-            only_data = false;
-
-            p = inputParser;
-            addRequired(p, <span class="string">'obj'</span>);
-            addRequired(p, <span class="string">'permid'</span>, @ischar);
-            addOptional(p, <span class="string">'only_data'</span>, only_data, @islogical);
-            parse(p, obj, permid, varargin{:});
-            a = p.Results;
-
-<span class="comment">%             dataset = obj.pybis.get_dataset(pyargs('permid', a.permid, 'only_data', a.only_data));</span>
-            dataset = obj.pybis.get_dataset(a.permid);
-        <span class="keyword">end</span>
-
-
-        <span class="keyword">function</span> files = get_dataset_files(obj, dataset, varargin)
-            <span class="comment">%get_dataset_files</span>
-            <span class="comment">% Get list of files in a dataset starting with start_folder.</span>
-            <span class="comment">% Input arguments:</span>
-            <span class="comment">% dataset ... dataset object returned by get_dataset</span>
-            <span class="comment">% start_folder ... starting folder for files (default: '/')</span>
-            <span class="comment">% Usage:</span>
-            <span class="comment">% files = obi.get_dataset_files(dataset)</span>
-
-            start_folder = <span class="string">'/'</span>;
-
-            p = inputParser;
-            addRequired(p, <span class="string">'obj'</span>);
-            addRequired(p, <span class="string">'dataset'</span>);
-            addOptional(p, <span class="string">'start_folder'</span>, start_folder, @ischar);
-            parse(p, obj, dataset, varargin{:});
-            a = p.Results;
-
-            files = dataset.get_files(pyargs(<span class="string">'start_folder'</span>, a.start_folder));
-            files = df_to_table(files);
-        <span class="keyword">end</span>
-
-        <span class="keyword">function</span> path_to_file = dataset_download(obj, dataset, files, varargin)
-            <span class="comment">%dataset_download</span>
-            <span class="comment">% Download files in a dataset</span>
-            <span class="comment">% dataset ... dataset object returned by get_dataset</span>
-            <span class="comment">% files ... cell array of files</span>
-            <span class="comment">% destination ... folder to download to (default: data)</span>
-            <span class="comment">% wait_until_finished ... wait or download in the background (default: true)</span>
-            <span class="comment">% workers ... number of workers to use for download (default: 10)</span>
-            <span class="comment">% Usage:</span>
-            <span class="comment">% path_to_files = obi.dataset_download(dataset, {'file1', 'file2'})</span>
-
-            destination = <span class="string">'data'</span>;
-            wait_until_finished = true;
-            workers = 10;
-
-            p = inputParser;
-            addRequired(p, <span class="string">'obj'</span>);
-            addRequired(p, <span class="string">'dataset'</span>);
-            addRequired(p, <span class="string">'files'</span>, @iscellstr);
-            addParameter(p, <span class="string">'destination'</span>, destination, @ischar);
-            addParameter(p, <span class="string">'wait_until_finished'</span>, wait_until_finished, @islogical);
-            addParameter(p, <span class="string">'workers'</span>, workers, @isscalar);
-
-            parse(p, obj, dataset, files, varargin{:});
-            a = p.Results;
-
-            dataset.download(pyargs(<span class="string">'files'</span>, a.files, <span class="string">'destination'</span>, a.destination, <span class="string">'wait_until_finished'</span>, a.wait_until_finished, <span class="string">'workers'</span>, int16(a.workers)));
-
-            path_to_file = fullfile(a.destination, dataset.char, a.files);
-
-        <span class="keyword">end</span>
-
-        <span class="keyword">function</span> dataset = new_dataset(obj, type, experiment, object, file_list)
-            <span class="comment">%new_dataset</span>
-            <span class="comment">% Create a new dataset with files</span>
-            <span class="comment">% type ... dataset type</span>
-            <span class="comment">% experiment ... experiment for dataset</span>
-            <span class="comment">% object ... object for dataset</span>
-            <span class="comment">% file_list ... list of files (cell string) to upload to new dataset</span>
-            <span class="comment">% Usage:</span>
-            <span class="comment">% dataset = obi.new_dataset('type', 'RAW_DATA', 'experiment', 'MY_EXP', 'object', 'MY_SAMPLE', 'file_list', {'file1', 'file2'})</span>
-
-            p = inputParser;
-            addRequired(p, <span class="string">'obj'</span>);
-            addRequired(p, <span class="string">'type'</span>, @ischar);
-            addRequired(p, <span class="string">'experiment'</span>, @ischar);
-            addRequired(p, <span class="string">'object'</span>, @ischar);
-            addRequired(p, <span class="string">'file_list'</span>, @iscellstr);
-
-            parse(p, obj, type, experiment, object, file_list);
-            a = p.Results;
-
-            dataset = obj.pybis.new_dataset(pyargs(<span class="string">'type'</span>, a.type, <span class="string">'experiment'</span>, a.experiment, <span class="string">'sample'</span>, a.object, <span class="string">'files'</span>, a.file_list));
-            dataset.save();
-
-        <span class="keyword">end</span>
-
-        <span class="keyword">function</span> dataset = new_dataset_container(obj, type, experiment, object)
-            <span class="comment">%new_dataset_container</span>
-            <span class="comment">% Create a new dataset container</span>
-            <span class="comment">% type ... dataset container type</span>
-            <span class="comment">% experiment ... experiment for dataset container</span>
-            <span class="comment">% object ... object for dataset container</span>
-            <span class="comment">% Usage:</span>
-            <span class="comment">% dataset = obi.new_dataset_container('type', 'RAW_DATA', 'experiment', 'MY_EXP', 'object', 'MY_SAMPLE')</span>
-
-            p = inputParser;
-            addRequired(p, <span class="string">'obj'</span>);
-            addRequired(p, <span class="string">'type'</span>, @ischar);
-            addRequired(p, <span class="string">'experiment'</span>, @ischar);
-            addRequired(p, <span class="string">'object'</span>, @ischar);
-
-            parse(p, obj, type, experiment, object, file_list);
-            a = p.Results;
-
-            dataset = obj.pybis.new_dataset(pyargs(<span class="string">'type'</span>, a.type, <span class="string">'experiment'</span>, a.experiment, <span class="string">'sample'</span>, a.object, <span class="string">'kind'</span>, <span class="string">'CONTAINER'</span>));
-            dataset.save();
-
-        <span class="keyword">end</span>
-</pre><pre class="codeinput">    <span class="keyword">end</span>
-
-<span class="keyword">end</span>
-</pre><p class="footer"><br><a href="https://www.mathworks.com/products/matlab/">Published with MATLAB&reg; R2018a</a><br></p></div><!--
-##### SOURCE BEGIN #####
-classdef OpenBis
-    % OpenBis   High-level class for interacting with Python (pyBIS) Openbis objects
-    % This class creates a MATLAB OpenBis object that encapsulates the Python (pyBIS) Openbis object
-    % and provides methods for interacting with the Python (pyBIS) Openbis object.
-    %
-    % Usage:
-    % Construct the MATLAB OpenBis object like this:
-    % obi = OpenBis()
-    % This will ask for URL, user name and password to connect to openBIS server.
-    % These can also be provided as optional input arguments.
-    %
-    % Methods are generally called like this:
-    % spaces = obi.get_spaces()
-    % space = obi.get_space(code)
-    %
-    % Logout:
-    % obi.logout()
-    
-    
-    properties
-        pybis % Python Openbis object
-    end
-    
-    
-    methods
-        
-        %% Constructor method
-        function obj = OpenBis(varargin)
-            % OpenBis   Constructor method for class OpenBis
-            % Creates the Python Openbis object and logs into the server
-            % Optional positional input arguments:
-            % url ... URL of the openBIS server (incl. port)
-            % user ... user name for openBIS
-            % pw ... password for openBIS
-            % Usage:
-            % obi = OpenBis() REPLACE_WITH_DASH_DASH> opens UI to enter URL, user name and password
-            % obi = OpenBis('server_url', 'user_name', 'user_password')
-            
-            if nargin > 0
-                url = varargin{1};
-                user = varargin{2};
-                pw = varargin{3};
-            else
-                [url, user, pw] = user_url_pw_inputdlg;
-            end
-            
-            o = py.pybis.Openbis(url, pyargs('verify_certificates', 0));
-            o.login(user, pw, pyargs('save_token', 1));
-            obj.pybis = o;
-        end
-        
-        function logout(obj)
-            %logout 
-            % Log out of openBIS.
-            % Usage:
-            % obi.logout()
-            % 
-            % After logout, the session token is no longer valid.
-            
-            obj.pybis.logout();
-        end
-        
-        function tf= is_session_active(obj)
-            %is_session_active 
-            % Check if the session token is still active. Returns true or false.
-            % Usage:
-            % true_false = obi.is_session_active()
-            
-            tf  = obj.pybis.is_session_active();
-        end
-        
-        function token = token(obj)
-            %token 
-            % Returns the current session token.
-            % Usage:
-            % token = obi.token()
-            
-            token  = char(obj.pybis.token);
-        end
-        
-        %% Masterdata methods
-        % this section defines Matlab equivalents of the following pyBIS methods:
-        %   get_experiment_types
-        %   get_sample_types
-        %   get_material_types
-        %   get_dataset_types
-        %   get_terms
-        %   get_tags
-        
-        function experiment_types = get_experiment_types(obj)
-            %get_experiment_types
-            % Return a table of all available experiment types.
-            % Usage:
-            % experiment_types = obi.get_experiment_types()
-            
-            experiment_types = obj.pybis.get_experiment_types();
-            experiment_types = df_to_table(experiment_types.df);
-        end
-        
-        function sample_types = get_sample_types(obj)
-            %get_sample_types
-            % Return table of all available sample types.
-            % Usage:
-            % sample_types = obi.get_sample_types()
-            
-            sample_types = obj.pybis.get_sample_types();
-            sample_types = df_to_table(sample_types.df);
-        end
-        
-        function material_types = get_material_types(obj)
-            %get_material_types
-            % Return table of all available material types.
-            % Usage:
-            % material_types = obi.get_material_types()
-            
-            material_types = obj.pybis.get_material_types();
-            material_types = df_to_table(material_types.df);
-        end
-        
-        function dataset_types = get_dataset_types(obj)
-            %get_dataset_types
-            % Return table of all available dataset types.
-            % Usage:
-            % dataset_types = obi.get_dataset_types()
-            
-            dataset_types = obj.pybis.get_dataset_types();
-            dataset_types = df_to_table(dataset_types.df);
-        end
-        
-        function terms = get_terms(obj)
-            %get_terms
-            % Return table of all available terms.
-            % Usage:
-            % terms = obi.get_terms()
-            
-            terms = obj.pybis.get_terms();
-            terms = df_to_table(terms.df);
-        end
-        
-        function tags = get_tags(obj)
-            %get_tags
-            % Return table of all available tags.
-            % Usage:
-            % tags = obi.get_tags()
-            
-            tags = obj.pybis.get_tags();
-            tags = df_to_table(tags.df);
-        end
-        
-        
-        %% Space methods
-        % this section defines Matlab equivalents of the following pyBIS methods:
-        %   get_spaces
-        %   get_space
-        %   new_space
-        %   space.delete
-        
-        function spaces = get_spaces(obj)
-            %get_spaces
-            % Return table of all available spaces.
-            % Usage:
-            % spaces = obi.get_spaces()
-            
-            spaces = obj.pybis.get_spaces();
-            spaces = df_to_table(spaces.df);
-        end
-        
-        function space = get_space(obj, code)
-            %get_space
-            % Fetch space with matching space code and return the space object.
-            % An error is raised if a space with the code is not found on the server.
-            % Required input arguments:
-            % code ... space code
-            % Usage:
-            % space = obi.get_space('code')
-            
-            space = obj.pybis.get_space(code);
-        end
-        
-        function space = new_space(obj, code, description)
-            %new_space
-            % Create a new space with code and description and return the space object
-            % Required input arguments:
-            % code ... Space code
-            % description ... Space description
-            % Usage:
-            % space = obi.new_space('code', 'description')
-            
-            space = obj.pybis.new_space(pyargs('code',  code, ...
-                'description', description));
-            space.save;
-        end
-        
-        function delete_space(obj, code, reason)
-            %delete_space
-            % Delete space with code and provide a reason for deletion
-            % Required input arguments:
-            % code ... Space code
-            % reason ... reason for deletion
-            % Usage:
-            % obi.delete_space('code', 'reason')
-            
-            space = obj.pybis.get_space(code);
-            space.delete(reason);
-        end
-        
-        
-        %% Project methods
-        % this section defines Matlab equivalents of the following pyBIS methods:
-        %   get_projects
-        %   get_project
-        %   new_project
-        %   project.delete
-        
-        function projects = get_projects(obj, space, code)
-            %get_projects
-            % Return table of matching projects.
-            % Input arguments:
-            % space ... space to fetch projects from
-            % project ... fetch projects matching code
-            % Usage:
-            % projects = obi.get_projects('space', 'code')
-            
-            projects = obj.pybis.get_projects(pyargs('space',  space, 'code', code));
-            projects = df_to_table(projects.df);
-        end
-        
-        function project = get_project(obj, id)
-            %get_project
-            % Fetch project with matching project id and return the project object.
-            % An error is raised if a project with the id is not found on the server.
-            % Required input arguments:
-            % id ... project id
-            % Usage:
-            % project = obi.get_project('id')
-            
-            project = obj.pybis.get_project(id);
-        end
-        
-        function project = new_project(obj, space, code, description)
-            %new_project
-            % Create a new project in space with code and description
-            % Return the project object
-            % Input arguments
-            % space ... Space code
-            % code ... Project code / id
-            % description ... Project description
-            % Usage:
-            % project = obi.new_project('space', 'code', 'description')
-            
-            space = obj.pybis.get_space(space);
-            project = space.new_project(pyargs('code', code,  'description', description));
-            project.save();
-        end
-        
-        function delete_project(obj, code, reason)
-            %delete_project
-            % Delete project with code and provide a reason for deletion
-            % Required input arguments:
-            % code ... Project code
-            % reason ... reason for deletion
-            % Usage:
-            % obi.delete_project('code', 'reason')
-            
-            project = obj.pybis.get_project(code);
-            project.delete(reason);
-        end
-        
-        
-        %% Experiment methods
-        % this section defines the following Matlab methods:
-        %   get_experiments
-        %   get_experiment
-        %   new_experiment
-        
-        function experiments = get_experiments(obj, varargin)
-            %get_experiments
-            % Return table of matching experiments.
-            % Optional input arguments:
-            % space ... space to fetch experiments from
-            % type ... fetch experiments of specific type
-            % project ... project to fetch experiments from
-            % Usage:
-            % experiments = obi.get_experiments()
-            % experiments = obi.get_experiments('space', 'SPACE')
-            % experiments = obi.get_experiments('space', 'SPACE', 'type', 'UNKNOWN')
-            
-            space = '';
-            type = '';
-            project = '';
-            
-            p = inputParser;
-            addRequired(p, 'obj');
-            addParameter(p, 'space', space, @ischar);
-            addParameter(p, 'type', type, @ischar);
-            addParameter(p, 'project', project, @ischar);
-            parse(p, obj, varargin{:});
-            a = p.Results;
-            
-            experiments = obj.pybis.get_experiments(pyargs('space', a.space, 'type', a.type, 'project', a.project));
-            experiments = df_to_table(experiments.df);
-        end
-        
-        function experiment = get_experiment(obj, id)
-            %get_experiment
-            % Return experiment with identifier
-            % ID can be either the Space + Object code (e.g. /SPACE/123456789) or the PermID (e.g. 20181002164551373-1234)
-            % Usage:
-            % exp = obi.get_experiment('/SPACE/PROJECT/EXP')
-            % exp = obi.get_experiment('permID')
-            
-            experiment = obj.pybis.get_experiment(id);
-        end
-        
-        function experiment = new_experiment(obj, type, code, project)
-            %new_experiment
-            % Create a new experiment of specific type in a defined project
-            % Required input arguments:
-            % type ... new experiment type
-            % code ... new experiment code
-            % project ... project for new experiment ('SPACE/Project')
-            % Usage:
-            % experiment = obi.new_experiment('type', 'space', 'Space/Project')
-            
-            experiment = obj.pybis.new_experiment(pyargs('type', type, 'code', code, 'project', project));
-            experiment.save();
-        end
-        
-        
-        %% Object methods
-        % this section defines following Matlab methods related to openBIS objects / samples:
-        %   get_object
-        %   get_objects
-        %   new_object
-        %   delete_object
-        
-        function objects = get_objects(obj, varargin)
-            %get_objects
-            % Return a table of objects matching specified criteria
-            % Optional keyword arguments:
-            % id ... object identifier ('SPACE/PROJECT/')
-            % Usage:
-            % objects = obi.get_objects()
-            % objects = obi.get_objects('id', 'SPACE/')
-            
-            defaultId = '';
-            
-            p = inputParser;
-            addRequired(p, 'obj');
-            addParameter(p, 'id', defaultId, @ischar);
-            parse(p, obj, varargin{:});
-            a = p.Results;
-           
-            objects = obj.pybis.get_objects(a.id);
-            objects = df_to_table(objects.df);
-        end
-        
-        function object = get_object(obj, id)
-            %get_object
-            % Return object (sample) corresponding to the id
-            % ID can be either the Space + Object code (e.g. /SPACE/123456789) or the PermID (e.g. 20181002164551373-1234)
-            % An error is raised if an object with the id is not found on the server.
-            % Required input arguments:
-            % id ... object id
-            % Usage:
-            % object = obi.get_object('id')
-            
-            object = obj.pybis.get_object(id);
-        end
-        
-        function object = new_object(obj, type, space, code)
-            %new_object
-            % Create a new object of type in space with code
-            % Return the object
-            % Input arguments
-            % type ... object type
-            % space ... Space code
-            % code ... object code
-            % Usage:
-            % object = obi.new_object('type', 'space', 'code')
-            
-            object = obj.pybis.new_object(pyargs('type', type, 'space', space, 'code', code));
-            object.save();
-        end
-        
-        function object = delete_object(obj, object, reason)
-            %delete_object
-            % Delete object and provide a reason for deletion
-            % Required input arguments:
-            % object ... object returned by get_object / new_object methods
-            % reason ... reason for deletion
-            % Usage:
-            % obi.delete_object(object, 'reason')
-            
-            object.delete(reason)
-        end
-
-        
-        %% Dataset methods
-        % this section defines following Matlab methods:
-        %   get_datasets
-        %   get_dataset
-        %   get_dataset_files
-        %   dataset_download
-        %   new_dataset
-        %   new_dataset_container
-        
-        function datasets = get_datasets(obj, varargin)
-            %get_datasets
-            % Return table of matching datasets.
-            % Optional input arguments:
-            % code ... dataset code / permId
-            % type ... dataset type
-            % experiment ... datasets in experiment 
-            % project ... datasets in project
-            % tags ... datasets with tags
-            % Usage:
-            % datasets = obi.get_datasets()
-            % datasets = obi.get_datasets('type', 'RAW_DATA')
-            % datasets = obi.get_datasets('experiment', '/SPACE/PROJECT/EXPERIMENT')
-            
-            defaultCode = '';
-            defaultType = '';
-            defaultExp = '';
-            defaultProj = '';
-            defaultTags = '';
-            
-            p = inputParser;
-            addRequired(p, 'obj');
-            addParameter(p, 'code', defaultCode, @ischar);
-            addParameter(p, 'type', defaultType, @ischar);
-            addParameter(p, 'experiment', defaultExp, @ischar);
-            addParameter(p, 'project', defaultProj, @ischar);
-            addParameter(p, 'tags', defaultTags, @ischar);
-            parse(p, obj, varargin{:});
-            a = p.Results;
-            
-            datasets = obj.pybis.get_datasets(pyargs('code', a.code, 'type', a.type, 'experiment', a.experiment, ...
-                'project', a.project, 'tags', a.tags));
-            datasets = df_to_table(datasets.df);
-        end
-        
-        function dataset = get_dataset(obj, permid, varargin)
-            %get_dataset
-            % Get dataset with permId. An error is raised if a dataset with the id is not found on the server.
-            % Input arguments:
-            % permId ... dataset permId
-            % Usage:
-            % dataset = obi.get_dataset('permId')
-            
-            only_data = false;
-            
-            p = inputParser;
-            addRequired(p, 'obj');
-            addRequired(p, 'permid', @ischar);
-            addOptional(p, 'only_data', only_data, @islogical);
-            parse(p, obj, permid, varargin{:});
-            a = p.Results;
-            
-%             dataset = obj.pybis.get_dataset(pyargs('permid', a.permid, 'only_data', a.only_data));
-            dataset = obj.pybis.get_dataset(a.permid);
-        end
-        
-        
-        function files = get_dataset_files(obj, dataset, varargin)
-            %get_dataset_files
-            % Get list of files in a dataset starting with start_folder.
-            % Input arguments:
-            % dataset ... dataset object returned by get_dataset
-            % start_folder ... starting folder for files (default: '/')
-            % Usage:
-            % files = obi.get_dataset_files(dataset)
-            
-            start_folder = '/';
-            
-            p = inputParser;
-            addRequired(p, 'obj');
-            addRequired(p, 'dataset');
-            addOptional(p, 'start_folder', start_folder, @ischar);
-            parse(p, obj, dataset, varargin{:});
-            a = p.Results;
-            
-            files = dataset.get_files(pyargs('start_folder', a.start_folder));
-            files = df_to_table(files);
-        end
-        
-        function path_to_file = dataset_download(obj, dataset, files, varargin)
-            %dataset_download
-            % Download files in a dataset
-            % dataset ... dataset object returned by get_dataset
-            % files ... cell array of files
-            % destination ... folder to download to (default: data)
-            % wait_until_finished ... wait or download in the background (default: true)
-            % workers ... number of workers to use for download (default: 10)
-            % Usage:
-            % path_to_files = obi.dataset_download(dataset, {'file1', 'file2'})
-            
-            destination = 'data';
-            wait_until_finished = true;
-            workers = 10;
-            
-            p = inputParser;
-            addRequired(p, 'obj');
-            addRequired(p, 'dataset');
-            addRequired(p, 'files', @iscellstr);
-            addParameter(p, 'destination', destination, @ischar);
-            addParameter(p, 'wait_until_finished', wait_until_finished, @islogical);
-            addParameter(p, 'workers', workers, @isscalar);
-            
-            parse(p, obj, dataset, files, varargin{:});
-            a = p.Results;
-            
-            dataset.download(pyargs('files', a.files, 'destination', a.destination, 'wait_until_finished', a.wait_until_finished, 'workers', int16(a.workers)));
-            
-            path_to_file = fullfile(a.destination, dataset.char, a.files);
-            
-        end
-        
-        function dataset = new_dataset(obj, type, experiment, object, file_list)
-            %new_dataset
-            % Create a new dataset with files
-            % type ... dataset type
-            % experiment ... experiment for dataset
-            % object ... object for dataset
-            % file_list ... list of files (cell string) to upload to new dataset
-            % Usage:
-            % dataset = obi.new_dataset('type', 'RAW_DATA', 'experiment', 'MY_EXP', 'object', 'MY_SAMPLE', 'file_list', {'file1', 'file2'})
-            
-            p = inputParser;
-            addRequired(p, 'obj');
-            addRequired(p, 'type', @ischar);
-            addRequired(p, 'experiment', @ischar);
-            addRequired(p, 'object', @ischar);
-            addRequired(p, 'file_list', @iscellstr);
-            
-            parse(p, obj, type, experiment, object, file_list);
-            a = p.Results;
-            
-            dataset = obj.pybis.new_dataset(pyargs('type', a.type, 'experiment', a.experiment, 'sample', a.object, 'files', a.file_list));
-            dataset.save();
-            
-        end
-        
-        function dataset = new_dataset_container(obj, type, experiment, object)
-            %new_dataset_container
-            % Create a new dataset container
-            % type ... dataset container type
-            % experiment ... experiment for dataset container
-            % object ... object for dataset container
-            % Usage:
-            % dataset = obi.new_dataset_container('type', 'RAW_DATA', 'experiment', 'MY_EXP', 'object', 'MY_SAMPLE')
-            
-            p = inputParser;
-            addRequired(p, 'obj');
-            addRequired(p, 'type', @ischar);
-            addRequired(p, 'experiment', @ischar);
-            addRequired(p, 'object', @ischar);
-            
-            parse(p, obj, type, experiment, object, file_list);
-            a = p.Results;
-            
-            dataset = obj.pybis.new_dataset(pyargs('type', a.type, 'experiment', a.experiment, 'sample', a.object, 'kind', 'CONTAINER'));
-            dataset.save();
-            
-        end
-        
-        
-    end
-    
-end
-
-
-
-##### SOURCE END #####
---></body></html>
\ No newline at end of file
diff --git a/html/alpha.png b/html/alpha.png
new file mode 100644
index 0000000000000000000000000000000000000000..c73de7b05000443a0842f2e915d30dc5efec0dd1
GIT binary patch
literal 273
zcmV+s0q*{ZP)<h;3K|Lk000e1NJLTq002+`000jN0ssI2{Hx#C0002kNkl<Zc%0>z
zQ4WJJ2!`q6(c~&{CcFyX%{{O*3+<>*r)K@)L#;sgtx%hY2zp`w01>%5jgw&J!A6Ov
z{oxj&d7k&j`4Qtd0>I<yG|r}b!HZBiUWDulY)TLj5#Mjir&R+t=^S@bSz*)Qlq8;V
zohP2M&8Ol=L{(MQAl;_Hnjl*l$|=*6RT(yRn&Vd2%+d^0HE=n0d7&y8YE9eC<Tny%
zHYM>2H(i=Rwz9Tqxf(W|?ki|=ctL(aA|es#WFKbc?zg4C=hd_}m12PXzTKJB+iB?u
XpQ?QQ=I-(g00000NkvXXu0mjf#?^X;

literal 0
HcmV?d00001

diff --git a/html/c++.png b/html/c++.png
new file mode 100644
index 0000000000000000000000000000000000000000..24f56e6293df813f7699555d0fdd0224a33bdac9
GIT binary patch
literal 327
zcmeAS@N?(olHy`uVBq!ia0vp^0YJ>p!2~4#tiFE(NU<e(ySp&_2f+n<mrn+Ya29w(
z7Bet#3xP1>rMq>1fP(BLp1!W^mpLQ_Wwp7rPrm~SUGa2r45^s&cKTi3W&@s<xmt@K
zhQ673Mk~?$*Mn<L+b%^daAK|TSF>7VZD}9S!LiPTl|j(*)-gYW;;XAZ?5N!pnK5hG
z+s}VG5+xWO6mIF=yOWvujML^HlXZ+Yu?Qyj=7(iWd!%tXIGN|}`LH!?g3;OMg0piY
zXCLcLf98Km#%@Dm=Gw_oB65#C&Ig=Xv$e7}bMZ3wpl2`Gw(%Wrdp_NvM0oStJBj<-
zw>I9sUd+GU{%T3g&-nYj{hnNcohMx1C8q6LzjX6wt1Wi%t17>Iemh??{C9K})9DTU
VtbG#CZUOzr;OXk;vd$@?2>_TKh~WSL

literal 0
HcmV?d00001

diff --git a/html/c.png b/html/c.png
new file mode 100644
index 0000000000000000000000000000000000000000..c39fbf0e25ee296c5da082458363c45d945e55ac
GIT binary patch
literal 252
zcmV<Y00aMtP)<h;3K|Lk000e1NJLTq002+`000jN0ssI2{Hx#C0002PNkl<Zc%1E*
zQ4WJJ2!`p>qm`?`neZy@-MWWPW6I1ran`JUPt^Pp2nEy;5sZWf01@dO#z`=<FP7uU
z?k)?Zl<a<fL<j)@9=*djn>%5EER@AM$q-T7II}~u7He5MzB*^2($9;r8$^sTRx!mG
z*Y={Rp11gKlvQkAY5N${nZR6`uQXd6Q{e@Bh2dQhbZ(t1?070Ye8{5GRQ*|k);Is-
zyZYFOBO(zQWDhg*y_Wu+*U+*r-a`3&yE1OHzojSttaK8#KYM}z0000<MNUMnLSTYt
Cm~Qg`

literal 0
HcmV?d00001

diff --git a/html/demoicon.gif b/html/demoicon.gif
new file mode 100644
index 0000000000000000000000000000000000000000..c89e7acbc2a74f36f35d2ba23cdd095366563205
GIT binary patch
literal 214
zcmZ?wbhEHb6krfwIKlt||NsBz;1LK4_4@xG$Oe)@|Nlq*|KIZe|D6B-*Z%*1?f?IK
z|Nno#cAjDHE{X4-EuTMj+Ph8S`+Kir`@EcN1dbivD<B}i!NCDE2W%b+q4<-9k%2*y
zK?fuXvXg-|I6<v1(ska7&PlIsE(`s$tUty3b3`EbVHLJJtC%ubnAn>F(pUKia5*{N
xtO-?WJ(Rf1$C7KR)AZ0H0j(>SR=H$6kJ)6-DZGJ)<+b45x|97Z4cdwf)&TUlSJMCh

literal 0
HcmV?d00001

diff --git a/html/df_to_table.html b/html/df_to_table.html
deleted file mode 100644
index 195fd7628de..00000000000
--- a/html/df_to_table.html
+++ /dev/null
@@ -1,92 +0,0 @@
-
-<!DOCTYPE html
-  PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head>
-      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-   <!--
-This HTML was auto-generated from MATLAB code.
-To make changes, update the MATLAB code and republish this document.
-      --><title>df_to_table</title><meta name="generator" content="MATLAB 9.4"><link rel="schema.DC" href="http://purl.org/dc/elements/1.1/"><meta name="DC.date" content="2019-03-21"><meta name="DC.source" content="df_to_table.m"><style type="text/css">
-html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td{margin:0;padding:0;border:0;outline:0;font-size:100%;vertical-align:baseline;background:transparent}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:'';content:none}:focus{outine:0}ins{text-decoration:none}del{text-decoration:line-through}table{border-collapse:collapse;border-spacing:0}
-
-html { min-height:100%; margin-bottom:1px; }
-html body { height:100%; margin:0px; font-family:Arial, Helvetica, sans-serif; font-size:10px; color:#000; line-height:140%; background:#fff none; overflow-y:scroll; }
-html body td { vertical-align:top; text-align:left; }
-
-h1 { padding:0px; margin:0px 0px 25px; font-family:Arial, Helvetica, sans-serif; font-size:1.5em; color:#d55000; line-height:100%; font-weight:normal; }
-h2 { padding:0px; margin:0px 0px 8px; font-family:Arial, Helvetica, sans-serif; font-size:1.2em; color:#000; font-weight:bold; line-height:140%; border-bottom:1px solid #d6d4d4; display:block; }
-h3 { padding:0px; margin:0px 0px 5px; font-family:Arial, Helvetica, sans-serif; font-size:1.1em; color:#000; font-weight:bold; line-height:140%; }
-
-a { color:#005fce; text-decoration:none; }
-a:hover { color:#005fce; text-decoration:underline; }
-a:visited { color:#004aa0; text-decoration:none; }
-
-p { padding:0px; margin:0px 0px 20px; }
-img { padding:0px; margin:0px 0px 20px; border:none; }
-p img, pre img, tt img, li img, h1 img, h2 img { margin-bottom:0px; } 
-
-ul { padding:0px; margin:0px 0px 20px 23px; list-style:square; }
-ul li { padding:0px; margin:0px 0px 7px 0px; }
-ul li ul { padding:5px 0px 0px; margin:0px 0px 7px 23px; }
-ul li ol li { list-style:decimal; }
-ol { padding:0px; margin:0px 0px 20px 0px; list-style:decimal; }
-ol li { padding:0px; margin:0px 0px 7px 23px; list-style-type:decimal; }
-ol li ol { padding:5px 0px 0px; margin:0px 0px 7px 0px; }
-ol li ol li { list-style-type:lower-alpha; }
-ol li ul { padding-top:7px; }
-ol li ul li { list-style:square; }
-
-.content { font-size:1.2em; line-height:140%; padding: 20px; }
-
-pre, code { font-size:12px; }
-tt { font-size: 1.2em; }
-pre { margin:0px 0px 20px; }
-pre.codeinput { padding:10px; border:1px solid #d3d3d3; background:#f7f7f7; }
-pre.codeoutput { padding:10px 11px; margin:0px 0px 20px; color:#4c4c4c; }
-pre.error { color:red; }
-
-@media print { pre.codeinput, pre.codeoutput { word-wrap:break-word; width:100%; } }
-
-span.keyword { color:#0000FF }
-span.comment { color:#228B22 }
-span.string { color:#A020F0 }
-span.untermstring { color:#B20000 }
-span.syscmd { color:#B28C00 }
-
-.footer { width:auto; padding:10px 0px; margin:25px 0px 0px; border-top:1px dotted #878787; font-size:0.8em; line-height:140%; font-style:italic; color:#878787; text-align:left; float:none; }
-.footer p { margin:0px; }
-.footer a { color:#878787; }
-.footer a:hover { color:#878787; text-decoration:underline; }
-.footer a:visited { color:#878787; }
-
-table th { padding:7px 5px; text-align:left; vertical-align:middle; border: 1px solid #d6d4d4; font-weight:bold; }
-table td { padding:7px 5px; text-align:left; vertical-align:top; border:1px solid #d6d4d4; }
-
-
-
-
-
-  </style></head><body><div class="content"><pre class="codeinput"><span class="keyword">function</span> [matlab_table] = df_to_table(df)
-<span class="comment">%df_to_table</span>
-<span class="comment">%   Returns a Matlab table for a Python dataframe</span>
-
-csv_temp = sprintf(<span class="string">'%s.csv'</span>, tempname);
-df.to_csv(csv_temp);
-matlab_table = readtable(csv_temp);
-delete(csv_temp);
-
-<span class="keyword">end</span>
-</pre><p class="footer"><br><a href="https://www.mathworks.com/products/matlab/">Published with MATLAB&reg; R2018a</a><br></p></div><!--
-##### SOURCE BEGIN #####
-function [matlab_table] = df_to_table(df)
-%df_to_table
-%   Returns a Matlab table for a Python dataframe
-
-csv_temp = sprintf('%s.csv', tempname);
-df.to_csv(csv_temp);
-matlab_table = readtable(csv_temp);
-delete(csv_temp);
-
-end
-##### SOURCE END #####
---></body></html>
\ No newline at end of file
diff --git a/html/down.png b/html/down.png
new file mode 100644
index 0000000000000000000000000000000000000000..d41104a26f3d09deda6ab54281affd82c981abb1
GIT binary patch
literal 133
zcmeAS@N?(olHy`uVBq!ia0vp^{2<K83?vyP*g1g|TYyi9D?{4M|Ns9NKi(_{6yYrJ
zh%5%u9$@TtGTRQwQ1x_i45_%4oRE;P;{V}*;O3^F8VR8a39b|gtsI9tyX+NAd3YG4
XmhsHB@t@HI)WG2B>gTe~DWM4fiX0)Z

literal 0
HcmV?d00001

diff --git a/html/doxysearch.php b/html/doxysearch.php
new file mode 100644
index 00000000000..36112a4269d
--- /dev/null
+++ b/html/doxysearch.php
@@ -0,0 +1,329 @@
+<?php
+/******************************************************************************
+ *
+ * $Id:$
+ *
+ * Copyright (C) 1997-2003 by Dimitri van Heesch.
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation under the terms of the GNU General Public License is hereby 
+ * granted. No representations are made about the suitability of this software 
+ * for any purpose. It is provided "as is" without express or implied warranty.
+ * See the GNU General Public License for more details.
+ *
+ */
+
+function readInt($file)
+{
+  $b1 = ord(fgetc($file)); $b2 = ord(fgetc($file));
+  $b3 = ord(fgetc($file)); $b4 = ord(fgetc($file));
+  return ($b1<<24)|($b2<<16)|($b3<<8)|$b4;
+}
+
+function readString($file)
+{
+  $result="";
+  while (ord($c=fgetc($file))) $result.=$c;
+  return $result;
+}
+
+function readHeader($file)
+{
+    $header =fgetc($file); $header.=fgetc($file);
+    $header.=fgetc($file); $header.=fgetc($file);
+    return $header;
+}
+
+function computeIndex($word)
+{
+  if (strlen($word)<2) return -1;
+  // high char of the index
+  $hi = ord($word{0});
+  if ($hi==0) return -1;
+  // low char of the index
+  $lo = ord($word{1});
+  if ($lo==0) return -1;
+  // return index
+  return $hi*256+$lo;
+}
+
+function search($file,$word,&$statsList)
+{
+  $index = computeIndex($word);
+  if ($index!=-1) // found a valid index
+  {
+    fseek($file,$index*4+4); // 4 bytes per entry, skip header
+    $index = readInt($file);
+    if ($index) // found words matching first two characters
+    {
+      $start=sizeof($statsList);
+      $count=$start;
+      fseek($file,$index);
+      $w = readString($file);
+      while ($w)
+      {
+        $statIdx = readInt($file);
+        if ($word==substr($w,0,strlen($word)))
+        { // found word that matches (as substring)
+          $statsList[$count++]=array(
+              "word"=>$word,
+              "match"=>$w,
+              "index"=>$statIdx,
+              "full"=>strlen($w)==strlen($word),
+              "docs"=>array()
+              );
+        }
+        $w = readString($file);
+      }
+      $totalFreq=0;
+      for ($count=$start;$count<sizeof($statsList);$count++)
+      {
+        $statInfo = &$statsList[$count];
+        fseek($file,$statInfo["index"]); 
+        $numDocs = readInt($file);
+        $docInfo = array();
+        // read docs info + occurrence frequency of the word
+        for ($i=0;$i<$numDocs;$i++)
+        {
+          $idx=readInt($file); 
+          $freq=readInt($file); 
+          $docInfo[$i]=array("idx"=>$idx,"freq"=>$freq,"rank"=>0.0);
+          $totalFreq+=$freq;
+          if ($statInfo["full"]) $totalfreq+=$freq;
+        }
+        // read name an url info for the doc
+        for ($i=0;$i<$numDocs;$i++)
+        {
+          fseek($file,$docInfo[$i]["idx"]);
+          $docInfo[$i]["name"]=readString($file);
+          $docInfo[$i]["url"]=readString($file);
+        }
+        $statInfo["docs"]=$docInfo;
+      }
+      for ($count=$start;$count<sizeof($statsList);$count++)
+      {
+        $statInfo = &$statsList[$count];
+        for ($i=0;$i<sizeof($statInfo["docs"]);$i++)
+        {
+          $docInfo = &$statInfo["docs"];
+          // compute frequency rank of the word in each doc
+          $statInfo["docs"][$i]["rank"]=
+            (float)$docInfo[$i]["freq"]/$totalFreq;
+        }
+      }
+    }
+  }
+  return $statsList;
+}
+
+function combine_results($results,&$docs)
+{
+  foreach ($results as $wordInfo)
+  {
+    $docsList = &$wordInfo["docs"];
+    foreach ($docsList as $di)
+    {
+      $key=$di["url"];
+      $rank=$di["rank"];
+      if (in_array($key, array_keys($docs)))
+      {
+        $docs[$key]["rank"]+=$rank;
+        $docs[$key]["rank"]*=2; // multiple matches increases rank 
+      }
+      else
+      {
+        $docs[$key] = array("url"=>$key,
+            "name"=>$di["name"],
+            "rank"=>$rank
+            );
+      }
+      $docs[$key]["words"][] = array(
+               "word"=>$wordInfo["word"],
+               "match"=>$wordInfo["match"],
+               "freq"=>$di["freq"]
+               );
+    }
+  }
+  return $docs;
+}
+
+function normalize_ranking(&$docs)
+{
+  $maxRank = 0.0000001;
+  // compute maximal rank
+  foreach ($docs as $doc) 
+  {
+    if ($doc["rank"]>$maxRank)
+    {
+      $maxRank=$doc["rank"];
+    }
+  }
+  reset($docs);
+  // normalize rankings
+  while (list ($key, $val) = each ($docs)) 
+  {
+    $docs[$key]["rank"]*=100/$maxRank;
+  }
+}
+
+function filter_results($docs,&$requiredWords,&$forbiddenWords)
+{
+  $filteredDocs=array();
+  while (list ($key, $val) = each ($docs)) 
+  {
+    $words = &$docs[$key]["words"];
+    $copy=1; // copy entry by default
+    if (sizeof($requiredWords)>0)
+    {
+      foreach ($requiredWords as $reqWord)
+      {
+        $found=0;
+        foreach ($words as $wordInfo)
+        { 
+          $found = $wordInfo["word"]==$reqWord;
+          if ($found) break;
+        }
+        if (!$found) 
+        {
+          $copy=0; // document contains none of the required words
+          break;
+        }
+      }
+    }
+    if (sizeof($forbiddenWords)>0)
+    {
+      foreach ($words as $wordInfo)
+      {
+        if (in_array($wordInfo["word"],$forbiddenWords))
+        {
+          $copy=0; // document contains a forbidden word
+          break;
+        }
+      }
+    }
+    if ($copy) $filteredDocs[$key]=$docs[$key];
+  }
+  return $filteredDocs;
+}
+
+function compare_rank($a,$b)
+{
+  return ($a["rank"]>$b["rank"]) ? -1 : 1; 
+}
+
+function sort_results($docs,&$sorted)
+{
+  $sorted = $docs;
+  usort($sorted,"compare_rank");
+  return $sorted;
+}
+
+function report_results(&$docs)
+{
+  echo "<table cellspacing=\"2\">\n";
+  echo "  <tr>\n";
+  echo "    <td colspan=\"2\"><h2>Search Results</h2></td>\n";
+  echo "  </tr>\n";
+  $numDocs = sizeof($docs);
+  if ($numDocs==0)
+  {
+    echo "  <tr>\n";
+    echo "    <td colspan=\"2\">".matches_text(0)."</td>\n";
+    echo "  </tr>\n";
+  }
+  else
+  {
+    echo "  <tr>\n";
+    echo "    <td colspan=\"2\">".matches_text($numDocs);
+    echo "\n";
+    echo "    </td>\n";
+    echo "  </tr>\n";
+    $num=1;
+    foreach ($docs as $doc)
+    {
+      echo "  <tr>\n";
+      echo "    <td align=\"right\">$num.</td>";
+      echo     "<td><a class=\"el\" href=\"".$doc["url"]."\">".$doc["name"]."</a></td>\n";
+      echo "  <tr>\n";
+      echo "    <td></td><td class=\"tiny\">Matches: ";
+      foreach ($doc["words"] as $wordInfo)
+      {
+        $word = $wordInfo["word"];
+        $matchRight = substr($wordInfo["match"],strlen($word));
+        echo "<b>$word</b>$matchRight(".$wordInfo["freq"].") ";
+      }
+      echo "    </td>\n";
+      echo "  </tr>\n";
+      $num++;
+    }
+  }
+  echo "</table>\n";
+}
+
+function matches_text($num)
+{
+  if ($num==0)
+  {
+    return 'Sorry, no documents matching your query.';
+  }
+  else if ($num==1)
+  {
+    return 'Found 1 document matching your query.';
+  }
+  else // $num>1
+  {
+    return 'Found '.$num.' documents matching your query. Showing best matches first.';
+  }
+}
+
+function main($idxfile)
+{
+  if(strcmp('4.1.0', phpversion()) > 0) 
+  {
+    die("Error: PHP version 4.1.0 or above required!");
+  }
+  if (!($file=fopen($idxfile,"rb"))) 
+  {
+    die("Error: Search index file could NOT be opened!");
+  }
+  if (readHeader($file)!="DOXS")
+  {
+    die("Error: Header of index file is invalid!");
+  }
+  $query="";
+  if (array_key_exists("query", $_GET))
+  {
+    $query=$_GET["query"];
+  }
+  $results = array();
+  $requiredWords = array();
+  $forbiddenWords = array();
+  $foundWords = array();
+  $word=strtolower(strtok($query," "));
+  while ($word) // for each word in the search query
+  {
+    if (($word{0}=='+')) { $word=substr($word,1); $requiredWords[]=$word; }
+    if (($word{0}=='-')) { $word=substr($word,1); $forbiddenWords[]=$word; }
+    if (!in_array($word,$foundWords))
+    {
+      $foundWords[]=$word;
+      search($file,$word,$results);
+    }
+    $word=strtolower(strtok(" "));
+  }
+  $docs = array();
+  combine_results($results,$docs);
+  // filter out documents with forbidden word or that do not contain
+  // required words
+  $filteredDocs = filter_results($docs,$requiredWords,$forbiddenWords);
+  // normalize rankings so they are in the range [0-100]
+  normalize_ranking($filteredDocs);
+  // sort the results based on rank
+  $sorted = array();
+  sort_results($filteredDocs,$sorted);
+  // report results to the user
+  report_results($sorted);
+  fclose($file);
+}
+
+?>
diff --git a/html/fortran.png b/html/fortran.png
new file mode 100644
index 0000000000000000000000000000000000000000..350c572ee38fc5aa8cef025284caa41a46921cbf
GIT binary patch
literal 265
zcmV+k0rvihP)<h;3K|Lk000e1NJLTq002+`000jN0ssI2{Hx#C0002cNkl<Zc%0>z
zQ4Yf(2!?U#(c~&{CVCaUn|okwjJWCAv@Y{YACUYt5I|c;L@*Nz0Eo!wFm8gG7quL(
z=eJ8jF~;-zT!i-?03M^mxSQz{PD1(=o)3a5h-huxIH1YJR@TpAUHLpGAzkjqF33Gq
z5HW;M#1ulv?Ojv&dqVG&6;xWfSwIyu&pDe3Y?b*+^Nvd@T*dL)Y-z<7!R9u;!a16o
zt!IDE1;u=7(6;lN@7iT2j)+8Ll6#n$r@xl|p4XvuY#=TA`S#1W+5VQEsg98Zwj;#Z
P00000NkvXXu0mjf06Tac

literal 0
HcmV?d00001

diff --git a/html/hp.png b/html/hp.png
new file mode 100644
index 0000000000000000000000000000000000000000..d09f988fb289d659869dbb1b2f199fd967a93958
GIT binary patch
literal 255
zcmV<b0094qP)<h;3K|Lk000e1NJLTq002+`000jN0ssI2{Hx#C0002SNkl<Zc%0>z
z%MHUI3_wlAXs`;N$*f{_qX$<A8ALy%AuUfiSO_7%7?WT^2(S|t0ElRH8Yh8>Rw9FO
zez{B`r8K|JmvGJjz-@IJXS2O<rqITjf;@vc3h#Xz2uGy-Ih_iNgEBD~OP?EzWzJj8
z&&<rc*4eg0;!~^yiIwx%wiS~RW}ZxXhK?}w4sA73-pIgN#A@xes=}*>mg-^gRJ-6O
z&=syLR&U^^a}=eRZLpT@KTChlV@n^^it_t*Wz253r911aWh5p(A;kay002ovPDHLk
FV1l-WYkL3y

literal 0
HcmV?d00001

diff --git a/html/index.html b/html/index.html
new file mode 100644
index 00000000000..de27ccae7d7
--- /dev/null
+++ b/html/index.html
@@ -0,0 +1,28 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+                "http://www.w3.org/TR/REC-html40/loose.dtd">
+<html>
+<head>
+  <title>Matlab Index</title>
+  <meta name="keywords" content="matlab-openbis">
+  <meta name="description" content="matlab-openbis">
+  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+  <meta name="generator" content="m2html v1.5 &copy; 2003-2005 Guillaume Flandin">
+  <meta name="robots" content="index, follow">
+  <link type="text/css" rel="stylesheet" href="./m2html.css">
+</head>
+<body>
+<a name="_top"></a>
+<h1>Matlab Index</h1>
+<h2>Matlab Directories</h2>
+<ul style="list-style-image:url(./matlabicon.gif)">
+<li><a href="matlab-openbis/index.html">matlab-openbis</a></li></ul>
+<h2>Matlab Files found in these Directories</h2>
+<table width="100%">
+		<tr>
+				<td><a href="matlab-openbis/OpenBis.html" title="matlab-openbis">OpenBis</a></td>		<td><a href="matlab-openbis/obi_test.html" title="matlab-openbis">obi_test</a></td>		<td><a href="matlab-openbis/passwordEntryDialog.html" title="matlab-openbis">passwordEntryDialog</a></td>		<td><a href="matlab-openbis/user_url_pw_inputdlg.html" title="matlab-openbis">user_url_pw_inputdlg</a></td>	</tr>	<tr>
+				<td><a href="matlab-openbis/df_to_table.html" title="matlab-openbis">df_to_table</a></td>		<td><a href="matlab-openbis/passcode.html" title="matlab-openbis">passcode</a></td>		<td><a href="matlab-openbis/user_url_pw_input_dialog.html" title="matlab-openbis">user_url_pw_input_dialog</a></td>		<td><a href="" title=""></a></td>	</tr></table>
+
+
+<hr><address>Generated on Tue 06-Jul-2021 16:01:17 by <strong><a href="http://www.artefact.tk/software/matlab/m2html/" title="Matlab Documentation in HTML">m2html</a></strong> &copy; 2005</address>
+</body>
+</html>
\ No newline at end of file
diff --git a/html/left.png b/html/left.png
new file mode 100644
index 0000000000000000000000000000000000000000..404df045f40970496c71ca6b8c1f1357af271e27
GIT binary patch
literal 136
zcmeAS@N?(olHy`uVBq!ia0vp^{2<K83?vyP*g1g|TYyi9D?{4M|Ns9NKi(_{6yYrJ
zh%5%u9$@TtGTRQw(C~C|45_%4oRE;P;y<&KX}yHjKLe3}i5>}w1qqB3TN5VEvJYV8
a;bDlI$G>{!EB$9cJq(_%elF{r5}E)JM<itc

literal 0
HcmV?d00001

diff --git a/html/linux.png b/html/linux.png
new file mode 100644
index 0000000000000000000000000000000000000000..42c0c328ee43a884158a8363682c493d4a4c335f
GIT binary patch
literal 272
zcmV+r0q_2aP)<h;3K|Lk000e1NJLTq002+`000jN0ssI2{Hx#C0002jNkl<Zc%0>z
zQ4WJ342H|%(dbp$Gu5lqySaxtLO>W(rpx%_LnVK(UrGTT5y42B06;|UPU9jm^JJ0Z
z`TTUN(6TJ&=lPPn_W<y?JB_O~Jn$-%$E%P%6;C2W+<lG5^TE2Ui*_n(3<-(jIrO>X
zId~2<e+z)Bnhg<E_0vyOv;%BB2}xYxlBZDtrp4Bm7D_#wlf)H<S8Yq{`K?-*jkfQ4
zhW1S>>0yJfGb3Up-MDlH7S}Vx-I*N`iO3-5Ff$K-Ed9N<tL5SCCy`y>epzm`zojRl
WMtq7>mNL`;0000<MNUMnLSTY<9C{!C

literal 0
HcmV?d00001

diff --git a/html/m2html.css b/html/m2html.css
new file mode 100644
index 00000000000..030a84b59b3
--- /dev/null
+++ b/html/m2html.css
@@ -0,0 +1,90 @@
+body {
+  background: white;
+  color: black;
+  font-family: arial,sans-serif;
+  margin: 0;
+  padding: 1ex;
+}
+
+div.fragment { 
+	width: 98%;
+	border: 1px solid #CCCCCC;
+	background-color: #f5f5f5;
+	padding-left: 4px;
+	margin: 4px;
+}
+
+div.box { 
+	width: 98%;
+	background-color: #f5f5f5;
+	border: 1px solid #CCCCCC;
+	color: black;
+	padding: 4px;
+}
+
+.comment {
+	color: #228B22;
+}
+.string {
+	color: #B20000;
+}
+.keyword { 
+	color: #0000FF;
+}
+
+.keywordtype { color: #604020; }
+.keywordflow { color: #e08000; }
+.preprocessor { color: #806020; }
+.stringliteral { color: #002080; }
+.charliteral { color: #008080; }
+
+a {
+	text-decoration: none; 
+}
+
+a:hover {
+	background-color: #006699;
+	color:#FFFFFF;
+}
+
+a.code {
+	font-weight: normal; 
+	color: #A020F0;
+}
+
+a.code:hover {
+	background-color: #FF0000;
+	color: #FFFFFF;
+}	
+
+h1 {
+	background: transparent;
+	color: #006699;
+	font-size: x-large;
+	text-align: center;
+}
+
+h2 {
+	background: transparent;
+	color: #006699;
+	font-size: large;
+}
+
+address {
+	font-size:small;
+}
+
+form.search {
+	margin-bottom: 0px;
+	margin-top: 0px;
+}
+input.search {
+	font-size: 75%;
+	color: #000080;
+	font-weight: normal;
+	background-color: #eeeeff;
+}
+
+li {
+    padding-left:5px;
+}
\ No newline at end of file
diff --git a/html/matlab-openbis/OpenBis.html b/html/matlab-openbis/OpenBis.html
new file mode 100644
index 00000000000..c05f75733bf
--- /dev/null
+++ b/html/matlab-openbis/OpenBis.html
@@ -0,0 +1,633 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+                "http://www.w3.org/TR/REC-html40/loose.dtd">
+<html>
+<head>
+  <title>Description of OpenBis</title>
+  <meta name="keywords" content="OpenBis">
+  <meta name="description" content="">
+  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+  <meta name="generator" content="m2html v1.5 &copy; 2003-2005 Guillaume Flandin">
+  <meta name="robots" content="index, follow">
+  <link type="text/css" rel="stylesheet" href="../m2html.css">
+</head>
+<body>
+<a name="_top"></a>
+<div><a href="../index.html">Home</a> &gt;  <a href="index.html">matlab-openbis</a> &gt; OpenBis.m</div>
+
+<!--<table width="100%"><tr><td align="left"><a href="../index.html"><img alt="<" border="0" src="../left.png">&nbsp;Master index</a></td>
+<td align="right"><a href="index.html">Index for matlab-openbis&nbsp;<img alt=">" border="0" src="../right.png"></a></td></tr></table>-->
+
+<h1>OpenBis
+</h1>
+
+<h2><a name="_name"></a>PURPOSE <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
+<div class="box"><strong></strong></div>
+
+<h2><a name="_synopsis"></a>SYNOPSIS <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
+<div class="box"><strong>This is a script file. </strong></div>
+
+<h2><a name="_description"></a>DESCRIPTION <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
+<div class="fragment"><pre class="comment"></pre></div>
+
+<!-- crossreference -->
+<h2><a name="_cross"></a>CROSS-REFERENCE INFORMATION <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
+This function calls:
+<ul style="list-style-image:url(../matlabicon.gif)">
+<li><a href="OpenBis.html" class="code" title="">OpenBis</a>	</li><li><a href="df_to_table.html" class="code" title="function [matlab_table] = df_to_table(df)">df_to_table</a>	df_to_table</li><li><a href="user_url_pw_inputdlg.html" class="code" title="function [url, user, pw] = user_url_pw_inputdlg">user_url_pw_inputdlg</a>	user_url_pw_inputdlg</li></ul>
+This function is called by:
+<ul style="list-style-image:url(../matlabicon.gif)">
+<li><a href="OpenBis.html" class="code" title="">OpenBis</a>	</li><li><a href="obi_test.html" class="code" title="function pass = obi_test(varargin)">obi_test</a>	obi_test Testing function for the Matlab openBIS Toolbox</li></ul>
+<!-- crossreference -->
+
+<h2><a name="_subfunctions"></a>SUBFUNCTIONS <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
+<ul style="list-style-image:url(../matlabicon.gif)">
+<li><a href="#_sub1" class="code">function obj = OpenBis(varargin)</a></li><li><a href="#_sub2" class="code">function logout(obj)</a></li><li><a href="#_sub3" class="code">function tf= is_session_active(obj)</a></li><li><a href="#_sub4" class="code">function token = token(obj)</a></li><li><a href="#_sub5" class="code">function experiment_types = get_experiment_types(obj)</a></li><li><a href="#_sub6" class="code">function sample_types = get_sample_types(obj)</a></li><li><a href="#_sub7" class="code">function material_types = get_material_types(obj)</a></li><li><a href="#_sub8" class="code">function dataset_types = get_dataset_types(obj)</a></li><li><a href="#_sub9" class="code">function terms = get_terms(obj)</a></li><li><a href="#_sub10" class="code">function tags = get_tags(obj)</a></li><li><a href="#_sub11" class="code">function spaces = get_spaces(obj)</a></li><li><a href="#_sub12" class="code">function space = get_space(obj, code)</a></li><li><a href="#_sub13" class="code">function space = new_space(obj, code, description)</a></li><li><a href="#_sub14" class="code">function delete_space(obj, code, reason)</a></li><li><a href="#_sub15" class="code">function projects = get_projects(obj, space, code)</a></li><li><a href="#_sub16" class="code">function project = get_project(obj, id)</a></li><li><a href="#_sub17" class="code">function project = new_project(obj, space, code, description)</a></li><li><a href="#_sub18" class="code">function delete_project(obj, code, reason)</a></li><li><a href="#_sub19" class="code">function experiments = get_experiments(obj, varargin)</a></li><li><a href="#_sub20" class="code">function experiment = get_experiment(obj, id)</a></li><li><a href="#_sub21" class="code">function exp = new_experiment(obj, type, code, project)</a></li><li><a href="#_sub22" class="code">function objects = get_objects(obj, varargin)</a></li><li><a href="#_sub23" class="code">function object = get_object(obj, id)</a></li><li><a href="#_sub24" class="code">function object = new_object(obj, type, space, code)</a></li><li><a href="#_sub25" class="code">function object = delete_object(obj, object, reason)</a></li><li><a href="#_sub26" class="code">function datasets = get_datasets(obj, varargin)</a></li><li><a href="#_sub27" class="code">function dataset = get_dataset(obj, permid, varargin)</a></li><li><a href="#_sub28" class="code">function files = get_dataset_files(obj, dataset, varargin)</a></li><li><a href="#_sub29" class="code">function path_to_file = dataset_download(obj, dataset, files, varargin)</a></li><li><a href="#_sub30" class="code">function dataset = new_dataset(obj, type, object, file_list, varargin)</a></li><li><a href="#_sub31" class="code">function dataset = new_dataset_container(obj, type, experiment, object)</a></li></ul>
+
+<h2><a name="_source"></a>SOURCE CODE <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
+<div class="fragment"><pre>0001 classdef <a href="OpenBis.html" class="code" title="">OpenBis</a>
+0002     <span class="comment">% OpenBis   High-level class for interacting with Python (pyBIS) Openbis objects</span>
+0003     <span class="comment">% This class creates a MATLAB OpenBis object that encapsulates the Python (pyBIS) Openbis object</span>
+0004     <span class="comment">% and provides methods for interacting with the Python (pyBIS) Openbis object.</span>
+0005     <span class="comment">%</span>
+0006     <span class="comment">% Usage:</span>
+0007     <span class="comment">% Construct the MATLAB OpenBis object like this:</span>
+0008     <span class="comment">% obi = OpenBis()</span>
+0009     <span class="comment">% This will ask for URL, user name and password to connect to openBIS server.</span>
+0010     <span class="comment">% These can also be provided as optional input arguments.</span>
+0011     <span class="comment">%</span>
+0012     <span class="comment">% Methods are generally called like this:</span>
+0013     <span class="comment">% spaces = obi.get_spaces()</span>
+0014     <span class="comment">% space = obi.get_space(code)</span>
+0015     <span class="comment">%</span>
+0016     <span class="comment">% Logout:</span>
+0017     <span class="comment">% obi.logout()</span>
+0018     
+0019     
+0020     properties
+0021         pybis <span class="comment">% Python Openbis object</span>
+0022     <span class="keyword">end</span>
+0023     
+0024     
+0025     methods
+0026         
+0027         <span class="comment">%% Constructor method</span>
+0028         <a name="_sub0" href="#_subfunctions" class="code">function obj = OpenBis(varargin)</a>
+0029             <span class="comment">% OpenBis   Constructor method for class OpenBis</span>
+0030             <span class="comment">% Creates the Python Openbis object and logs into the server</span>
+0031             <span class="comment">% Optional positional input arguments:</span>
+0032             <span class="comment">% url ... URL of the openBIS server (incl. port)</span>
+0033             <span class="comment">% user ... user name for openBIS</span>
+0034             <span class="comment">% pw ... password for openBIS</span>
+0035             <span class="comment">% Usage:</span>
+0036             <span class="comment">% obi = OpenBis() --&gt; opens UI to enter URL, user name and password</span>
+0037             <span class="comment">% obi = OpenBis('server_url', 'user_name', 'user_password')</span>
+0038             
+0039             <span class="keyword">if</span> nargin &gt; 0
+0040                 url = varargin{1};
+0041                 user = varargin{2};
+0042                 pw = varargin{3};
+0043             <span class="keyword">else</span>
+0044                 [url, user, pw] = <a href="user_url_pw_inputdlg.html" class="code" title="function [url, user, pw] = user_url_pw_inputdlg">user_url_pw_inputdlg</a>;
+0045             <span class="keyword">end</span>
+0046             
+0047             o = py.pybis.Openbis(url, pyargs(<span class="string">'verify_certificates'</span>, 0));
+0048             o.login(user, pw, pyargs(<span class="string">'save_token'</span>, 1));
+0049             obj.pybis = o;
+0050         <span class="keyword">end</span>
+0051         
+0052         <a name="_sub1" href="#_subfunctions" class="code">function logout(obj)</a>
+0053             <span class="comment">%logout</span>
+0054             <span class="comment">% Log out of openBIS.</span>
+0055             <span class="comment">% Usage:</span>
+0056             <span class="comment">% obi.logout()</span>
+0057             <span class="comment">%</span>
+0058             <span class="comment">% After logout, the session token is no longer valid.</span>
+0059             
+0060             obj.pybis.logout();
+0061         <span class="keyword">end</span>
+0062         
+0063         <a name="_sub2" href="#_subfunctions" class="code">function tf= is_session_active(obj)</a>
+0064             <span class="comment">%is_session_active</span>
+0065             <span class="comment">% Check if the session token is still active. Returns true or false.</span>
+0066             <span class="comment">% Usage:</span>
+0067             <span class="comment">% true_false = obi.is_session_active()</span>
+0068             
+0069             tf  = obj.pybis.is_session_active();
+0070         <span class="keyword">end</span>
+0071         
+0072         <a name="_sub3" href="#_subfunctions" class="code">function token = token(obj)</a>
+0073             <span class="comment">%token</span>
+0074             <span class="comment">% Returns the current session token.</span>
+0075             <span class="comment">% Usage:</span>
+0076             <span class="comment">% token = obi.token()</span>
+0077             
+0078             <a href="#_sub4" class="code" title="subfunction token = token(obj)">token</a>  = char(obj.pybis.token);
+0079         <span class="keyword">end</span>
+0080         
+0081         <span class="comment">%% Masterdata methods</span>
+0082         <span class="comment">% this section defines Matlab equivalents of the following pyBIS methods:</span>
+0083         <span class="comment">%   get_experiment_types</span>
+0084         <span class="comment">%   get_sample_types</span>
+0085         <span class="comment">%   get_material_types</span>
+0086         <span class="comment">%   get_dataset_types</span>
+0087         <span class="comment">%   get_terms</span>
+0088         <span class="comment">%   get_tags</span>
+0089         
+0090         <a name="_sub4" href="#_subfunctions" class="code">function experiment_types = get_experiment_types(obj)</a>
+0091             <span class="comment">%get_experiment_types</span>
+0092             <span class="comment">% Return a table of all available experiment types.</span>
+0093             <span class="comment">% Usage:</span>
+0094             <span class="comment">% experiment_types = obi.get_experiment_types()</span>
+0095             
+0096             experiment_types = obj.pybis.get_experiment_types();
+0097             experiment_types = <a href="df_to_table.html" class="code" title="function [matlab_table] = df_to_table(df)">df_to_table</a>(experiment_types.df);
+0098         <span class="keyword">end</span>
+0099         
+0100         <a name="_sub5" href="#_subfunctions" class="code">function sample_types = get_sample_types(obj)</a>
+0101             <span class="comment">%get_sample_types</span>
+0102             <span class="comment">% Return table of all available sample types.</span>
+0103             <span class="comment">% Usage:</span>
+0104             <span class="comment">% sample_types = obi.get_sample_types()</span>
+0105             
+0106             sample_types = obj.pybis.get_sample_types();
+0107             sample_types = <a href="df_to_table.html" class="code" title="function [matlab_table] = df_to_table(df)">df_to_table</a>(sample_types.df);
+0108         <span class="keyword">end</span>
+0109         
+0110         <a name="_sub6" href="#_subfunctions" class="code">function material_types = get_material_types(obj)</a>
+0111             <span class="comment">%get_material_types</span>
+0112             <span class="comment">% Return table of all available material types.</span>
+0113             <span class="comment">% Usage:</span>
+0114             <span class="comment">% material_types = obi.get_material_types()</span>
+0115             
+0116             material_types = obj.pybis.get_material_types();
+0117             material_types = <a href="df_to_table.html" class="code" title="function [matlab_table] = df_to_table(df)">df_to_table</a>(material_types.df);
+0118         <span class="keyword">end</span>
+0119         
+0120         <a name="_sub7" href="#_subfunctions" class="code">function dataset_types = get_dataset_types(obj)</a>
+0121             <span class="comment">%get_dataset_types</span>
+0122             <span class="comment">% Return table of all available dataset types.</span>
+0123             <span class="comment">% Usage:</span>
+0124             <span class="comment">% dataset_types = obi.get_dataset_types()</span>
+0125             
+0126             dataset_types = obj.pybis.get_dataset_types();
+0127             dataset_types = <a href="df_to_table.html" class="code" title="function [matlab_table] = df_to_table(df)">df_to_table</a>(dataset_types.df);
+0128         <span class="keyword">end</span>
+0129         
+0130         <a name="_sub8" href="#_subfunctions" class="code">function terms = get_terms(obj)</a>
+0131             <span class="comment">%get_terms</span>
+0132             <span class="comment">% Return table of all available terms.</span>
+0133             <span class="comment">% Usage:</span>
+0134             <span class="comment">% terms = obi.get_terms()</span>
+0135             
+0136             terms = obj.pybis.get_terms();
+0137             terms = <a href="df_to_table.html" class="code" title="function [matlab_table] = df_to_table(df)">df_to_table</a>(terms.df);
+0138         <span class="keyword">end</span>
+0139         
+0140         <a name="_sub9" href="#_subfunctions" class="code">function tags = get_tags(obj)</a>
+0141             <span class="comment">%get_tags</span>
+0142             <span class="comment">% Return table of all available tags.</span>
+0143             <span class="comment">% Usage:</span>
+0144             <span class="comment">% tags = obi.get_tags()</span>
+0145             
+0146             tags = obj.pybis.get_tags();
+0147             tags = <a href="df_to_table.html" class="code" title="function [matlab_table] = df_to_table(df)">df_to_table</a>(tags.df);
+0148         <span class="keyword">end</span>
+0149         
+0150         
+0151         <span class="comment">%% Space methods</span>
+0152         <span class="comment">% this section defines Matlab equivalents of the following pyBIS methods:</span>
+0153         <span class="comment">%   get_spaces</span>
+0154         <span class="comment">%   get_space</span>
+0155         <span class="comment">%   new_space</span>
+0156         <span class="comment">%   space.delete</span>
+0157         
+0158         <a name="_sub10" href="#_subfunctions" class="code">function spaces = get_spaces(obj)</a>
+0159             <span class="comment">%get_spaces</span>
+0160             <span class="comment">% Return table of all available spaces.</span>
+0161             <span class="comment">% Usage:</span>
+0162             <span class="comment">% spaces = obi.get_spaces()</span>
+0163             
+0164             spaces = obj.pybis.get_spaces();
+0165             spaces = <a href="df_to_table.html" class="code" title="function [matlab_table] = df_to_table(df)">df_to_table</a>(spaces.df);
+0166         <span class="keyword">end</span>
+0167         
+0168         <a name="_sub11" href="#_subfunctions" class="code">function space = get_space(obj, code)</a>
+0169             <span class="comment">%get_space</span>
+0170             <span class="comment">% Fetch space with matching space code and return the space object.</span>
+0171             <span class="comment">% An error is raised if a space with the code is not found on the server.</span>
+0172             <span class="comment">% Required input arguments:</span>
+0173             <span class="comment">% code ... space code</span>
+0174             <span class="comment">% Usage:</span>
+0175             <span class="comment">% space = obi.get_space('code')</span>
+0176             
+0177             space = obj.pybis.get_space(code);
+0178         <span class="keyword">end</span>
+0179         
+0180         <a name="_sub12" href="#_subfunctions" class="code">function space = new_space(obj, code, description)</a>
+0181             <span class="comment">%new_space</span>
+0182             <span class="comment">% Create a new space with code and description and return the space object</span>
+0183             <span class="comment">% Required input arguments:</span>
+0184             <span class="comment">% code ... Space code</span>
+0185             <span class="comment">% description ... Space description</span>
+0186             <span class="comment">% Usage:</span>
+0187             <span class="comment">% space = obi.new_space('code', 'description')</span>
+0188             
+0189             space = obj.pybis.new_space(pyargs(<span class="string">'code'</span>,  code, <span class="keyword">...</span>
+0190                 <span class="string">'description'</span>, description));
+0191             space.save;
+0192         <span class="keyword">end</span>
+0193         
+0194         <a name="_sub13" href="#_subfunctions" class="code">function delete_space(obj, code, reason)</a>
+0195             <span class="comment">%delete_space</span>
+0196             <span class="comment">% Delete space with code and provide a reason for deletion</span>
+0197             <span class="comment">% Required input arguments:</span>
+0198             <span class="comment">% code ... Space code</span>
+0199             <span class="comment">% reason ... reason for deletion</span>
+0200             <span class="comment">% Usage:</span>
+0201             <span class="comment">% obi.delete_space('code', 'reason')</span>
+0202             
+0203             space = obj.pybis.get_space(code);
+0204             space.delete(reason);
+0205         <span class="keyword">end</span>
+0206         
+0207         
+0208         <span class="comment">%% Project methods</span>
+0209         <span class="comment">% this section defines Matlab equivalents of the following pyBIS methods:</span>
+0210         <span class="comment">%   get_projects</span>
+0211         <span class="comment">%   get_project</span>
+0212         <span class="comment">%   new_project</span>
+0213         <span class="comment">%   project.delete</span>
+0214         
+0215         <a name="_sub14" href="#_subfunctions" class="code">function projects = get_projects(obj, space, code)</a>
+0216             <span class="comment">%get_projects</span>
+0217             <span class="comment">% Return table of matching projects.</span>
+0218             <span class="comment">% Input arguments:</span>
+0219             <span class="comment">% space ... space to fetch projects from</span>
+0220             <span class="comment">% project ... fetch projects matching code</span>
+0221             <span class="comment">% Usage:</span>
+0222             <span class="comment">% projects = obi.get_projects('space', 'code')</span>
+0223             
+0224             projects = obj.pybis.get_projects(pyargs(<span class="string">'space'</span>,  space, <span class="string">'code'</span>, code));
+0225             projects = <a href="df_to_table.html" class="code" title="function [matlab_table] = df_to_table(df)">df_to_table</a>(projects.df);
+0226         <span class="keyword">end</span>
+0227         
+0228         <a name="_sub15" href="#_subfunctions" class="code">function project = get_project(obj, id)</a>
+0229             <span class="comment">%get_project</span>
+0230             <span class="comment">% Fetch project with matching project id and return the project object.</span>
+0231             <span class="comment">% An error is raised if a project with the id is not found on the server.</span>
+0232             <span class="comment">% Required input arguments:</span>
+0233             <span class="comment">% id ... project id</span>
+0234             <span class="comment">% Usage:</span>
+0235             <span class="comment">% project = obi.get_project('id')</span>
+0236             
+0237             project = obj.pybis.get_project(id);
+0238         <span class="keyword">end</span>
+0239         
+0240         <a name="_sub16" href="#_subfunctions" class="code">function project = new_project(obj, space, code, description)</a>
+0241             <span class="comment">%new_project</span>
+0242             <span class="comment">% Create a new project in space with code and description</span>
+0243             <span class="comment">% Return the project object</span>
+0244             <span class="comment">% Input arguments</span>
+0245             <span class="comment">% space ... Space code</span>
+0246             <span class="comment">% code ... Project code / id</span>
+0247             <span class="comment">% description ... Project description</span>
+0248             <span class="comment">% Usage:</span>
+0249             <span class="comment">% project = obi.new_project('space', 'code', 'description')</span>
+0250             
+0251             space = obj.pybis.get_space(space);
+0252             project = space.new_project(pyargs(<span class="string">'code'</span>, code,  <span class="string">'description'</span>, description));
+0253             project.save();
+0254         <span class="keyword">end</span>
+0255         
+0256         <a name="_sub17" href="#_subfunctions" class="code">function delete_project(obj, code, reason)</a>
+0257             <span class="comment">%delete_project</span>
+0258             <span class="comment">% Delete project with code and provide a reason for deletion</span>
+0259             <span class="comment">% Required input arguments:</span>
+0260             <span class="comment">% code ... Project code</span>
+0261             <span class="comment">% reason ... reason for deletion</span>
+0262             <span class="comment">% Usage:</span>
+0263             <span class="comment">% obi.delete_project('code', 'reason')</span>
+0264             
+0265             project = obj.pybis.get_project(code);
+0266             project.delete(reason);
+0267         <span class="keyword">end</span>
+0268         
+0269         
+0270         <span class="comment">%% Experiment methods</span>
+0271         <span class="comment">% this section defines the following Matlab methods:</span>
+0272         <span class="comment">%   get_experiments</span>
+0273         <span class="comment">%   get_experiment</span>
+0274         <span class="comment">%   new_experiment</span>
+0275         
+0276         <a name="_sub18" href="#_subfunctions" class="code">function experiments = get_experiments(obj, varargin)</a>
+0277             <span class="comment">%get_experiments</span>
+0278             <span class="comment">% Return table of matching experiments.</span>
+0279             <span class="comment">% Optional input arguments:</span>
+0280             <span class="comment">% space ... space to fetch experiments from</span>
+0281             <span class="comment">% type ... fetch experiments of specific type</span>
+0282             <span class="comment">% project ... project to fetch experiments from</span>
+0283             <span class="comment">% Usage:</span>
+0284             <span class="comment">% experiments = obi.get_experiments()</span>
+0285             <span class="comment">% experiments = obi.get_experiments('space', 'SPACE')</span>
+0286             <span class="comment">% experiments = obi.get_experiments('space', 'SPACE', 'type', 'UNKNOWN')</span>
+0287             
+0288             space = <span class="string">''</span>;
+0289             type = <span class="string">''</span>;
+0290             project = <span class="string">''</span>;
+0291             
+0292             p = inputParser;
+0293             addRequired(p, <span class="string">'obj'</span>);
+0294             addParameter(p, <span class="string">'space'</span>, space, @ischar);
+0295             addParameter(p, <span class="string">'type'</span>, type, @ischar);
+0296             addParameter(p, <span class="string">'project'</span>, project, @ischar);
+0297             parse(p, obj, varargin{:});
+0298             a = p.Results;
+0299             
+0300             experiments = obj.pybis.get_experiments(pyargs(<span class="string">'space'</span>, a.space, <span class="string">'type'</span>, a.type, <span class="string">'project'</span>, a.project));
+0301             experiments = <a href="df_to_table.html" class="code" title="function [matlab_table] = df_to_table(df)">df_to_table</a>(experiments.df);
+0302         <span class="keyword">end</span>
+0303         
+0304         <a name="_sub19" href="#_subfunctions" class="code">function experiment = get_experiment(obj, id)</a>
+0305             <span class="comment">%get_experiment</span>
+0306             <span class="comment">% Return experiment with identifier</span>
+0307             <span class="comment">% ID can be either the Space + Object code (e.g. /SPACE/123456789) or the PermID (e.g. 20181002164551373-1234)</span>
+0308             <span class="comment">% Usage:</span>
+0309             <span class="comment">% exp = obi.get_experiment('/SPACE/PROJECT/EXP')</span>
+0310             <span class="comment">% exp = obi.get_experiment('permID')</span>
+0311             
+0312             experiment = obj.pybis.get_experiment(id);
+0313         <span class="keyword">end</span>
+0314         
+0315         <a name="_sub20" href="#_subfunctions" class="code">function exp = new_experiment(obj, type, code, project)</a>
+0316             <span class="comment">%new_experiment</span>
+0317             <span class="comment">% Create a new experiment of specific type in a defined project</span>
+0318             <span class="comment">% Required input arguments:</span>
+0319             <span class="comment">% type ... new experiment type - see: obi.get_experiment_types()</span>
+0320             <span class="comment">% code ... new experiment code</span>
+0321             <span class="comment">% project ... project for new experiment ('/SPACE/Project')</span>
+0322             <span class="comment">% Usage:</span>
+0323             <span class="comment">% exp = obi.new_experiment('DEFAULT_EXPERIMENT', 'EXP1234', '/SPACE/Project')</span>
+0324             
+0325             <span class="comment">% determine type object</span>
+0326             t = obj.pybis.get_experiment_type(type);
+0327             
+0328             <span class="comment">% determine project type</span>
+0329             p = obj.get_project(project);
+0330             
+0331             <span class="comment">% instantiate a new experiment object</span>
+0332             exp = py.pybis.pybis.Experiment(obj.pybis, pyargs(<span class="string">'type'</span>, t, <span class="string">'code'</span>, code, <span class="string">'project'</span>, p));
+0333             
+0334             <span class="comment">% save experiment</span>
+0335             exp.save();
+0336         <span class="keyword">end</span>
+0337         
+0338         
+0339         <span class="comment">%% Object methods</span>
+0340         <span class="comment">% this section defines following Matlab methods related to openBIS objects / samples:</span>
+0341         <span class="comment">%   get_object</span>
+0342         <span class="comment">%   get_objects</span>
+0343         <span class="comment">%   new_object</span>
+0344         <span class="comment">%   delete_object</span>
+0345         
+0346         <a name="_sub21" href="#_subfunctions" class="code">function objects = get_objects(obj, varargin)</a>
+0347             <span class="comment">%get_objects</span>
+0348             <span class="comment">% Return a table of objects matching specified criteria</span>
+0349             <span class="comment">% Optional keyword arguments:</span>
+0350             <span class="comment">% id ... object identifier ('SPACE/PROJECT/')</span>
+0351             <span class="comment">% Usage:</span>
+0352             <span class="comment">% objects = obi.get_objects()</span>
+0353             <span class="comment">% objects = obi.get_objects('id', 'SPACE/')</span>
+0354             
+0355             defaultId = <span class="string">''</span>;
+0356             
+0357             p = inputParser;
+0358             addRequired(p, <span class="string">'obj'</span>);
+0359             addParameter(p, <span class="string">'id'</span>, defaultId, @ischar);
+0360             parse(p, obj, varargin{:});
+0361             a = p.Results;
+0362            
+0363             objects = obj.pybis.get_objects(a.id);
+0364             objects = <a href="df_to_table.html" class="code" title="function [matlab_table] = df_to_table(df)">df_to_table</a>(objects.df);
+0365         <span class="keyword">end</span>
+0366         
+0367         <a name="_sub22" href="#_subfunctions" class="code">function object = get_object(obj, id)</a>
+0368             <span class="comment">%get_object</span>
+0369             <span class="comment">% Return object (sample) corresponding to the id</span>
+0370             <span class="comment">% ID can be either the Space + Object code (e.g. /SPACE/123456789) or the PermID (e.g. 20181002164551373-1234)</span>
+0371             <span class="comment">% An error is raised if an object with the id is not found on the server.</span>
+0372             <span class="comment">% Required input arguments:</span>
+0373             <span class="comment">% id ... object id</span>
+0374             <span class="comment">% Usage:</span>
+0375             <span class="comment">% object = obi.get_object('id')</span>
+0376             
+0377             object = obj.pybis.get_object(id);
+0378         <span class="keyword">end</span>
+0379         
+0380         <a name="_sub23" href="#_subfunctions" class="code">function object = new_object(obj, type, space, code)</a>
+0381             <span class="comment">%new_object</span>
+0382             <span class="comment">% Create a new object of type in space with code</span>
+0383             <span class="comment">% Return the object</span>
+0384             <span class="comment">% Input arguments</span>
+0385             <span class="comment">% type ... object type</span>
+0386             <span class="comment">% space ... Space code</span>
+0387             <span class="comment">% code ... object code</span>
+0388             <span class="comment">% Usage:</span>
+0389             <span class="comment">% object = obi.new_object('type', 'space', 'code')</span>
+0390             
+0391             object = obj.pybis.new_object(pyargs(<span class="string">'type'</span>, type, <span class="string">'space'</span>, space, <span class="string">'code'</span>, code));
+0392             object.save();
+0393         <span class="keyword">end</span>
+0394         
+0395         <a name="_sub24" href="#_subfunctions" class="code">function object = delete_object(obj, object, reason)</a>
+0396             <span class="comment">%delete_object</span>
+0397             <span class="comment">% Delete object and provide a reason for deletion</span>
+0398             <span class="comment">% Required input arguments:</span>
+0399             <span class="comment">% object ... object returned by get_object / new_object methods</span>
+0400             <span class="comment">% reason ... reason for deletion</span>
+0401             <span class="comment">% Usage:</span>
+0402             <span class="comment">% obi.delete_object(object, 'reason')</span>
+0403             
+0404             object.delete(reason)
+0405         <span class="keyword">end</span>
+0406 
+0407         
+0408         <span class="comment">%% Dataset methods</span>
+0409         <span class="comment">% this section defines following Matlab methods:</span>
+0410         <span class="comment">%   get_datasets</span>
+0411         <span class="comment">%   get_dataset</span>
+0412         <span class="comment">%   get_dataset_files</span>
+0413         <span class="comment">%   dataset_download</span>
+0414         <span class="comment">%   new_dataset</span>
+0415         <span class="comment">%   new_dataset_container</span>
+0416         
+0417         <a name="_sub25" href="#_subfunctions" class="code">function datasets = get_datasets(obj, varargin)</a>
+0418             <span class="comment">%get_datasets</span>
+0419             <span class="comment">% Return table of matching datasets.</span>
+0420             <span class="comment">% Optional input arguments:</span>
+0421             <span class="comment">% code ... dataset code / permId</span>
+0422             <span class="comment">% type ... dataset type</span>
+0423             <span class="comment">% experiment ... datasets in experiment</span>
+0424             <span class="comment">% project ... datasets in project</span>
+0425             <span class="comment">% tags ... datasets with tags</span>
+0426             <span class="comment">% Usage:</span>
+0427             <span class="comment">% datasets = obi.get_datasets()</span>
+0428             <span class="comment">% datasets = obi.get_datasets('type', 'RAW_DATA')</span>
+0429             <span class="comment">% datasets = obi.get_datasets('experiment', '/SPACE/PROJECT/EXPERIMENT')</span>
+0430             
+0431             defaultCode = <span class="string">''</span>;
+0432             defaultType = <span class="string">''</span>;
+0433             defaultExp = <span class="string">''</span>;
+0434             defaultProj = <span class="string">''</span>;
+0435             defaultTags = <span class="string">''</span>;
+0436             
+0437             p = inputParser;
+0438             addRequired(p, <span class="string">'obj'</span>);
+0439             addParameter(p, <span class="string">'code'</span>, defaultCode, @ischar);
+0440             addParameter(p, <span class="string">'type'</span>, defaultType, @ischar);
+0441             addParameter(p, <span class="string">'experiment'</span>, defaultExp, @ischar);
+0442             addParameter(p, <span class="string">'project'</span>, defaultProj, @ischar);
+0443             addParameter(p, <span class="string">'tags'</span>, defaultTags, @ischar);
+0444             parse(p, obj, varargin{:});
+0445             a = p.Results;
+0446             
+0447             datasets = obj.pybis.get_datasets(pyargs(<span class="string">'code'</span>, a.code, <span class="string">'type'</span>, a.type, <span class="string">'experiment'</span>, a.experiment, <span class="keyword">...</span>
+0448                 <span class="string">'project'</span>, a.project, <span class="string">'tags'</span>, a.tags));
+0449             datasets = <a href="df_to_table.html" class="code" title="function [matlab_table] = df_to_table(df)">df_to_table</a>(datasets.df);
+0450         <span class="keyword">end</span>
+0451         
+0452         <a name="_sub26" href="#_subfunctions" class="code">function dataset = get_dataset(obj, permid, varargin)</a>
+0453             <span class="comment">%get_dataset</span>
+0454             <span class="comment">% Get dataset with permId. An error is raised if a dataset with the id is not found on the server.</span>
+0455             <span class="comment">% Input arguments:</span>
+0456             <span class="comment">% permId ... dataset permId</span>
+0457             <span class="comment">% Usage:</span>
+0458             <span class="comment">% dataset = obi.get_dataset('permId')</span>
+0459             
+0460             only_data = false;
+0461             
+0462             p = inputParser;
+0463             addRequired(p, <span class="string">'obj'</span>);
+0464             addRequired(p, <span class="string">'permid'</span>, @ischar);
+0465             addOptional(p, <span class="string">'only_data'</span>, only_data, @islogical);
+0466             parse(p, obj, permid, varargin{:});
+0467             a = p.Results;
+0468             
+0469 <span class="comment">%             dataset = obj.pybis.get_dataset(pyargs('permid', a.permid, 'only_data', a.only_data));</span>
+0470             dataset = obj.pybis.get_dataset(a.permid);
+0471         <span class="keyword">end</span>
+0472         
+0473         
+0474         <a name="_sub27" href="#_subfunctions" class="code">function files = get_dataset_files(obj, dataset, varargin)</a>
+0475             <span class="comment">%get_dataset_files</span>
+0476             <span class="comment">% Get list of files in a dataset starting with start_folder.</span>
+0477             <span class="comment">% Input arguments:</span>
+0478             <span class="comment">% dataset ... dataset object returned by get_dataset</span>
+0479             <span class="comment">% start_folder ... starting folder for files (default: '/')</span>
+0480             <span class="comment">% Usage:</span>
+0481             <span class="comment">% files = obi.get_dataset_files(dataset)</span>
+0482             
+0483             start_folder = <span class="string">'/'</span>;
+0484             
+0485             p = inputParser;
+0486             addRequired(p, <span class="string">'obj'</span>);
+0487             addRequired(p, <span class="string">'dataset'</span>);
+0488             addOptional(p, <span class="string">'start_folder'</span>, start_folder, @ischar);
+0489             parse(p, obj, dataset, varargin{:});
+0490             a = p.Results;
+0491             
+0492             files = dataset.get_files(pyargs(<span class="string">'start_folder'</span>, a.start_folder));
+0493             files = <a href="df_to_table.html" class="code" title="function [matlab_table] = df_to_table(df)">df_to_table</a>(files);
+0494         <span class="keyword">end</span>
+0495         
+0496         <a name="_sub28" href="#_subfunctions" class="code">function path_to_file = dataset_download(obj, dataset, files, varargin)</a>
+0497             <span class="comment">%dataset_download</span>
+0498             <span class="comment">% Download files in a dataset</span>
+0499             <span class="comment">% dataset ... dataset object returned by get_dataset</span>
+0500             <span class="comment">% files ... cell array of files</span>
+0501             <span class="comment">% destination ... folder to download to (default: data)</span>
+0502             <span class="comment">% wait_until_finished ... wait or download in the background (default: true)</span>
+0503             <span class="comment">% workers ... number of workers to use for download (default: 10)</span>
+0504             <span class="comment">% Usage:</span>
+0505             <span class="comment">% path_to_files = obi.dataset_download(dataset, {'file1', 'file2'})</span>
+0506             
+0507             destination = <span class="string">'data'</span>;
+0508             wait_until_finished = true;
+0509             workers = 10;
+0510             
+0511             p = inputParser;
+0512             addRequired(p, <span class="string">'obj'</span>);
+0513             addRequired(p, <span class="string">'dataset'</span>);
+0514             addRequired(p, <span class="string">'files'</span>, @iscellstr);
+0515             addParameter(p, <span class="string">'destination'</span>, destination, @ischar);
+0516             addParameter(p, <span class="string">'wait_until_finished'</span>, wait_until_finished, @islogical);
+0517             addParameter(p, <span class="string">'workers'</span>, workers, @isscalar);
+0518             
+0519             parse(p, obj, dataset, files, varargin{:});
+0520             a = p.Results;
+0521             
+0522             dataset.download(pyargs(<span class="string">'files'</span>, a.files, <span class="string">'destination'</span>, a.destination, <span class="string">'wait_until_finished'</span>, a.wait_until_finished, <span class="string">'workers'</span>, int16(a.workers)));
+0523             
+0524             path_to_file = fullfile(a.destination, dataset.char, a.files);
+0525             
+0526         <span class="keyword">end</span>
+0527         
+0528         <a name="_sub29" href="#_subfunctions" class="code">function dataset = new_dataset(obj, type, object, file_list, varargin)</a>
+0529             <span class="comment">%new_dataset</span>
+0530             <span class="comment">% Create a new dataset with files</span>
+0531             <span class="comment">% type ... dataset type</span>
+0532             <span class="comment">% object ... object for dataset (experiment)</span>
+0533             <span class="comment">% file_list ... list of files (cell string) to upload to new dataset</span>
+0534             <span class="comment">% properties ... structure with dataset properties (meta-data)</span>
+0535             <span class="comment">% Usage:</span>
+0536             <span class="comment">% dataset = obi.new_dataset('RAW_DATA', '/SPACE/PROJECT/OBJECT', {'file1', 'file2'}, 'properties', props)</span>
+0537             
+0538             properties = struct;
+0539             
+0540             p = inputParser;
+0541             addRequired(p, <span class="string">'obj'</span>);
+0542             addRequired(p, <span class="string">'type'</span>, @ischar);
+0543             addRequired(p, <span class="string">'object'</span>, @ischar);
+0544             addRequired(p, <span class="string">'file_list'</span>, @iscellstr);
+0545             addParameter(p, <span class="string">'properties'</span>, properties, @isstruct);
+0546             
+0547             parse(p, obj, type, object, file_list, varargin{:});
+0548             a = p.Results;
+0549             
+0550             dataset = obj.pybis.new_dataset(pyargs(<span class="string">'type'</span>, a.type, <span class="string">'experiment'</span>, a.object, <span class="keyword">...</span>
+0551                 <span class="string">'files'</span>, a.file_list, <span class="string">'props'</span>, a.properties));
+0552             dataset.save();
+0553             
+0554         <span class="keyword">end</span>
+0555         
+0556         <a name="_sub30" href="#_subfunctions" class="code">function dataset = new_dataset_container(obj, type, experiment, object)</a>
+0557             <span class="comment">%new_dataset_container</span>
+0558             <span class="comment">% Create a new dataset container</span>
+0559             <span class="comment">% type ... dataset container type</span>
+0560             <span class="comment">% experiment ... experiment for dataset container</span>
+0561             <span class="comment">% object ... object for dataset container</span>
+0562             <span class="comment">% Usage:</span>
+0563             <span class="comment">% dataset = obi.new_dataset_container('type', 'RAW_DATA', 'experiment', 'MY_EXP', 'object', 'MY_SAMPLE')</span>
+0564             
+0565             p = inputParser;
+0566             addRequired(p, <span class="string">'obj'</span>);
+0567             addRequired(p, <span class="string">'type'</span>, @ischar);
+0568             addRequired(p, <span class="string">'experiment'</span>, @ischar);
+0569             addRequired(p, <span class="string">'object'</span>, @ischar);
+0570             
+0571             parse(p, obj, type, experiment, object, file_list);
+0572             a = p.Results;
+0573             
+0574             dataset = obj.pybis.new_dataset(pyargs(<span class="string">'type'</span>, a.type, <span class="string">'experiment'</span>, a.experiment, <span class="string">'sample'</span>, a.object, <span class="string">'kind'</span>, <span class="string">'CONTAINER'</span>));
+0575             dataset.save();
+0576             
+0577         <span class="keyword">end</span>
+0578         
+0579         
+0580     <span class="keyword">end</span>
+0581     
+0582 <span class="keyword">end</span>
+0583 
+0584</pre></div>
+<hr><address>Generated on Tue 06-Jul-2021 16:01:18 by <strong><a href="http://www.artefact.tk/software/matlab/m2html/" title="Matlab Documentation in HTML">m2html</a></strong> &copy; 2005</address>
+</body>
+</html>
\ No newline at end of file
diff --git a/html/matlab-openbis/df_to_table.html b/html/matlab-openbis/df_to_table.html
new file mode 100644
index 00000000000..848355f225d
--- /dev/null
+++ b/html/matlab-openbis/df_to_table.html
@@ -0,0 +1,58 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+                "http://www.w3.org/TR/REC-html40/loose.dtd">
+<html>
+<head>
+  <title>Description of df_to_table</title>
+  <meta name="keywords" content="df_to_table">
+  <meta name="description" content="df_to_table">
+  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+  <meta name="generator" content="m2html v1.5 &copy; 2003-2005 Guillaume Flandin">
+  <meta name="robots" content="index, follow">
+  <link type="text/css" rel="stylesheet" href="../m2html.css">
+</head>
+<body>
+<a name="_top"></a>
+<div><a href="../index.html">Home</a> &gt;  <a href="index.html">matlab-openbis</a> &gt; df_to_table.m</div>
+
+<!--<table width="100%"><tr><td align="left"><a href="../index.html"><img alt="<" border="0" src="../left.png">&nbsp;Master index</a></td>
+<td align="right"><a href="index.html">Index for matlab-openbis&nbsp;<img alt=">" border="0" src="../right.png"></a></td></tr></table>-->
+
+<h1>df_to_table
+</h1>
+
+<h2><a name="_name"></a>PURPOSE <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
+<div class="box"><strong>df_to_table</strong></div>
+
+<h2><a name="_synopsis"></a>SYNOPSIS <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
+<div class="box"><strong>function [matlab_table] = df_to_table(df) </strong></div>
+
+<h2><a name="_description"></a>DESCRIPTION <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
+<div class="fragment"><pre class="comment">df_to_table
+   Returns a Matlab table for a Python dataframe</pre></div>
+
+<!-- crossreference -->
+<h2><a name="_cross"></a>CROSS-REFERENCE INFORMATION <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
+This function calls:
+<ul style="list-style-image:url(../matlabicon.gif)">
+</ul>
+This function is called by:
+<ul style="list-style-image:url(../matlabicon.gif)">
+<li><a href="OpenBis.html" class="code" title="">OpenBis</a>	</li></ul>
+<!-- crossreference -->
+
+
+
+<h2><a name="_source"></a>SOURCE CODE <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
+<div class="fragment"><pre>0001 <a name="_sub0" href="#_subfunctions" class="code">function [matlab_table] = df_to_table(df)</a>
+0002 <span class="comment">%df_to_table</span>
+0003 <span class="comment">%   Returns a Matlab table for a Python dataframe</span>
+0004 
+0005 csv_temp = sprintf(<span class="string">'%s.csv'</span>, tempname);
+0006 df.to_csv(csv_temp);
+0007 matlab_table = readtable(csv_temp);
+0008 delete(csv_temp);
+0009 
+0010 <span class="keyword">end</span></pre></div>
+<hr><address>Generated on Tue 06-Jul-2021 16:01:18 by <strong><a href="http://www.artefact.tk/software/matlab/m2html/" title="Matlab Documentation in HTML">m2html</a></strong> &copy; 2005</address>
+</body>
+</html>
\ No newline at end of file
diff --git a/html/matlab-openbis/index.html b/html/matlab-openbis/index.html
new file mode 100644
index 00000000000..229075edff8
--- /dev/null
+++ b/html/matlab-openbis/index.html
@@ -0,0 +1,31 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+                "http://www.w3.org/TR/REC-html40/loose.dtd">
+<html>
+<head>
+  <title>Index for Directory matlab-openbis</title>
+  <meta name="keywords" content="matlab-openbis">
+  <meta name="description" content="Index for Directory matlab-openbis">
+  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+  <meta name="generator" content="m2html v1.5 &copy; 2003-2005 Guillaume Flandin">
+  <meta name="robots" content="index, follow">
+  <link type="text/css" rel="stylesheet" href="../m2html.css">
+</head>
+<body>
+<a name="_top"></a>
+<table width="100%"><tr><td align="left"><a href="../index.html"><img alt="<" border="0" src="../left.png">&nbsp;Master index</a></td>
+<td align="right"><a href="index.html">Index for matlab-openbis&nbsp;<img alt=">" border="0" src="../right.png"></a></td></tr></table>
+
+<h1>Index for matlab-openbis</h1>
+
+<h2>Matlab files in this directory:</h2>
+<table>
+<tr><td><img src="../matlabicon.gif" alt="" border="">&nbsp;<a href="OpenBis.html">OpenBis</a></td><td> </td></tr><tr><td><img src="../matlabicon.gif" alt="" border="">&nbsp;<a href="df_to_table.html">df_to_table</a></td><td>df_to_table </td></tr><tr><td><img src="../matlabicon.gif" alt="" border="">&nbsp;<a href="obi_test.html">obi_test</a></td><td>obi_test Testing function for the Matlab openBIS Toolbox </td></tr><tr><td><img src="../matlabicon.gif" alt="" border="">&nbsp;<a href="passcode.html">passcode</a></td><td>PASSCODE  password input dialog box. </td></tr><tr><td><img src="../matlabicon.gif" alt="" border="">&nbsp;<a href="passwordEntryDialog.html">passwordEntryDialog</a></td><td>PASSWORDENTRYDIALOG </td></tr><tr><td><img src="../matlabicon.gif" alt="" border="">&nbsp;<a href="user_url_pw_input_dialog.html">user_url_pw_input_dialog</a></td><td>user_url_pw_input </td></tr><tr><td><img src="../matlabicon.gif" alt="" border="">&nbsp;<a href="user_url_pw_inputdlg.html">user_url_pw_inputdlg</a></td><td>user_url_pw_inputdlg </td></tr></table>
+
+
+<h2>Subsequent directories:</h2>
+<ul style="list-style-image:url(../matlabicon.gif)">
+<li>.git</li><li>.ipynb_checkpoints</li><li>data</li><li>html</li></ul>
+
+<hr><address>Generated on Tue 06-Jul-2021 16:01:18 by <strong><a href="http://www.artefact.tk/software/matlab/m2html/" title="Matlab Documentation in HTML">m2html</a></strong> &copy; 2005</address>
+</body>
+</html>
\ No newline at end of file
diff --git a/html/matlab-openbis/obi_test.html b/html/matlab-openbis/obi_test.html
new file mode 100644
index 00000000000..c81cf3ecc70
--- /dev/null
+++ b/html/matlab-openbis/obi_test.html
@@ -0,0 +1,116 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+                "http://www.w3.org/TR/REC-html40/loose.dtd">
+<html>
+<head>
+  <title>Description of obi_test</title>
+  <meta name="keywords" content="obi_test">
+  <meta name="description" content="obi_test Testing function for the Matlab openBIS Toolbox">
+  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+  <meta name="generator" content="m2html v1.5 &copy; 2003-2005 Guillaume Flandin">
+  <meta name="robots" content="index, follow">
+  <link type="text/css" rel="stylesheet" href="../m2html.css">
+</head>
+<body>
+<a name="_top"></a>
+<div><a href="../index.html">Home</a> &gt;  <a href="index.html">matlab-openbis</a> &gt; obi_test.m</div>
+
+<!--<table width="100%"><tr><td align="left"><a href="../index.html"><img alt="<" border="0" src="../left.png">&nbsp;Master index</a></td>
+<td align="right"><a href="index.html">Index for matlab-openbis&nbsp;<img alt=">" border="0" src="../right.png"></a></td></tr></table>-->
+
+<h1>obi_test
+</h1>
+
+<h2><a name="_name"></a>PURPOSE <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
+<div class="box"><strong>obi_test Testing function for the Matlab openBIS Toolbox</strong></div>
+
+<h2><a name="_synopsis"></a>SYNOPSIS <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
+<div class="box"><strong>function pass = obi_test(varargin) </strong></div>
+
+<h2><a name="_description"></a>DESCRIPTION <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
+<div class="fragment"><pre class="comment">obi_test Testing function for the Matlab openBIS Toolbox
+   This function runs a few tests for the Matlab openBIS Toolbox. It
+   returns true if all the tests pass successfully and fasle otherwise.
+   Input argumtents (all optional):
+   teardown ... delete everything at the end (true)</pre></div>
+
+<!-- crossreference -->
+<h2><a name="_cross"></a>CROSS-REFERENCE INFORMATION <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
+This function calls:
+<ul style="list-style-image:url(../matlabicon.gif)">
+<li><a href="OpenBis.html" class="code" title="">OpenBis</a>	</li></ul>
+This function is called by:
+<ul style="list-style-image:url(../matlabicon.gif)">
+</ul>
+<!-- crossreference -->
+
+
+
+<h2><a name="_source"></a>SOURCE CODE <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
+<div class="fragment"><pre>0001 <a name="_sub0" href="#_subfunctions" class="code">function pass = obi_test(varargin)</a>
+0002 <span class="comment">%obi_test Testing function for the Matlab openBIS Toolbox</span>
+0003 <span class="comment">%   This function runs a few tests for the Matlab openBIS Toolbox. It</span>
+0004 <span class="comment">%   returns true if all the tests pass successfully and fasle otherwise.</span>
+0005 <span class="comment">%   Input argumtents (all optional):</span>
+0006 <span class="comment">%   teardown ... delete everything at the end (true)</span>
+0007 pass = true;
+0008 
+0009 <span class="keyword">if</span> nargin == 1
+0010     teardown = varargin{1};
+0011 <span class="keyword">else</span>
+0012     teardown = true;
+0013 <span class="keyword">end</span>
+0014 
+0015 <span class="comment">%% 0. Check if pyversion is setup correctly</span>
+0016 
+0017 <span class="comment">%% 1. Login to openBIS</span>
+0018 obi = <a href="OpenBis.html" class="code" title="">OpenBis</a>();
+0019 assert(obi.is_session_active(), <span class="string">'Session not active'</span>);
+0020 
+0021 <span class="comment">%% 2. Create space for test</span>
+0022 space_name = <span class="string">'TESTING_SPACE'</span>;
+0023 <span class="keyword">try</span>
+0024     space = obi.new_space(space_name, <span class="string">'a space for tests of the Matlab openBIS Toolbox'</span>);
+0025 <span class="keyword">catch</span>
+0026     disp(<span class="string">'Could not create requested space'</span>)
+0027     rethrow(lasterror)
+0028 <span class="keyword">end</span>
+0029 spaces = obi.get_spaces();
+0030 assert(any(ismember(spaces.code, space_name)), <span class="string">'Space has not been created'</span>);
+0031 
+0032 <span class="comment">%% 3. Create project for test</span>
+0033 project_name = <span class="string">'TESTING_PROJECT'</span>;
+0034 <span class="keyword">try</span>
+0035     project = obi.new_project(space, project_name, <span class="string">'a project for tests of the Matlab openBIS Toolbox'</span>);
+0036 <span class="keyword">catch</span>
+0037     disp(<span class="string">'Could not create requested project'</span>)
+0038     rethrow(lasterror)
+0039 <span class="keyword">end</span>
+0040 projects = obi.get_projects(space_name, project_name);
+0041 assert(any(ismember(projects.identifier, sprintf(<span class="string">'/%s/%s'</span>, space_name, project_name))), <span class="string">'Project has not been created'</span>);
+0042 
+0043 <span class="comment">%% 4. Create experiment for test</span>
+0044 experiment_name = <span class="string">'TESTING_EXPERIMENT'</span>;
+0045 
+0046 
+0047 <span class="comment">%% 5. Create dataset with dummy files</span>
+0048 
+0049 
+0050 <span class="comment">%% 6. Download the created dataset</span>
+0051 
+0052 
+0053 <span class="comment">%% 7. Tear-down (delete everything, optional)</span>
+0054 <span class="keyword">if</span> teardown
+0055     <span class="comment">% delete project</span>
+0056     obi.delete_project(project_name, <span class="string">'created by Matlab-openBIS toolbox test function'</span>)
+0057     <span class="comment">% delete space</span>
+0058     obi.delete_space(space, <span class="string">'created by Matlab-openBIS toolbox test function'</span>)
+0059 <span class="keyword">end</span>
+0060 
+0061 <span class="comment">%% 8. Logout</span>
+0062 obi.logout()
+0063 
+0064 <span class="keyword">end</span>
+0065</pre></div>
+<hr><address>Generated on Tue 06-Jul-2021 16:01:18 by <strong><a href="http://www.artefact.tk/software/matlab/m2html/" title="Matlab Documentation in HTML">m2html</a></strong> &copy; 2005</address>
+</body>
+</html>
\ No newline at end of file
diff --git a/html/matlab-openbis/passcode.html b/html/matlab-openbis/passcode.html
new file mode 100644
index 00000000000..0ae15324a56
--- /dev/null
+++ b/html/matlab-openbis/passcode.html
@@ -0,0 +1,132 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+                "http://www.w3.org/TR/REC-html40/loose.dtd">
+<html>
+<head>
+  <title>Description of passcode</title>
+  <meta name="keywords" content="passcode">
+  <meta name="description" content="PASSCODE  password input dialog box.">
+  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+  <meta name="generator" content="m2html v1.5 &copy; 2003-2005 Guillaume Flandin">
+  <meta name="robots" content="index, follow">
+  <link type="text/css" rel="stylesheet" href="../m2html.css">
+</head>
+<body>
+<a name="_top"></a>
+<div><a href="../index.html">Home</a> &gt;  <a href="index.html">matlab-openbis</a> &gt; passcode.m</div>
+
+<!--<table width="100%"><tr><td align="left"><a href="../index.html"><img alt="<" border="0" src="../left.png">&nbsp;Master index</a></td>
+<td align="right"><a href="index.html">Index for matlab-openbis&nbsp;<img alt=">" border="0" src="../right.png"></a></td></tr></table>-->
+
+<h1>passcode
+</h1>
+
+<h2><a name="_name"></a>PURPOSE <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
+<div class="box"><strong>PASSCODE  password input dialog box.</strong></div>
+
+<h2><a name="_synopsis"></a>SYNOPSIS <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
+<div class="box"><strong>function pass = passcode </strong></div>
+
+<h2><a name="_description"></a>DESCRIPTION <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
+<div class="fragment"><pre class="comment">PASSCODE  password input dialog box.
+  passcode creates a modal dialog box that returns user password input.
+  Given characters are substituted with '*'-Signs like in usual password dialogs.
+
+  usage:
+  password = PASSCODE
+
+ Adapted from https://www.mathworks.com/matlabcentral/fileexchange/6590-passcode
+ Version: v1.2 (03-Mar-2008)
+ Author:  Elmar Tarajan [MCommander@gmx.de]</pre></div>
+
+<!-- crossreference -->
+<h2><a name="_cross"></a>CROSS-REFERENCE INFORMATION <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
+This function calls:
+<ul style="list-style-image:url(../matlabicon.gif)">
+</ul>
+This function is called by:
+<ul style="list-style-image:url(../matlabicon.gif)">
+<li><a href="user_url_pw_inputdlg.html" class="code" title="function [url, user, pw] = user_url_pw_inputdlg">user_url_pw_inputdlg</a>	user_url_pw_inputdlg</li></ul>
+<!-- crossreference -->
+
+<h2><a name="_subfunctions"></a>SUBFUNCTIONS <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
+<ul style="list-style-image:url(../matlabicon.gif)">
+<li><a href="#_sub1" class="code">function keypress_Callback(~,data,~,hpass,~)</a></li></ul>
+
+<h2><a name="_source"></a>SOURCE CODE <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
+<div class="fragment"><pre>0001 <a name="_sub0" href="#_subfunctions" class="code">function pass = passcode</a>
+0002 <span class="comment">%PASSCODE  password input dialog box.</span>
+0003 <span class="comment">%  passcode creates a modal dialog box that returns user password input.</span>
+0004 <span class="comment">%  Given characters are substituted with '*'-Signs like in usual password dialogs.</span>
+0005 <span class="comment">%</span>
+0006 <span class="comment">%  usage:</span>
+0007 <span class="comment">%  password = PASSCODE</span>
+0008 <span class="comment">%</span>
+0009 <span class="comment">% Adapted from https://www.mathworks.com/matlabcentral/fileexchange/6590-passcode</span>
+0010 <span class="comment">% Version: v1.2 (03-Mar-2008)</span>
+0011 <span class="comment">% Author:  Elmar Tarajan [MCommander@gmx.de]</span>
+0012 
+0013 
+0014 ScreenSize = get(0,<span class="string">'ScreenSize'</span>);
+0015 hfig = figure(<span class="string">'Menubar'</span>,<span class="string">'none'</span>, <span class="keyword">...</span>
+0016     <span class="string">'Units'</span>,<span class="string">'Pixels'</span>, <span class="keyword">...</span>
+0017     <span class="string">'Resize'</span>,<span class="string">'off'</span>, <span class="keyword">...</span>
+0018     <span class="string">'NumberTitle'</span>,<span class="string">'off'</span>, <span class="keyword">...</span>
+0019     <span class="string">'Name'</span>,[<span class="string">'Enter openBIS password'</span>], <span class="keyword">...</span>
+0020     <span class="string">'Position'</span>,[ (ScreenSize(3:4)-[300 75])/2 300 75], <span class="keyword">...</span>
+0021     <span class="string">'Color'</span>,[0.8 0.8 0.8], <span class="keyword">...</span>
+0022     <span class="string">'WindowStyle'</span>,<span class="string">'modal'</span>);
+0023 hedit = uicontrol(<span class="string">'Parent'</span>,hfig, <span class="keyword">...</span>
+0024     <span class="string">'Style'</span>,<span class="string">'Edit'</span>, <span class="keyword">...</span>
+0025     <span class="string">'Enable'</span>,<span class="string">'inactive'</span>, <span class="keyword">...</span>
+0026     <span class="string">'Units'</span>,<span class="string">'Pixels'</span>,<span class="string">'Position'</span>,[49 28 202 22], <span class="keyword">...</span>
+0027     <span class="string">'FontSize'</span>,15, <span class="keyword">...</span>
+0028     <span class="string">'String'</span>,[], <span class="keyword">...</span>
+0029     <span class="string">'BackGroundColor'</span>,[0.7 0.7 0.7]);
+0030 hpass = uicontrol(<span class="string">'Parent'</span>,hfig, <span class="keyword">...</span>
+0031     <span class="string">'Style'</span>,<span class="string">'Text'</span>, <span class="keyword">...</span>
+0032     <span class="string">'Tag'</span>,<span class="string">'password'</span>, <span class="keyword">...</span>
+0033     <span class="string">'Units'</span>,<span class="string">'Pixels'</span>,<span class="string">'Position'</span>,[51 30 198 18], <span class="keyword">...</span>
+0034     <span class="string">'FontSize'</span>,15, <span class="keyword">...</span>
+0035     <span class="string">'BackGroundColor'</span>,[1 1 1]);
+0036 hwarn = uicontrol(<span class="string">'Parent'</span>,hfig, <span class="keyword">...</span>
+0037     <span class="string">'Style'</span>,<span class="string">'Text'</span>, <span class="keyword">...</span>
+0038     <span class="string">'Tag'</span>,<span class="string">'error'</span>, <span class="keyword">...</span>
+0039     <span class="string">'Units'</span>,<span class="string">'Pixels'</span>,<span class="string">'Position'</span>,[50 2 200 20], <span class="keyword">...</span>
+0040     <span class="string">'FontSize'</span>,8, <span class="keyword">...</span>
+0041     <span class="string">'String'</span>,<span class="string">'character not allowed'</span>,<span class="keyword">...</span>
+0042     <span class="string">'Visible'</span>,<span class="string">'off'</span>,<span class="keyword">...</span>
+0043     <span class="string">'ForeGroundColor'</span>,[1 0 0], <span class="keyword">...</span>
+0044     <span class="string">'BackGroundColor'</span>,[0.8 0.8 0.8]);
+0045 
+0046 set(hfig,<span class="string">'KeyPressFcn'</span>,{@<a href="#_sub1" class="code" title="subfunction keypress_Callback(~,data,~,hpass,~)">keypress_Callback</a>,hedit,hpass,hwarn}, <span class="keyword">...</span>
+0047     <span class="string">'CloseRequestFcn'</span>,<span class="string">'uiresume'</span>)
+0048 
+0049 uiwait
+0050 pass = get(hpass,<span class="string">'userdata'</span>);
+0051 delete(hfig)
+0052 
+0053 
+0054 <a name="_sub1" href="#_subfunctions" class="code">function keypress_Callback(~,data,~,hpass,~)</a>
+0055 
+0056 pass = get(hpass,<span class="string">'userdata'</span>);
+0057 
+0058 <span class="keyword">switch</span> data.Key
+0059     <span class="keyword">case</span> <span class="string">'backspace'</span>
+0060         pass = pass(1:end-1);
+0061     <span class="keyword">case</span> <span class="string">'return'</span>
+0062         uiresume
+0063         <span class="keyword">return</span>
+0064     <span class="keyword">otherwise</span>
+0065         <span class="keyword">try</span>
+0066             pass = [pass data.Character];
+0067         <span class="keyword">catch</span>
+0068             disp(<span class="string">'Some error occured during password entry!'</span>)
+0069         <span class="keyword">end</span>
+0070 <span class="keyword">end</span>
+0071 
+0072 set(hpass,<span class="string">'userdata'</span>,pass)
+0073 set(hpass,<span class="string">'String'</span>,char(<span class="string">'*'</span>*sign(pass)))
+0074</pre></div>
+<hr><address>Generated on Tue 06-Jul-2021 16:01:18 by <strong><a href="http://www.artefact.tk/software/matlab/m2html/" title="Matlab Documentation in HTML">m2html</a></strong> &copy; 2005</address>
+</body>
+</html>
\ No newline at end of file
diff --git a/html/matlab-openbis/passwordEntryDialog.html b/html/matlab-openbis/passwordEntryDialog.html
new file mode 100644
index 00000000000..73a7a2d48b9
--- /dev/null
+++ b/html/matlab-openbis/passwordEntryDialog.html
@@ -0,0 +1,540 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+                "http://www.w3.org/TR/REC-html40/loose.dtd">
+<html>
+<head>
+  <title>Description of passwordEntryDialog</title>
+  <meta name="keywords" content="passwordEntryDialog">
+  <meta name="description" content="PASSWORDENTRYDIALOG">
+  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+  <meta name="generator" content="m2html v1.5 &copy; 2003-2005 Guillaume Flandin">
+  <meta name="robots" content="index, follow">
+  <link type="text/css" rel="stylesheet" href="../m2html.css">
+</head>
+<body>
+<a name="_top"></a>
+<div><a href="../index.html">Home</a> &gt;  <a href="index.html">matlab-openbis</a> &gt; passwordEntryDialog.m</div>
+
+<!--<table width="100%"><tr><td align="left"><a href="../index.html"><img alt="<" border="0" src="../left.png">&nbsp;Master index</a></td>
+<td align="right"><a href="index.html">Index for matlab-openbis&nbsp;<img alt=">" border="0" src="../right.png"></a></td></tr></table>-->
+
+<h1>passwordEntryDialog
+</h1>
+
+<h2><a name="_name"></a>PURPOSE <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
+<div class="box"><strong>PASSWORDENTRYDIALOG</strong></div>
+
+<h2><a name="_synopsis"></a>SYNOPSIS <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
+<div class="box"><strong>function [Password, UserName] = passwordEntryDialog(varargin) </strong></div>
+
+<h2><a name="_description"></a>DESCRIPTION <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
+<div class="fragment"><pre class="comment"> PASSWORDENTRYDIALOG
+ [Password, UserName] = passwordEntryDialog(varargin)
+
+ Create a password entry dialog for entering a password that is visibly
+ hidden.  Java must be enabled for this function to work properly.
+
+ It has only been tested on the Windows platform in R2008a.  It should
+ work in R2007a or later.
+
+ The password box is created using the Java Swing component
+ JPasswordField.
+
+ Optional Input Arguments
+ ------------------------
+
+ 'enterUserName'       DEFAULT: false
+ Display the user name entry box.  The user name entered must be at least
+ one character or an error dialog is displayed.
+
+ 'DefaultUserName'     DEFAULT: ''
+ String value of user name to populate in User Name box upon creation.
+
+ 'ValidatePassword'    DEFAULT: false
+ Display dialog box to reenter password for validation purposes.
+
+ 'CheckPasswordLength' DEFAULT: true
+ Check the password length to ensure it meets the specified criteria.
+
+ 'PasswordLengthMin'   DEFAULT: 2
+ Minimum password length allowed.
+
+ 'PasswordLengthMax'   DEFAULT: 8
+ Maximum password length allowed.
+
+ 'WindowName'          DEFAULT: 'Login'
+ Title of the password entry window.
+
+ Examples
+ --------
+
+ Create a password dialog box with the default options.
+ -----------------------------------------------------------------------
+ [Password] = passwordEntryDialog;
+
+ Create a user name and password entry dialog box without password
+ verification.
+ -----------------------------------------------------------------------
+ [Password, UserName] = passwordEntryDialog('enterUserName', true)
+
+ Create a user name and password entry dialog box without password
+ verification.  Set the user name to 'jdoe' upon startup.
+ -----------------------------------------------------------------------
+ [Password, UserName] = passwordEntryDialog('enterUserName', true,...
+      'DefaultUserName', 'jdoe')
+
+ Create a password dialog box with password validation
+ -----------------------------------------------------------------------
+ [Password] = passwordEntryDialog('ValidatePassword', true);
+
+ Create a user name and password entry dialog box with password
+ verification.
+ -----------------------------------------------------------------------
+ [Password, UserName] = passwordEntryDialog('enterUserName', true,...
+      'ValidatePassword', true)
+
+ Check the length of the password to be between 5 and 8 characters
+ -----------------------------------------------------------------------
+ [Password, UserName] = passwordEntryDialog('CheckPasswordLength', true,...
+      'PasswordLengthMin', 5,...
+      'PasswordLengthMax', 8)
+
+ -----------------------------------------------------------------------
+ Copyright (C) 2007-2008, Jesse B. Lai
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;</pre></div>
+
+<!-- crossreference -->
+<h2><a name="_cross"></a>CROSS-REFERENCE INFORMATION <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
+This function calls:
+<ul style="list-style-image:url(../matlabicon.gif)">
+</ul>
+This function is called by:
+<ul style="list-style-image:url(../matlabicon.gif)">
+</ul>
+<!-- crossreference -->
+
+<h2><a name="_subfunctions"></a>SUBFUNCTIONS <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
+<ul style="list-style-image:url(../matlabicon.gif)">
+<li><a href="#_sub1" class="code">function pushbutton_KeyPressFcn(hObject, eventdata, handles, ProgramOptions)</a></li><li><a href="#_sub2" class="code">function pushbutton_OK_Callback(hObject, eventdata, handles, ProgramOptions)</a></li><li><a href="#_sub3" class="code">function pushbutton_Cancel_Callback(hObject, eventdata, handles, ProgramOptions)</a></li></ul>
+
+<h2><a name="_source"></a>SOURCE CODE <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
+<div class="fragment"><pre>0001 <a name="_sub0" href="#_subfunctions" class="code">function [Password, UserName] = passwordEntryDialog(varargin)</a>
+0002 <span class="comment">% PASSWORDENTRYDIALOG</span>
+0003 <span class="comment">% [Password, UserName] = passwordEntryDialog(varargin)</span>
+0004 <span class="comment">%</span>
+0005 <span class="comment">% Create a password entry dialog for entering a password that is visibly</span>
+0006 <span class="comment">% hidden.  Java must be enabled for this function to work properly.</span>
+0007 <span class="comment">%</span>
+0008 <span class="comment">% It has only been tested on the Windows platform in R2008a.  It should</span>
+0009 <span class="comment">% work in R2007a or later.</span>
+0010 <span class="comment">%</span>
+0011 <span class="comment">% The password box is created using the Java Swing component</span>
+0012 <span class="comment">% JPasswordField.</span>
+0013 <span class="comment">%</span>
+0014 <span class="comment">% Optional Input Arguments</span>
+0015 <span class="comment">% ------------------------</span>
+0016 <span class="comment">%</span>
+0017 <span class="comment">% 'enterUserName'       DEFAULT: false</span>
+0018 <span class="comment">% Display the user name entry box.  The user name entered must be at least</span>
+0019 <span class="comment">% one character or an error dialog is displayed.</span>
+0020 <span class="comment">%</span>
+0021 <span class="comment">% 'DefaultUserName'     DEFAULT: ''</span>
+0022 <span class="comment">% String value of user name to populate in User Name box upon creation.</span>
+0023 <span class="comment">%</span>
+0024 <span class="comment">% 'ValidatePassword'    DEFAULT: false</span>
+0025 <span class="comment">% Display dialog box to reenter password for validation purposes.</span>
+0026 <span class="comment">%</span>
+0027 <span class="comment">% 'CheckPasswordLength' DEFAULT: true</span>
+0028 <span class="comment">% Check the password length to ensure it meets the specified criteria.</span>
+0029 <span class="comment">%</span>
+0030 <span class="comment">% 'PasswordLengthMin'   DEFAULT: 2</span>
+0031 <span class="comment">% Minimum password length allowed.</span>
+0032 <span class="comment">%</span>
+0033 <span class="comment">% 'PasswordLengthMax'   DEFAULT: 8</span>
+0034 <span class="comment">% Maximum password length allowed.</span>
+0035 <span class="comment">%</span>
+0036 <span class="comment">% 'WindowName'          DEFAULT: 'Login'</span>
+0037 <span class="comment">% Title of the password entry window.</span>
+0038 <span class="comment">%</span>
+0039 <span class="comment">% Examples</span>
+0040 <span class="comment">% --------</span>
+0041 <span class="comment">%</span>
+0042 <span class="comment">% Create a password dialog box with the default options.</span>
+0043 <span class="comment">% -----------------------------------------------------------------------</span>
+0044 <span class="comment">% [Password] = passwordEntryDialog;</span>
+0045 <span class="comment">%</span>
+0046 <span class="comment">% Create a user name and password entry dialog box without password</span>
+0047 <span class="comment">% verification.</span>
+0048 <span class="comment">% -----------------------------------------------------------------------</span>
+0049 <span class="comment">% [Password, UserName] = passwordEntryDialog('enterUserName', true)</span>
+0050 <span class="comment">%</span>
+0051 <span class="comment">% Create a user name and password entry dialog box without password</span>
+0052 <span class="comment">% verification.  Set the user name to 'jdoe' upon startup.</span>
+0053 <span class="comment">% -----------------------------------------------------------------------</span>
+0054 <span class="comment">% [Password, UserName] = passwordEntryDialog('enterUserName', true,...</span>
+0055 <span class="comment">%      'DefaultUserName', 'jdoe')</span>
+0056 <span class="comment">%</span>
+0057 <span class="comment">% Create a password dialog box with password validation</span>
+0058 <span class="comment">% -----------------------------------------------------------------------</span>
+0059 <span class="comment">% [Password] = passwordEntryDialog('ValidatePassword', true);</span>
+0060 <span class="comment">%</span>
+0061 <span class="comment">% Create a user name and password entry dialog box with password</span>
+0062 <span class="comment">% verification.</span>
+0063 <span class="comment">% -----------------------------------------------------------------------</span>
+0064 <span class="comment">% [Password, UserName] = passwordEntryDialog('enterUserName', true,...</span>
+0065 <span class="comment">%      'ValidatePassword', true)</span>
+0066 <span class="comment">%</span>
+0067 <span class="comment">% Check the length of the password to be between 5 and 8 characters</span>
+0068 <span class="comment">% -----------------------------------------------------------------------</span>
+0069 <span class="comment">% [Password, UserName] = passwordEntryDialog('CheckPasswordLength', true,...</span>
+0070 <span class="comment">%      'PasswordLengthMin', 5,...</span>
+0071 <span class="comment">%      'PasswordLengthMax', 8)</span>
+0072 <span class="comment">%</span>
+0073 <span class="comment">% -----------------------------------------------------------------------</span>
+0074 <span class="comment">% Copyright (C) 2007-2008, Jesse B. Lai</span>
+0075 <span class="comment">%</span>
+0076 <span class="comment">% This program is free software: you can redistribute it and/or modify</span>
+0077 <span class="comment">% it under the terms of the GNU Lesser General Public License as published</span>
+0078 <span class="comment">% by the Free Software Foundation, either version 3 of the License, or</span>
+0079 <span class="comment">% (at your option) any later version.</span>
+0080 <span class="comment">%</span>
+0081 <span class="comment">% This program is distributed in the hope that it will be useful,</span>
+0082 <span class="comment">% but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+0083 <span class="comment">% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+0084 <span class="comment">% GNU Lesser General Public License for more details.</span>
+0085 <span class="comment">%</span>
+0086 <span class="comment">% You should have received a copy of the GNU Lesser General Public License</span>
+0087 <span class="comment">% along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;</span>
+0088 
+0089 <span class="comment">%% History</span>
+0090 <span class="comment">% The history of this program is outlined in this section.</span>
+0091 <span class="comment">%</span>
+0092 <span class="comment">% 20080616 - JBL - 0.0.2</span>
+0093 <span class="comment">% Started 20080612</span>
+0094 <span class="comment">%</span>
+0095 <span class="comment">% Updated to remove requirement for uicomponent function written by Yair</span>
+0096 <span class="comment">% Altman.  Now, the Java components are created manually and the</span>
+0097 <span class="comment">% undocumented feature javacomponent is used.</span>
+0098 <span class="comment">%</span>
+0099 <span class="comment">% A focus issue was worked out by using the drawnow command in a couple of</span>
+0100 <span class="comment">% places to allow the objects to be focused properly upon startup.</span>
+0101 <span class="comment">%</span>
+0102 <span class="comment">% 20080427 - JBL - 0.0.1</span>
+0103 <span class="comment">% Started 20080425.</span>
+0104 <span class="comment">%</span>
+0105 <span class="comment">% Initial version.  Uses Java to create the password entry box.  An edit</span>
+0106 <span class="comment">% box was initially attemped with the Java frame, but was occasionally</span>
+0107 <span class="comment">% getting Java exceptions when trying to query the 'SelectionStart' and</span>
+0108 <span class="comment">% 'SelectionEnd' properties.</span>
+0109 <span class="comment">%</span>
+0110 <span class="comment">% Basic options of entering user name and password with options for</span>
+0111 <span class="comment">% password validation.</span>
+0112 <span class="comment">%</span>
+0113 <span class="comment">% ToDo: Maybe add valid string input argument to only allow certain</span>
+0114 <span class="comment">% characters.</span>
+0115 
+0116 <span class="comment">%% Program Information</span>
+0117 
+0118 <span class="comment">% ProgramName = 'passwordEntryDialog';</span>
+0119 <span class="comment">% ProgramVersion = '0.0.2';</span>
+0120 <span class="comment">% svnRevision = '$Revision: 184 $';</span>
+0121 <span class="comment">% svnRevision = getSVNRevision(svnRevision);</span>
+0122 <span class="comment">% ProgramVersion = [ProgramVersion, '.' ,svnRevision];</span>
+0123 <span class="comment">%</span>
+0124 <span class="comment">% LastChangedDate = '$LastChangedDate: 2008-06-16 09:08:17 -0600 (Mon, 16 Jun 2008) $';</span>
+0125 <span class="comment">% ProgramDate = getSVNDate(LastChangedDate);</span>
+0126 
+0127 <span class="comment">%% Check for Existance of Java</span>
+0128 <span class="keyword">if</span> ~usejava(<span class="string">'swing'</span>)
+0129    error(<span class="string">'passwordEntryDialog: Java is required for this program to run.'</span>);
+0130 <span class="keyword">end</span>
+0131 
+0132 <span class="comment">%% Parse Input Arguments</span>
+0133 <span class="comment">% Input arguments are parsed with the MATLAB inputParser class.</span>
+0134 
+0135 <span class="comment">% Create input parser object</span>
+0136 ProgramOptionsParser = inputParser;
+0137 ProgramOptionsParser.KeepUnmatched = true;
+0138 
+0139 ProgramOptionsParser.addParamValue(<span class="string">'enterUserName'</span>, false, @(x) islogical(x) || isnumeric(x));
+0140 ProgramOptionsParser.addParamValue(<span class="string">'DefaultUserName'</span>, <span class="string">''</span>, @ischar);
+0141 ProgramOptionsParser.addParamValue(<span class="string">'ValidatePassword'</span>, false, @(x) islogical(x) || isnumeric(x));
+0142 ProgramOptionsParser.addParamValue(<span class="string">'CheckPasswordLength'</span>, true, @(x) islogical(x) || isnumeric(x));
+0143 ProgramOptionsParser.addParamValue(<span class="string">'PasswordLengthMin'</span>, 2, @isnumeric);
+0144 ProgramOptionsParser.addParamValue(<span class="string">'PasswordLengthMax'</span>, 8, @isnumeric);
+0145 ProgramOptionsParser.addParamValue(<span class="string">'WindowName'</span>, <span class="string">'Login'</span>, @ischar);
+0146 
+0147 <span class="comment">% Parse Input Arguments</span>
+0148 <span class="keyword">try</span>
+0149     ProgramOptionsParser.parse(varargin{:});
+0150 <span class="keyword">catch</span> Error
+0151     ProgramOptionsParser.parse;
+0152     <span class="keyword">if</span> strcmpi(Error.identifier, <span class="string">'MATLAB:InputParser:ArgumentFailedValidation'</span>)
+0153         error(Error.identifier, Error.message);
+0154     <span class="keyword">end</span>;
+0155 <span class="keyword">end</span>;
+0156 
+0157 ProgramOptions = ProgramOptionsParser.Results;
+0158 
+0159 <span class="comment">% Validate password length options</span>
+0160 <span class="keyword">if</span> ProgramOptions.CheckPasswordLength
+0161     <span class="keyword">if</span> ProgramOptions.PasswordLengthMax &lt; ProgramOptions.PasswordLengthMin
+0162         error(<span class="string">'MATLAB:InputParser:ArgumentFailedValidation'</span>, <span class="string">'PasswordLengthMax must be greater than PasswordLengthMin'</span>);
+0163     <span class="keyword">end</span>;
+0164 <span class="keyword">end</span>;
+0165 
+0166 <span class="comment">%% Determine GUI Size and Position</span>
+0167 <span class="comment">% Center the GUI on the screen.</span>
+0168 
+0169 set(0,<span class="string">'Units'</span>,<span class="string">'pixels'</span>)
+0170 Screen = get(0,<span class="string">'screensize'</span>);
+0171 
+0172 PositionGUI = [0 0 300 50];
+0173 <span class="keyword">if</span> ProgramOptions.enterUserName
+0174     PositionGUI = PositionGUI + [0 0 0 50];
+0175 <span class="keyword">end</span>;
+0176 <span class="keyword">if</span> ProgramOptions.ValidatePassword
+0177     PositionGUI = PositionGUI + [0 0 0 50];
+0178     OffsetBottom = 43;
+0179 <span class="keyword">else</span>
+0180     OffsetBottom = 0;
+0181 <span class="keyword">end</span>;
+0182 
+0183 PositionGUI = [Screen(3:4)/2-PositionGUI(3:4)/2 PositionGUI(3:4)];
+0184 PositionLeft = 10;
+0185 BoxWidth = 200;
+0186 
+0187 <span class="comment">%% Create the GUI</span>
+0188 
+0189 BackgroundColor = get(0,<span class="string">'DefaultUicontrolBackgroundcolor'</span>);
+0190 handles.figure1 = figure(<span class="string">'Menubar'</span>,<span class="string">'none'</span>, <span class="keyword">...</span>
+0191     <span class="string">'Units'</span>,<span class="string">'Pixels'</span>, <span class="keyword">...</span>
+0192     <span class="string">'Resize'</span>,<span class="string">'off'</span>, <span class="keyword">...</span>
+0193     <span class="string">'NumberTitle'</span>,<span class="string">'off'</span>, <span class="keyword">...</span>
+0194     <span class="string">'Name'</span>,ProgramOptions.WindowName, <span class="keyword">...</span>
+0195     <span class="string">'Position'</span>,PositionGUI, <span class="keyword">...</span>
+0196     <span class="string">'Color'</span>, BackgroundColor, <span class="keyword">...</span>
+0197     <span class="string">'WindowStyle'</span>,<span class="string">'modal'</span>);
+0198 
+0199 <span class="comment">% Create Password Validation Entry Box</span>
+0200 <span class="keyword">if</span> ProgramOptions.ValidatePassword
+0201     handles.java_PasswordValidate = javax.swing.JPasswordField();
+0202     handles.java_PasswordValidate.setFocusable(true);
+0203     [handles.java_PasswordValidate, handles.edit_PasswordValidate] = javacomponent(handles.java_PasswordValidate, [], handles.figure1);
+0204 
+0205     set(handles.edit_PasswordValidate, <span class="keyword">...</span>
+0206         <span class="string">'Parent'</span>, handles.figure1, <span class="keyword">...</span>
+0207         <span class="string">'Tag'</span>, <span class="string">'edit_PasswordValidate'</span>, <span class="keyword">...</span>
+0208         <span class="string">'Units'</span>, <span class="string">'Pixels'</span>, <span class="keyword">...</span>
+0209         <span class="string">'Position'</span>,[PositionLeft 10 BoxWidth 23]);
+0210 
+0211     handles.text_LabelPasswordValidate = uicontrol(<span class="string">'Parent'</span>,handles.figure1, <span class="keyword">...</span>
+0212         <span class="string">'Tag'</span>, <span class="string">'text_LabelPassword'</span>, <span class="keyword">...</span>
+0213         <span class="string">'Style'</span>,<span class="string">'Text'</span>, <span class="keyword">...</span>
+0214         <span class="string">'Units'</span>,<span class="string">'Pixels'</span>,<span class="keyword">...</span>
+0215         <span class="string">'Position'</span>,[PositionLeft 33 BoxWidth 16], <span class="keyword">...</span>
+0216         <span class="string">'FontSize'</span>,10, <span class="keyword">...</span>
+0217         <span class="string">'String'</span>,<span class="string">'Reenter password:'</span>,<span class="keyword">...</span>
+0218         <span class="string">'HorizontalAlignment'</span>, <span class="string">'Left'</span>);
+0219 <span class="keyword">end</span>;
+0220 
+0221 <span class="comment">% Create Password Entry Box</span>
+0222 handles.java_Password = javax.swing.JPasswordField();
+0223 [handles.java_Password, handles.edit_Password] = javacomponent(handles.java_Password, [PositionLeft 10+OffsetBottom BoxWidth 23], handles.figure1);
+0224 handles.java_Password.setFocusable(true);
+0225 
+0226 set(handles.edit_Password, <span class="keyword">...</span>
+0227     <span class="string">'Parent'</span>, handles.figure1, <span class="keyword">...</span>
+0228     <span class="string">'Tag'</span>, <span class="string">'edit_Password'</span>, <span class="keyword">...</span>
+0229     <span class="string">'Units'</span>, <span class="string">'Pixels'</span>, <span class="keyword">...</span>
+0230     <span class="string">'Position'</span>,[PositionLeft 10+OffsetBottom BoxWidth 23]);
+0231 drawnow;    <span class="comment">% This drawnow is required to allow the focus to work</span>
+0232    
+0233 handles.text_LabelPassword = uicontrol(<span class="string">'Parent'</span>,handles.figure1, <span class="keyword">...</span>
+0234     <span class="string">'Tag'</span>, <span class="string">'text_LabelPassword'</span>, <span class="keyword">...</span>
+0235     <span class="string">'Style'</span>,<span class="string">'Text'</span>, <span class="keyword">...</span>
+0236     <span class="string">'Units'</span>,<span class="string">'Pixels'</span>,<span class="keyword">...</span>
+0237     <span class="string">'Position'</span>,[PositionLeft 33+OffsetBottom BoxWidth 16], <span class="keyword">...</span>
+0238     <span class="string">'FontSize'</span>,10, <span class="keyword">...</span>
+0239     <span class="string">'String'</span>,<span class="string">'Key:'</span>,<span class="keyword">...</span>
+0240     <span class="string">'HorizontalAlignment'</span>, <span class="string">'Left'</span>);
+0241 
+0242 <span class="comment">% Create OK Pushbutton</span>
+0243 handles.pushbutton_OK = uicontrol(<span class="string">'Parent'</span>,handles.figure1, <span class="keyword">...</span>
+0244     <span class="string">'Tag'</span>, <span class="string">'pushbutton_OK'</span>, <span class="keyword">...</span>
+0245     <span class="string">'Style'</span>,<span class="string">'Pushbutton'</span>, <span class="keyword">...</span>
+0246     <span class="string">'Units'</span>,<span class="string">'Pixels'</span>,<span class="keyword">...</span>
+0247     <span class="string">'Position'</span>,[PositionLeft+BoxWidth+5 10 30 23], <span class="keyword">...</span>
+0248     <span class="string">'FontSize'</span>,10, <span class="keyword">...</span>
+0249     <span class="string">'String'</span>,<span class="string">'OK'</span>,<span class="keyword">...</span>
+0250     <span class="string">'HorizontalAlignment'</span>, <span class="string">'Center'</span>);
+0251 
+0252 <span class="comment">% Create Cancel Pushbutton</span>
+0253 handles.pushbutton_Cancel = uicontrol(<span class="string">'Parent'</span>,handles.figure1, <span class="keyword">...</span>
+0254     <span class="string">'Tag'</span>, <span class="string">'pushbutton_Cancel'</span>, <span class="keyword">...</span>
+0255     <span class="string">'Style'</span>,<span class="string">'Pushbutton'</span>, <span class="keyword">...</span>
+0256     <span class="string">'Units'</span>,<span class="string">'Pixels'</span>,<span class="keyword">...</span>
+0257     <span class="string">'Position'</span>,[PositionLeft+BoxWidth+30+7 10 50 23], <span class="keyword">...</span>
+0258     <span class="string">'FontSize'</span>,10, <span class="keyword">...</span>
+0259     <span class="string">'String'</span>,<span class="string">'Cancel'</span>,<span class="keyword">...</span>
+0260     <span class="string">'HorizontalAlignment'</span>, <span class="string">'Center'</span>);
+0261 
+0262 <span class="comment">% Create User Name Edit Box</span>
+0263 <span class="keyword">if</span> ProgramOptions.enterUserName
+0264     handles.java_UserName = javax.swing.JTextField();
+0265     handles.java_UserName.setFocusable(true);
+0266     [handles.java_UserName, handles.edit_UserName] = javacomponent(handles.java_UserName, [], handles.figure1);
+0267 
+0268     set(handles.edit_UserName, <span class="keyword">...</span>
+0269         <span class="string">'Parent'</span>, handles.figure1, <span class="keyword">...</span>
+0270         <span class="string">'Tag'</span>, <span class="string">'edit_UserName'</span>, <span class="keyword">...</span>
+0271         <span class="string">'Units'</span>, <span class="string">'Pixels'</span>, <span class="keyword">...</span>
+0272         <span class="string">'Position'</span>,[PositionLeft 53+OffsetBottom 200 23]);
+0273     set(handles.java_UserName, <span class="string">'Text'</span>, ProgramOptions.DefaultUserName);
+0274     drawnow;    <span class="comment">% This drawnow is required to allow the focus to work</span>
+0275 
+0276     handles.text_LabelUserName = uicontrol(<span class="string">'Parent'</span>,handles.figure1, <span class="keyword">...</span>
+0277         <span class="string">'Tag'</span>, <span class="string">'text_LabelUserName'</span>, <span class="keyword">...</span>
+0278         <span class="string">'Style'</span>,<span class="string">'Text'</span>, <span class="keyword">...</span>
+0279         <span class="string">'Units'</span>,<span class="string">'Pixels'</span>,<span class="keyword">...</span>
+0280         <span class="string">'Position'</span>,[PositionLeft 76+OffsetBottom 200 16], <span class="keyword">...</span>
+0281         <span class="string">'FontSize'</span>,10, <span class="keyword">...</span>
+0282         <span class="string">'String'</span>,<span class="string">'User name:'</span>,<span class="keyword">...</span>
+0283         <span class="string">'HorizontalAlignment'</span>, <span class="string">'Left'</span>);
+0284 
+0285     <span class="comment">%uicontrol(handles.edit_UserName);</span>
+0286     <span class="comment">%set(handles.figure1,'CurrentObject',handles.java_UserName)</span>
+0287     handles.java_UserName.requestFocus;     <span class="comment">% Get focus</span>
+0288     drawnow;
+0289 <span class="keyword">else</span>
+0290     handles.java_Password.requestFocus;     <span class="comment">% Get focus</span>
+0291     drawnow;
+0292 <span class="keyword">end</span>;
+0293 
+0294 <span class="comment">%% Setup Callbacks for Objects</span>
+0295 <span class="comment">% Adds the callback functions for the objects in the GUI</span>
+0296 
+0297 set(handles.pushbutton_OK,     <span class="string">'Callback'</span>, {@<a href="#_sub2" class="code" title="subfunction pushbutton_OK_Callback(hObject, eventdata, handles, ProgramOptions)">pushbutton_OK_Callback</a>, handles, ProgramOptions}, <span class="string">'KeyPressFcn'</span>, {@<a href="#_sub1" class="code" title="subfunction pushbutton_KeyPressFcn(hObject, eventdata, handles, ProgramOptions)">pushbutton_KeyPressFcn</a>, handles, ProgramOptions});
+0298 set(handles.pushbutton_Cancel, <span class="string">'Callback'</span>, {@<a href="#_sub3" class="code" title="subfunction pushbutton_Cancel_Callback(hObject, eventdata, handles, ProgramOptions)">pushbutton_Cancel_Callback</a>, handles, ProgramOptions}, <span class="string">'KeyPressFcn'</span>, {@<a href="#_sub1" class="code" title="subfunction pushbutton_KeyPressFcn(hObject, eventdata, handles, ProgramOptions)">pushbutton_KeyPressFcn</a>, handles, ProgramOptions});
+0299 set(handles.java_Password, <span class="string">'ActionPerformedCallback'</span>, {@<a href="#_sub2" class="code" title="subfunction pushbutton_OK_Callback(hObject, eventdata, handles, ProgramOptions)">pushbutton_OK_Callback</a>, handles, ProgramOptions});
+0300 
+0301 <span class="keyword">if</span> ProgramOptions.ValidatePassword
+0302     <span class="keyword">if</span> ProgramOptions.enterUserName
+0303         ObjectNext = handles.java_UserName;
+0304     <span class="keyword">else</span>
+0305         ObjectNext = handles.java_Password;
+0306     <span class="keyword">end</span>;
+0307     set(handles.java_PasswordValidate, <span class="string">'ActionPerformedCallback'</span>, {@<a href="#_sub2" class="code" title="subfunction pushbutton_OK_Callback(hObject, eventdata, handles, ProgramOptions)">pushbutton_OK_Callback</a>, handles, ProgramOptions}, <span class="string">'NextFocusableComponent'</span>, ObjectNext);
+0308     set(handles.java_Password, <span class="string">'NextFocusableComponent'</span>, handles.java_PasswordValidate);
+0309 <span class="keyword">elseif</span> ProgramOptions.enterUserName
+0310     set(handles.java_Password, <span class="string">'NextFocusableComponent'</span>, handles.java_UserName);
+0311 <span class="keyword">end</span>;
+0312 
+0313 <span class="keyword">if</span> ProgramOptions.enterUserName
+0314     set(handles.java_UserName, <span class="string">'ActionPerformedCallback'</span>, {@<a href="#_sub2" class="code" title="subfunction pushbutton_OK_Callback(hObject, eventdata, handles, ProgramOptions)">pushbutton_OK_Callback</a>, handles, ProgramOptions}, <span class="string">'NextFocusableComponent'</span>, handles.java_Password);
+0315 <span class="keyword">end</span>;
+0316 
+0317 setappdata(handles.figure1, <span class="string">'isCanceled'</span>, false);
+0318 
+0319 <span class="comment">%% Wait for Completion</span>
+0320 
+0321 <span class="comment">% Wait for the user to complete entry.</span>
+0322 drawnow;
+0323 uiwait(handles.figure1);
+0324 
+0325 <span class="comment">%% Get current information</span>
+0326 <span class="comment">% User either closed the window or pressed cancel or OK.</span>
+0327 
+0328 isCanceled = ~ishandle(handles.figure1) || getappdata(handles.figure1, <span class="string">'isCanceled'</span>);
+0329 <span class="keyword">if</span> isCanceled
+0330     <span class="keyword">if</span> ishandle(handles.figure1)
+0331         delete(handles.figure1);
+0332     <span class="keyword">end</span>;
+0333     Password = -1;
+0334     UserName = <span class="string">''</span>;
+0335     <span class="keyword">return</span>;
+0336 <span class="keyword">end</span>;
+0337 
+0338 Password = handles.java_Password.Password';
+0339 <span class="keyword">if</span> ProgramOptions.enterUserName
+0340     UserName = strtrim(get(handles.java_UserName, <span class="string">'Text'</span>));
+0341 <span class="keyword">else</span>
+0342     UserName = <span class="string">''</span>;
+0343 <span class="keyword">end</span>;
+0344 delete(handles.figure1);
+0345 
+0346 <span class="comment">%% DEFINE FUNCTIONS</span>
+0347 <span class="comment">% The subfunctions required by this program are in the following section.</span>
+0348 
+0349 <a name="_sub1" href="#_subfunctions" class="code">function pushbutton_KeyPressFcn(hObject, eventdata, handles, ProgramOptions)</a>
+0350 
+0351 <span class="keyword">switch</span> eventdata.Key
+0352     <span class="keyword">case</span> <span class="string">'return'</span>
+0353         Callback = get(hObject, <span class="string">'Callback'</span>);
+0354         feval(Callback{1}, hObject, <span class="string">''</span>, Callback{2:end});
+0355 <span class="keyword">end</span>;
+0356 
+0357 <a name="_sub2" href="#_subfunctions" class="code">function pushbutton_OK_Callback(hObject, eventdata, handles, ProgramOptions)</a>
+0358 <span class="keyword">if</span> ProgramOptions.enterUserName
+0359     <span class="comment">% Check if username is blank</span>
+0360     UserName = strtrim(get(handles.java_UserName, <span class="string">'Text'</span>));
+0361     <span class="keyword">if</span> isempty(UserName)
+0362         strMessage = <span class="string">'Username is blank'</span>;
+0363         <span class="comment">%disp(strMessage)</span>
+0364         hError = errordlg(strMessage, <span class="string">'passwordEntryDialog'</span>);
+0365         uiwait(hError);
+0366         <span class="keyword">return</span>;
+0367     <span class="keyword">end</span>;
+0368 <span class="keyword">end</span>;
+0369 
+0370 <span class="keyword">if</span> ProgramOptions.CheckPasswordLength
+0371     <span class="comment">%Password = handles.edit_Password.Password';</span>
+0372     Password = handles.java_Password.Password';
+0373     <span class="keyword">if</span> length(Password) &lt; ProgramOptions.PasswordLengthMin || length(Password) &gt; ProgramOptions.PasswordLengthMax
+0374         strMessage = sprintf(<span class="string">'Password must be between %d and %d characters'</span>, <span class="keyword">...</span>
+0375             ProgramOptions.PasswordLengthMin, <span class="keyword">...</span>
+0376             ProgramOptions.PasswordLengthMax);
+0377         <span class="comment">%disp(strMessage);</span>
+0378         hError = errordlg(strMessage, <span class="string">'passwordEntryDialog'</span>);
+0379         uiwait(hError);
+0380         <span class="keyword">if</span> ProgramOptions.ValidatePassword
+0381             set(handles.java_PasswordValidate,<span class="string">'Text'</span>, <span class="string">''</span>);
+0382         <span class="keyword">end</span>;
+0383         handles.java_Password.requestFocus
+0384         <span class="keyword">return</span>;
+0385     <span class="keyword">end</span>;
+0386 <span class="keyword">end</span>;
+0387 
+0388 <span class="keyword">if</span> ProgramOptions.ValidatePassword
+0389     <span class="comment">% Check if passwords match</span>
+0390     <span class="keyword">if</span> ~isequal(handles.java_Password.Password, handles.java_PasswordValidate.Password)
+0391         strMessage = <span class="string">'Passwords do not match.  Please try again'</span>;
+0392         <span class="comment">%disp(strMessage);</span>
+0393         hError=errordlg(strMessage, <span class="string">'passwordEntryDialog'</span>,<span class="string">'modal'</span>);
+0394         uiwait(hError);
+0395         set(handles.java_Password,<span class="string">'Text'</span>, <span class="string">''</span>);
+0396         set(handles.java_PasswordValidate,<span class="string">'Text'</span>, <span class="string">''</span>);
+0397 
+0398         handles.java_Password.requestFocus
+0399         <span class="keyword">return</span>;
+0400     <span class="keyword">end</span>;
+0401 <span class="keyword">end</span>;
+0402 uiresume(handles.figure1);
+0403 
+0404 <a name="_sub3" href="#_subfunctions" class="code">function pushbutton_Cancel_Callback(hObject, eventdata, handles, ProgramOptions)</a>
+0405 setappdata(handles.figure1, <span class="string">'isCanceled'</span>, true);
+0406 uiresume(handles.figure1);</pre></div>
+<hr><address>Generated on Tue 06-Jul-2021 16:01:18 by <strong><a href="http://www.artefact.tk/software/matlab/m2html/" title="Matlab Documentation in HTML">m2html</a></strong> &copy; 2005</address>
+</body>
+</html>
\ No newline at end of file
diff --git a/html/matlab-openbis/user_url_pw_input_dialog.html b/html/matlab-openbis/user_url_pw_input_dialog.html
new file mode 100644
index 00000000000..d3d6394529a
--- /dev/null
+++ b/html/matlab-openbis/user_url_pw_input_dialog.html
@@ -0,0 +1,143 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+                "http://www.w3.org/TR/REC-html40/loose.dtd">
+<html>
+<head>
+  <title>Description of user_url_pw_input_dialog</title>
+  <meta name="keywords" content="user_url_pw_input_dialog">
+  <meta name="description" content="user_url_pw_input">
+  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+  <meta name="generator" content="m2html v1.5 &copy; 2003-2005 Guillaume Flandin">
+  <meta name="robots" content="index, follow">
+  <link type="text/css" rel="stylesheet" href="../m2html.css">
+</head>
+<body>
+<a name="_top"></a>
+<div><a href="../index.html">Home</a> &gt;  <a href="index.html">matlab-openbis</a> &gt; user_url_pw_input_dialog.m</div>
+
+<!--<table width="100%"><tr><td align="left"><a href="../index.html"><img alt="<" border="0" src="../left.png">&nbsp;Master index</a></td>
+<td align="right"><a href="index.html">Index for matlab-openbis&nbsp;<img alt=">" border="0" src="../right.png"></a></td></tr></table>-->
+
+<h1>user_url_pw_input_dialog
+</h1>
+
+<h2><a name="_name"></a>PURPOSE <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
+<div class="box"><strong>user_url_pw_input</strong></div>
+
+<h2><a name="_synopsis"></a>SYNOPSIS <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
+<div class="box"><strong>function [url, user, pass] = user_url_pw_input_dialog </strong></div>
+
+<h2><a name="_description"></a>DESCRIPTION <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
+<div class="fragment"><pre class="comment">user_url_pw_input
+   Return the URL, user name and password for the openBIS server</pre></div>
+
+<!-- crossreference -->
+<h2><a name="_cross"></a>CROSS-REFERENCE INFORMATION <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
+This function calls:
+<ul style="list-style-image:url(../matlabicon.gif)">
+</ul>
+This function is called by:
+<ul style="list-style-image:url(../matlabicon.gif)">
+</ul>
+<!-- crossreference -->
+
+<h2><a name="_subfunctions"></a>SUBFUNCTIONS <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
+<ul style="list-style-image:url(../matlabicon.gif)">
+<li><a href="#_sub1" class="code">function my_closereq(fig,selection)</a></li><li><a href="#_sub2" class="code">function textChanging(txt, event)</a></li><li><a href="#_sub3" class="code">function buttonPushed(btn, fig)</a></li></ul>
+
+<h2><a name="_source"></a>SOURCE CODE <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
+<div class="fragment"><pre>0001 <a name="_sub0" href="#_subfunctions" class="code">function [url, user, pass] = user_url_pw_input_dialog</a>
+0002 <span class="comment">%user_url_pw_input</span>
+0003 <span class="comment">%   Return the URL, user name and password for the openBIS server</span>
+0004 
+0005 url = <span class="string">'https://XYZ.ethz.ch/openbis:8443'</span>;
+0006 user = <span class="string">''</span>;
+0007 pass = <span class="string">''</span>;
+0008 
+0009 
+0010 ScreenSize = get(0,<span class="string">'ScreenSize'</span>);
+0011 fig = uifigure(<span class="string">'Name'</span>, <span class="string">'Enter openBIS credentials'</span>, <span class="string">'Position'</span>,[(ScreenSize(3:4)-[300 75])/2 400 150]);
+0012 fig.CloseRequestFcn = @(fig,event)<a href="#_sub1" class="code" title="subfunction my_closereq(fig,selection)">my_closereq</a>(fig);
+0013 
+0014 <span class="comment">% URL label and text field</span>
+0015 lbl_url = uilabel(fig, <span class="string">'Text'</span>, <span class="string">'URL:'</span>, <span class="keyword">...</span>
+0016     <span class="string">'Position'</span>,[10 120 80 20]);
+0017 
+0018 txt_url = uieditfield(fig,<span class="keyword">...</span>
+0019     <span class="string">'Position'</span>,[70 120 280 20], <span class="keyword">...</span>
+0020     <span class="string">'Value'</span>, url, <span class="keyword">...</span>
+0021     <span class="string">'Tag'</span>, <span class="string">'url_textfield'</span>);
+0022 
+0023 <span class="comment">% User label and text field</span>
+0024 lbl_user = uilabel(fig, <span class="string">'Text'</span>, <span class="string">'User:'</span>, <span class="keyword">...</span>
+0025     <span class="string">'Position'</span>,[10 90 80 20]);
+0026 
+0027 txt_user = uieditfield(fig,<span class="keyword">...</span>
+0028     <span class="string">'Position'</span>,[70 90 280 20], <span class="keyword">...</span>
+0029     <span class="string">'Value'</span>, user, <span class="keyword">...</span>
+0030     <span class="string">'Tag'</span>, <span class="string">'user_textfield'</span>);
+0031 
+0032 <span class="comment">% Password label and text field</span>
+0033 lbl_pass = uilabel(fig, <span class="string">'Text'</span>, <span class="string">'Password:'</span>, <span class="keyword">...</span>
+0034     <span class="string">'Position'</span>,[10 60 80 20]);
+0035 
+0036 txt_pass = uieditfield(fig,<span class="keyword">...</span>
+0037     <span class="string">'Position'</span>,[70 60 280 20], <span class="keyword">...</span>
+0038     <span class="string">'Tag'</span>, <span class="string">'pass_textfield'</span>, <span class="keyword">...</span>
+0039     <span class="string">'ValueChangingFcn'</span>, @<a href="#_sub2" class="code" title="subfunction textChanging(txt, event)">textChanging</a>, <span class="keyword">...</span>
+0040     <span class="string">'UserData'</span>, <span class="string">''</span>);
+0041 
+0042 <span class="comment">% Push button to accept entries</span>
+0043 btn = uibutton(fig,<span class="string">'push'</span>, <span class="keyword">...</span>
+0044                <span class="string">'Position'</span>,[150 10 100 40], <span class="keyword">...</span>
+0045                <span class="string">'Text'</span>, <span class="string">'Connect'</span>, <span class="keyword">...</span>
+0046                <span class="string">'FontWeight'</span>, <span class="string">'bold'</span>, <span class="keyword">...</span>
+0047                <span class="string">'ButtonPushedFcn'</span>, @(btn,event) <a href="#_sub3" class="code" title="subfunction buttonPushed(btn, fig)">buttonPushed</a>(btn, fig));
+0048 
+0049 uiwait(fig)
+0050     
+0051     <span class="comment">% run this when figure closes</span>
+0052     <a name="_sub1" href="#_subfunctions" class="code">function my_closereq(fig,selection)</a>
+0053         
+0054         url = get(txt_url, <span class="string">'Value'</span>);
+0055         user = get(txt_user, <span class="string">'Value'</span>);
+0056         pass = get(txt_pass,<span class="string">'UserData'</span>);
+0057         
+0058         delete(fig)
+0059         
+0060     <span class="keyword">end</span>
+0061 
+0062 <span class="keyword">end</span>
+0063 
+0064 <span class="comment">% Callback functions</span>
+0065 <a name="_sub2" href="#_subfunctions" class="code">function textChanging(txt, event)</a>
+0066 <span class="comment">% replace typed text with stars</span>
+0067 <span class="comment">% Todo: handle delete / backspace</span>
+0068 
+0069 <span class="comment">% disp(event.Value);</span>
+0070 
+0071 <span class="keyword">if</span> isempty(txt.UserData)
+0072     txt.UserData = event.Value;
+0073 <span class="keyword">else</span>
+0074     txt.UserData = append(txt.UserData, event.Value(end));
+0075 <span class="keyword">end</span>
+0076 
+0077 val = event.Value;
+0078 <span class="keyword">if</span> ~isempty(val)
+0079     val(1:length(val)) = <span class="string">'*'</span>;
+0080 <span class="keyword">else</span>
+0081    val = <span class="string">'*'</span>; 
+0082 <span class="keyword">end</span>
+0083 txt.Value = val;
+0084 
+0085 <span class="keyword">end</span>
+0086 
+0087 <a name="_sub3" href="#_subfunctions" class="code">function buttonPushed(btn, fig)</a>
+0088 <span class="comment">% close the figure, call CloseRequestFcn before</span>
+0089         
+0090         close(fig)
+0091 <span class="keyword">end</span>
+0092 
+0093</pre></div>
+<hr><address>Generated on Tue 06-Jul-2021 16:01:18 by <strong><a href="http://www.artefact.tk/software/matlab/m2html/" title="Matlab Documentation in HTML">m2html</a></strong> &copy; 2005</address>
+</body>
+</html>
\ No newline at end of file
diff --git a/html/matlab-openbis/user_url_pw_inputdlg.html b/html/matlab-openbis/user_url_pw_inputdlg.html
new file mode 100644
index 00000000000..f9787707be6
--- /dev/null
+++ b/html/matlab-openbis/user_url_pw_inputdlg.html
@@ -0,0 +1,64 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+                "http://www.w3.org/TR/REC-html40/loose.dtd">
+<html>
+<head>
+  <title>Description of user_url_pw_inputdlg</title>
+  <meta name="keywords" content="user_url_pw_inputdlg">
+  <meta name="description" content="user_url_pw_inputdlg">
+  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+  <meta name="generator" content="m2html v1.5 &copy; 2003-2005 Guillaume Flandin">
+  <meta name="robots" content="index, follow">
+  <link type="text/css" rel="stylesheet" href="../m2html.css">
+</head>
+<body>
+<a name="_top"></a>
+<div><a href="../index.html">Home</a> &gt;  <a href="index.html">matlab-openbis</a> &gt; user_url_pw_inputdlg.m</div>
+
+<!--<table width="100%"><tr><td align="left"><a href="../index.html"><img alt="<" border="0" src="../left.png">&nbsp;Master index</a></td>
+<td align="right"><a href="index.html">Index for matlab-openbis&nbsp;<img alt=">" border="0" src="../right.png"></a></td></tr></table>-->
+
+<h1>user_url_pw_inputdlg
+</h1>
+
+<h2><a name="_name"></a>PURPOSE <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
+<div class="box"><strong>user_url_pw_inputdlg</strong></div>
+
+<h2><a name="_synopsis"></a>SYNOPSIS <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
+<div class="box"><strong>function [url, user, pw] = user_url_pw_inputdlg </strong></div>
+
+<h2><a name="_description"></a>DESCRIPTION <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
+<div class="fragment"><pre class="comment">user_url_pw_inputdlg
+   Return the URL, user name and password for the openBIS server</pre></div>
+
+<!-- crossreference -->
+<h2><a name="_cross"></a>CROSS-REFERENCE INFORMATION <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
+This function calls:
+<ul style="list-style-image:url(../matlabicon.gif)">
+<li><a href="passcode.html" class="code" title="function pass = passcode">passcode</a>	PASSCODE  password input dialog box.</li></ul>
+This function is called by:
+<ul style="list-style-image:url(../matlabicon.gif)">
+<li><a href="OpenBis.html" class="code" title="">OpenBis</a>	</li></ul>
+<!-- crossreference -->
+
+
+
+<h2><a name="_source"></a>SOURCE CODE <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
+<div class="fragment"><pre>0001 <a name="_sub0" href="#_subfunctions" class="code">function [url, user, pw] = user_url_pw_inputdlg</a>
+0002 <span class="comment">%user_url_pw_inputdlg</span>
+0003 <span class="comment">%   Return the URL, user name and password for the openBIS server</span>
+0004 
+0005 prompt = {<span class="string">'openBIS URL:'</span>, <span class="string">'openBIS user:'</span>};
+0006 title = <span class="string">'openBIS connection details'</span>;
+0007 definput = {<span class="string">'https://XYZ.ethz.ch/openbis:8443'</span>, <span class="string">''</span>};
+0008 answer = inputdlg(prompt, title, 1, definput);
+0009 
+0010 url = answer{1};
+0011 user = answer{2};
+0012 
+0013 <span class="comment">% pw = passwordEntryDialog('CheckPasswordLength',0);</span>
+0014 pw = <a href="passcode.html" class="code" title="function pass = passcode">passcode</a>;
+0015 
+0016 <span class="keyword">end</span></pre></div>
+<hr><address>Generated on Tue 06-Jul-2021 16:01:18 by <strong><a href="http://www.artefact.tk/software/matlab/m2html/" title="Matlab Documentation in HTML">m2html</a></strong> &copy; 2005</address>
+</body>
+</html>
\ No newline at end of file
diff --git a/html/matlabicon.gif b/html/matlabicon.gif
new file mode 100644
index 0000000000000000000000000000000000000000..7c2b5e6e2225ede10ed4a95138d8c8df0a0fcfa2
GIT binary patch
literal 574
zcmZ?wbhEHb6krfwc*Xz%|NsAYmy|MAPz?4D)YH*5(Km9k^EZu6QcKQIFtf07b<0@1
zT)&{uy`(f{{sI|ySG|y6y`Vtr!~~nlvVh)B-<tA>slDkd7sMUhm~nn@(#}<hOJ=6d
zpOU_3m4=q4i>qULHtXTzoc}*_9Non9cn|mMot$6xao(HD{Btemfo7KftJ(gq<~Y~G
z@qZoHkA=+tS8)7W&Uw9q`Tr8me+#(&&u0HSm+S9Tw*NEO-*s^O@8dn4!TPz8qu!P4
zK_1Jw46grGoa<tx&&9D{h~;<@%eCK|YmF=C8heiW{+z2Fc$b)RFVbbbY{$JvhpAeI
zX{8p&3?06E#_T;(j1v{PJCym|<isij87oEEd!;z1%W;PYvUkYv*o*MCNb`qrv-<I{
z=L&F_aC3&LtGOsBoH=vG*w`2tT;O1%4x#vyg^__FjX?)w94Jm0*k?DSH8nS<rnYo+
za5=VjcBHavSogK0awe(S^!B9+afGSsM^6#p6;6)OH1JL7m*-|>i}Etj@tK_}C@RCk
z%#`S6Zs-xzlqxAD$1kf8AM0wN?c%>SMNC?Phc6~Pz{yO{A+R?kRa_)AA;i<pSl8A&
yviWIhT(G;dl~!s>ir?(CQ-4ncIv-nB)Nx{hL?F`wWg|rwizO*(ixxOASOWm3r><21

literal 0
HcmV?d00001

diff --git a/html/mex.png b/html/mex.png
new file mode 100644
index 0000000000000000000000000000000000000000..396f1bc943e311539c64aa839ba14242c3b1493c
GIT binary patch
literal 242
zcmeAS@N?(olHy`uVBq!ia0vp^GC<7D!VDzmefZD<q*&4&eH|GXHuiJ>Nn{1``2&1H
zT>k^XH6VupNCU}&+~7Mvim@cfFPOpM*^M+1C&}C0g`tC0)&t1lEbxdd1{y2`!i<;h
z*8KqrvX^-Jy0Ty9km3|#4DWEh2o&=1ba4!+m=oK_$albigXt^#BmNKn`(>_}oOavV
zHb=Afht|Vg%9B``@)jwvpOrK#Ny(Hf&TUq{A5ne4dvCr*%<KirWfXSZob>)z?JLGp
XX&kFA6^pR}&1LX(^>bP0l+XkK#Yar!

literal 0
HcmV?d00001

diff --git a/html/passwordEntryDialog.html b/html/passwordEntryDialog.html
deleted file mode 100644
index 37b052b1f70..00000000000
--- a/html/passwordEntryDialog.html
+++ /dev/null
@@ -1,826 +0,0 @@
-
-<!DOCTYPE html
-  PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head>
-      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-   <!--
-This HTML was auto-generated from MATLAB code.
-To make changes, update the MATLAB code and republish this document.
-      --><title>passwordEntryDialog</title><meta name="generator" content="MATLAB 9.4"><link rel="schema.DC" href="http://purl.org/dc/elements/1.1/"><meta name="DC.date" content="2019-03-21"><meta name="DC.source" content="passwordEntryDialog.m"><style type="text/css">
-html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td{margin:0;padding:0;border:0;outline:0;font-size:100%;vertical-align:baseline;background:transparent}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:'';content:none}:focus{outine:0}ins{text-decoration:none}del{text-decoration:line-through}table{border-collapse:collapse;border-spacing:0}
-
-html { min-height:100%; margin-bottom:1px; }
-html body { height:100%; margin:0px; font-family:Arial, Helvetica, sans-serif; font-size:10px; color:#000; line-height:140%; background:#fff none; overflow-y:scroll; }
-html body td { vertical-align:top; text-align:left; }
-
-h1 { padding:0px; margin:0px 0px 25px; font-family:Arial, Helvetica, sans-serif; font-size:1.5em; color:#d55000; line-height:100%; font-weight:normal; }
-h2 { padding:0px; margin:0px 0px 8px; font-family:Arial, Helvetica, sans-serif; font-size:1.2em; color:#000; font-weight:bold; line-height:140%; border-bottom:1px solid #d6d4d4; display:block; }
-h3 { padding:0px; margin:0px 0px 5px; font-family:Arial, Helvetica, sans-serif; font-size:1.1em; color:#000; font-weight:bold; line-height:140%; }
-
-a { color:#005fce; text-decoration:none; }
-a:hover { color:#005fce; text-decoration:underline; }
-a:visited { color:#004aa0; text-decoration:none; }
-
-p { padding:0px; margin:0px 0px 20px; }
-img { padding:0px; margin:0px 0px 20px; border:none; }
-p img, pre img, tt img, li img, h1 img, h2 img { margin-bottom:0px; } 
-
-ul { padding:0px; margin:0px 0px 20px 23px; list-style:square; }
-ul li { padding:0px; margin:0px 0px 7px 0px; }
-ul li ul { padding:5px 0px 0px; margin:0px 0px 7px 23px; }
-ul li ol li { list-style:decimal; }
-ol { padding:0px; margin:0px 0px 20px 0px; list-style:decimal; }
-ol li { padding:0px; margin:0px 0px 7px 23px; list-style-type:decimal; }
-ol li ol { padding:5px 0px 0px; margin:0px 0px 7px 0px; }
-ol li ol li { list-style-type:lower-alpha; }
-ol li ul { padding-top:7px; }
-ol li ul li { list-style:square; }
-
-.content { font-size:1.2em; line-height:140%; padding: 20px; }
-
-pre, code { font-size:12px; }
-tt { font-size: 1.2em; }
-pre { margin:0px 0px 20px; }
-pre.codeinput { padding:10px; border:1px solid #d3d3d3; background:#f7f7f7; }
-pre.codeoutput { padding:10px 11px; margin:0px 0px 20px; color:#4c4c4c; }
-pre.error { color:red; }
-
-@media print { pre.codeinput, pre.codeoutput { word-wrap:break-word; width:100%; } }
-
-span.keyword { color:#0000FF }
-span.comment { color:#228B22 }
-span.string { color:#A020F0 }
-span.untermstring { color:#B20000 }
-span.syscmd { color:#B28C00 }
-
-.footer { width:auto; padding:10px 0px; margin:25px 0px 0px; border-top:1px dotted #878787; font-size:0.8em; line-height:140%; font-style:italic; color:#878787; text-align:left; float:none; }
-.footer p { margin:0px; }
-.footer a { color:#878787; }
-.footer a:hover { color:#878787; text-decoration:underline; }
-.footer a:visited { color:#878787; }
-
-table th { padding:7px 5px; text-align:left; vertical-align:middle; border: 1px solid #d6d4d4; font-weight:bold; }
-table td { padding:7px 5px; text-align:left; vertical-align:top; border:1px solid #d6d4d4; }
-
-
-
-
-
-  </style></head><body><div class="content"><h2>Contents</h2><div><ul><li><a href="#3">History</a></li><li><a href="#4">Program Information</a></li><li><a href="#5">Check for Existance of Java</a></li><li><a href="#6">Parse Input Arguments</a></li><li><a href="#7">Determine GUI Size and Position</a></li><li><a href="#8">Create the GUI</a></li><li><a href="#9">Setup Callbacks for Objects</a></li><li><a href="#10">Wait for Completion</a></li><li><a href="#11">Get current information</a></li><li><a href="#12">DEFINE FUNCTIONS</a></li></ul></div><pre class="codeinput"><span class="keyword">function</span> [Password, UserName] = passwordEntryDialog(varargin)
-</pre><pre class="codeinput"><span class="comment">% PASSWORDENTRYDIALOG</span>
-<span class="comment">% [Password, UserName] = passwordEntryDialog(varargin)</span>
-<span class="comment">%</span>
-<span class="comment">% Create a password entry dialog for entering a password that is visibly</span>
-<span class="comment">% hidden.  Java must be enabled for this function to work properly.</span>
-<span class="comment">%</span>
-<span class="comment">% It has only been tested on the Windows platform in R2008a.  It should</span>
-<span class="comment">% work in R2007a or later.</span>
-<span class="comment">%</span>
-<span class="comment">% The password box is created using the Java Swing component</span>
-<span class="comment">% JPasswordField.</span>
-<span class="comment">%</span>
-<span class="comment">% Optional Input Arguments</span>
-<span class="comment">% ------------------------</span>
-<span class="comment">%</span>
-<span class="comment">% 'enterUserName'       DEFAULT: false</span>
-<span class="comment">% Display the user name entry box.  The user name entered must be at least</span>
-<span class="comment">% one character or an error dialog is displayed.</span>
-<span class="comment">%</span>
-<span class="comment">% 'DefaultUserName'     DEFAULT: ''</span>
-<span class="comment">% String value of user name to populate in User Name box upon creation.</span>
-<span class="comment">%</span>
-<span class="comment">% 'ValidatePassword'    DEFAULT: false</span>
-<span class="comment">% Display dialog box to reenter password for validation purposes.</span>
-<span class="comment">%</span>
-<span class="comment">% 'CheckPasswordLength' DEFAULT: true</span>
-<span class="comment">% Check the password length to ensure it meets the specified criteria.</span>
-<span class="comment">%</span>
-<span class="comment">% 'PasswordLengthMin'   DEFAULT: 2</span>
-<span class="comment">% Minimum password length allowed.</span>
-<span class="comment">%</span>
-<span class="comment">% 'PasswordLengthMax'   DEFAULT: 8</span>
-<span class="comment">% Maximum password length allowed.</span>
-<span class="comment">%</span>
-<span class="comment">% 'WindowName'          DEFAULT: 'Login'</span>
-<span class="comment">% Title of the password entry window.</span>
-<span class="comment">%</span>
-<span class="comment">% Examples</span>
-<span class="comment">% --------</span>
-<span class="comment">%</span>
-<span class="comment">% Create a password dialog box with the default options.</span>
-<span class="comment">% -----------------------------------------------------------------------</span>
-<span class="comment">% [Password] = passwordEntryDialog;</span>
-<span class="comment">%</span>
-<span class="comment">% Create a user name and password entry dialog box without password</span>
-<span class="comment">% verification.</span>
-<span class="comment">% -----------------------------------------------------------------------</span>
-<span class="comment">% [Password, UserName] = passwordEntryDialog('enterUserName', true)</span>
-<span class="comment">%</span>
-<span class="comment">% Create a user name and password entry dialog box without password</span>
-<span class="comment">% verification.  Set the user name to 'jdoe' upon startup.</span>
-<span class="comment">% -----------------------------------------------------------------------</span>
-<span class="comment">% [Password, UserName] = passwordEntryDialog('enterUserName', true,...</span>
-<span class="comment">%      'DefaultUserName', 'jdoe')</span>
-<span class="comment">%</span>
-<span class="comment">% Create a password dialog box with password validation</span>
-<span class="comment">% -----------------------------------------------------------------------</span>
-<span class="comment">% [Password] = passwordEntryDialog('ValidatePassword', true);</span>
-<span class="comment">%</span>
-<span class="comment">% Create a user name and password entry dialog box with password</span>
-<span class="comment">% verification.</span>
-<span class="comment">% -----------------------------------------------------------------------</span>
-<span class="comment">% [Password, UserName] = passwordEntryDialog('enterUserName', true,...</span>
-<span class="comment">%      'ValidatePassword', true)</span>
-<span class="comment">%</span>
-<span class="comment">% Check the length of the password to be between 5 and 8 characters</span>
-<span class="comment">% -----------------------------------------------------------------------</span>
-<span class="comment">% [Password, UserName] = passwordEntryDialog('CheckPasswordLength', true,...</span>
-<span class="comment">%      'PasswordLengthMin', 5,...</span>
-<span class="comment">%      'PasswordLengthMax', 8)</span>
-<span class="comment">%</span>
-<span class="comment">% -----------------------------------------------------------------------</span>
-<span class="comment">% Copyright (C) 2007-2008, Jesse B. Lai</span>
-<span class="comment">%</span>
-<span class="comment">% This program is free software: you can redistribute it and/or modify</span>
-<span class="comment">% it under the terms of the GNU Lesser General Public License as published</span>
-<span class="comment">% by the Free Software Foundation, either version 3 of the License, or</span>
-<span class="comment">% (at your option) any later version.</span>
-<span class="comment">%</span>
-<span class="comment">% This program is distributed in the hope that it will be useful,</span>
-<span class="comment">% but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
-<span class="comment">% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
-<span class="comment">% GNU Lesser General Public License for more details.</span>
-<span class="comment">%</span>
-<span class="comment">% You should have received a copy of the GNU Lesser General Public License</span>
-<span class="comment">% along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;</span>
-</pre><h2 id="3">History</h2><p>The history of this program is outlined in this section.</p><p>20080616 - JBL - 0.0.2 Started 20080612</p><p>Updated to remove requirement for uicomponent function written by Yair Altman.  Now, the Java components are created manually and the undocumented feature javacomponent is used.</p><p>A focus issue was worked out by using the drawnow command in a couple of places to allow the objects to be focused properly upon startup.</p><p>20080427 - JBL - 0.0.1 Started 20080425.</p><p>Initial version.  Uses Java to create the password entry box.  An edit box was initially attemped with the Java frame, but was occasionally getting Java exceptions when trying to query the 'SelectionStart' and 'SelectionEnd' properties.</p><p>Basic options of entering user name and password with options for password validation.</p><p>ToDo: Maybe add valid string input argument to only allow certain characters.</p><h2 id="4">Program Information</h2><pre class="codeinput"><span class="comment">% ProgramName = 'passwordEntryDialog';</span>
-<span class="comment">% ProgramVersion = '0.0.2';</span>
-<span class="comment">% svnRevision = '$Revision: 184 $';</span>
-<span class="comment">% svnRevision = getSVNRevision(svnRevision);</span>
-<span class="comment">% ProgramVersion = [ProgramVersion, '.' ,svnRevision];</span>
-<span class="comment">%</span>
-<span class="comment">% LastChangedDate = '$LastChangedDate: 2008-06-16 09:08:17 -0600 (Mon, 16 Jun 2008) $';</span>
-<span class="comment">% ProgramDate = getSVNDate(LastChangedDate);</span>
-</pre><h2 id="5">Check for Existance of Java</h2><pre class="codeinput"><span class="keyword">if</span> ~usejava(<span class="string">'swing'</span>)
-   error(<span class="string">'passwordEntryDialog: Java is required for this program to run.'</span>);
-<span class="keyword">end</span>
-</pre><h2 id="6">Parse Input Arguments</h2><p>Input arguments are parsed with the MATLAB inputParser class.</p><pre class="codeinput"><span class="comment">% Create input parser object</span>
-ProgramOptionsParser = inputParser;
-ProgramOptionsParser.KeepUnmatched = true;
-
-ProgramOptionsParser.addParamValue(<span class="string">'enterUserName'</span>, false, @(x) islogical(x) || isnumeric(x));
-ProgramOptionsParser.addParamValue(<span class="string">'DefaultUserName'</span>, <span class="string">''</span>, @ischar);
-ProgramOptionsParser.addParamValue(<span class="string">'ValidatePassword'</span>, false, @(x) islogical(x) || isnumeric(x));
-ProgramOptionsParser.addParamValue(<span class="string">'CheckPasswordLength'</span>, true, @(x) islogical(x) || isnumeric(x));
-ProgramOptionsParser.addParamValue(<span class="string">'PasswordLengthMin'</span>, 2, @isnumeric);
-ProgramOptionsParser.addParamValue(<span class="string">'PasswordLengthMax'</span>, 8, @isnumeric);
-ProgramOptionsParser.addParamValue(<span class="string">'WindowName'</span>, <span class="string">'Login'</span>, @ischar);
-
-<span class="comment">% Parse Input Arguments</span>
-<span class="keyword">try</span>
-    ProgramOptionsParser.parse(varargin{:});
-<span class="keyword">catch</span> Error
-    ProgramOptionsParser.parse;
-    <span class="keyword">if</span> strcmpi(Error.identifier, <span class="string">'MATLAB:InputParser:ArgumentFailedValidation'</span>)
-        error(Error.identifier, Error.message);
-    <span class="keyword">end</span>;
-<span class="keyword">end</span>;
-
-ProgramOptions = ProgramOptionsParser.Results;
-
-<span class="comment">% Validate password length options</span>
-<span class="keyword">if</span> ProgramOptions.CheckPasswordLength
-    <span class="keyword">if</span> ProgramOptions.PasswordLengthMax &lt; ProgramOptions.PasswordLengthMin
-        error(<span class="string">'MATLAB:InputParser:ArgumentFailedValidation'</span>, <span class="string">'PasswordLengthMax must be greater than PasswordLengthMin'</span>);
-    <span class="keyword">end</span>;
-<span class="keyword">end</span>;
-</pre><h2 id="7">Determine GUI Size and Position</h2><p>Center the GUI on the screen.</p><pre class="codeinput">set(0,<span class="string">'Units'</span>,<span class="string">'pixels'</span>)
-Screen = get(0,<span class="string">'screensize'</span>);
-
-PositionGUI = [0 0 300 50];
-<span class="keyword">if</span> ProgramOptions.enterUserName
-    PositionGUI = PositionGUI + [0 0 0 50];
-<span class="keyword">end</span>;
-<span class="keyword">if</span> ProgramOptions.ValidatePassword
-    PositionGUI = PositionGUI + [0 0 0 50];
-    OffsetBottom = 43;
-<span class="keyword">else</span>
-    OffsetBottom = 0;
-<span class="keyword">end</span>;
-
-PositionGUI = [Screen(3:4)/2-PositionGUI(3:4)/2 PositionGUI(3:4)];
-PositionLeft = 10;
-BoxWidth = 200;
-</pre><h2 id="8">Create the GUI</h2><pre class="codeinput">BackgroundColor = get(0,<span class="string">'DefaultUicontrolBackgroundcolor'</span>);
-handles.figure1 = figure(<span class="string">'Menubar'</span>,<span class="string">'none'</span>, <span class="keyword">...</span>
-    <span class="string">'Units'</span>,<span class="string">'Pixels'</span>, <span class="keyword">...</span>
-    <span class="string">'Resize'</span>,<span class="string">'off'</span>, <span class="keyword">...</span>
-    <span class="string">'NumberTitle'</span>,<span class="string">'off'</span>, <span class="keyword">...</span>
-    <span class="string">'Name'</span>,ProgramOptions.WindowName, <span class="keyword">...</span>
-    <span class="string">'Position'</span>,PositionGUI, <span class="keyword">...</span>
-    <span class="string">'Color'</span>, BackgroundColor, <span class="keyword">...</span>
-    <span class="string">'WindowStyle'</span>,<span class="string">'modal'</span>);
-
-<span class="comment">% Create Password Validation Entry Box</span>
-<span class="keyword">if</span> ProgramOptions.ValidatePassword
-    handles.java_PasswordValidate = javax.swing.JPasswordField();
-    handles.java_PasswordValidate.setFocusable(true);
-    [handles.java_PasswordValidate, handles.edit_PasswordValidate] = javacomponent(handles.java_PasswordValidate, [], handles.figure1);
-
-    set(handles.edit_PasswordValidate, <span class="keyword">...</span>
-        <span class="string">'Parent'</span>, handles.figure1, <span class="keyword">...</span>
-        <span class="string">'Tag'</span>, <span class="string">'edit_PasswordValidate'</span>, <span class="keyword">...</span>
-        <span class="string">'Units'</span>, <span class="string">'Pixels'</span>, <span class="keyword">...</span>
-        <span class="string">'Position'</span>,[PositionLeft 10 BoxWidth 23]);
-
-    handles.text_LabelPasswordValidate = uicontrol(<span class="string">'Parent'</span>,handles.figure1, <span class="keyword">...</span>
-        <span class="string">'Tag'</span>, <span class="string">'text_LabelPassword'</span>, <span class="keyword">...</span>
-        <span class="string">'Style'</span>,<span class="string">'Text'</span>, <span class="keyword">...</span>
-        <span class="string">'Units'</span>,<span class="string">'Pixels'</span>,<span class="keyword">...</span>
-        <span class="string">'Position'</span>,[PositionLeft 33 BoxWidth 16], <span class="keyword">...</span>
-        <span class="string">'FontSize'</span>,10, <span class="keyword">...</span>
-        <span class="string">'String'</span>,<span class="string">'Reenter password:'</span>,<span class="keyword">...</span>
-        <span class="string">'HorizontalAlignment'</span>, <span class="string">'Left'</span>);
-<span class="keyword">end</span>;
-
-<span class="comment">% Create Password Entry Box</span>
-handles.java_Password = javax.swing.JPasswordField();
-[handles.java_Password, handles.edit_Password] = javacomponent(handles.java_Password, [PositionLeft 10+OffsetBottom BoxWidth 23], handles.figure1);
-handles.java_Password.setFocusable(true);
-
-set(handles.edit_Password, <span class="keyword">...</span>
-    <span class="string">'Parent'</span>, handles.figure1, <span class="keyword">...</span>
-    <span class="string">'Tag'</span>, <span class="string">'edit_Password'</span>, <span class="keyword">...</span>
-    <span class="string">'Units'</span>, <span class="string">'Pixels'</span>, <span class="keyword">...</span>
-    <span class="string">'Position'</span>,[PositionLeft 10+OffsetBottom BoxWidth 23]);
-drawnow;    <span class="comment">% This drawnow is required to allow the focus to work</span>
-
-handles.text_LabelPassword = uicontrol(<span class="string">'Parent'</span>,handles.figure1, <span class="keyword">...</span>
-    <span class="string">'Tag'</span>, <span class="string">'text_LabelPassword'</span>, <span class="keyword">...</span>
-    <span class="string">'Style'</span>,<span class="string">'Text'</span>, <span class="keyword">...</span>
-    <span class="string">'Units'</span>,<span class="string">'Pixels'</span>,<span class="keyword">...</span>
-    <span class="string">'Position'</span>,[PositionLeft 33+OffsetBottom BoxWidth 16], <span class="keyword">...</span>
-    <span class="string">'FontSize'</span>,10, <span class="keyword">...</span>
-    <span class="string">'String'</span>,<span class="string">'Key:'</span>,<span class="keyword">...</span>
-    <span class="string">'HorizontalAlignment'</span>, <span class="string">'Left'</span>);
-
-<span class="comment">% Create OK Pushbutton</span>
-handles.pushbutton_OK = uicontrol(<span class="string">'Parent'</span>,handles.figure1, <span class="keyword">...</span>
-    <span class="string">'Tag'</span>, <span class="string">'pushbutton_OK'</span>, <span class="keyword">...</span>
-    <span class="string">'Style'</span>,<span class="string">'Pushbutton'</span>, <span class="keyword">...</span>
-    <span class="string">'Units'</span>,<span class="string">'Pixels'</span>,<span class="keyword">...</span>
-    <span class="string">'Position'</span>,[PositionLeft+BoxWidth+5 10 30 23], <span class="keyword">...</span>
-    <span class="string">'FontSize'</span>,10, <span class="keyword">...</span>
-    <span class="string">'String'</span>,<span class="string">'OK'</span>,<span class="keyword">...</span>
-    <span class="string">'HorizontalAlignment'</span>, <span class="string">'Center'</span>);
-
-<span class="comment">% Create Cancel Pushbutton</span>
-handles.pushbutton_Cancel = uicontrol(<span class="string">'Parent'</span>,handles.figure1, <span class="keyword">...</span>
-    <span class="string">'Tag'</span>, <span class="string">'pushbutton_Cancel'</span>, <span class="keyword">...</span>
-    <span class="string">'Style'</span>,<span class="string">'Pushbutton'</span>, <span class="keyword">...</span>
-    <span class="string">'Units'</span>,<span class="string">'Pixels'</span>,<span class="keyword">...</span>
-    <span class="string">'Position'</span>,[PositionLeft+BoxWidth+30+7 10 50 23], <span class="keyword">...</span>
-    <span class="string">'FontSize'</span>,10, <span class="keyword">...</span>
-    <span class="string">'String'</span>,<span class="string">'Cancel'</span>,<span class="keyword">...</span>
-    <span class="string">'HorizontalAlignment'</span>, <span class="string">'Center'</span>);
-
-<span class="comment">% Create User Name Edit Box</span>
-<span class="keyword">if</span> ProgramOptions.enterUserName
-    handles.java_UserName = javax.swing.JTextField();
-    handles.java_UserName.setFocusable(true);
-    [handles.java_UserName, handles.edit_UserName] = javacomponent(handles.java_UserName, [], handles.figure1);
-
-    set(handles.edit_UserName, <span class="keyword">...</span>
-        <span class="string">'Parent'</span>, handles.figure1, <span class="keyword">...</span>
-        <span class="string">'Tag'</span>, <span class="string">'edit_UserName'</span>, <span class="keyword">...</span>
-        <span class="string">'Units'</span>, <span class="string">'Pixels'</span>, <span class="keyword">...</span>
-        <span class="string">'Position'</span>,[PositionLeft 53+OffsetBottom 200 23]);
-    set(handles.java_UserName, <span class="string">'Text'</span>, ProgramOptions.DefaultUserName);
-    drawnow;    <span class="comment">% This drawnow is required to allow the focus to work</span>
-
-    handles.text_LabelUserName = uicontrol(<span class="string">'Parent'</span>,handles.figure1, <span class="keyword">...</span>
-        <span class="string">'Tag'</span>, <span class="string">'text_LabelUserName'</span>, <span class="keyword">...</span>
-        <span class="string">'Style'</span>,<span class="string">'Text'</span>, <span class="keyword">...</span>
-        <span class="string">'Units'</span>,<span class="string">'Pixels'</span>,<span class="keyword">...</span>
-        <span class="string">'Position'</span>,[PositionLeft 76+OffsetBottom 200 16], <span class="keyword">...</span>
-        <span class="string">'FontSize'</span>,10, <span class="keyword">...</span>
-        <span class="string">'String'</span>,<span class="string">'User name:'</span>,<span class="keyword">...</span>
-        <span class="string">'HorizontalAlignment'</span>, <span class="string">'Left'</span>);
-
-    <span class="comment">%uicontrol(handles.edit_UserName);</span>
-    <span class="comment">%set(handles.figure1,'CurrentObject',handles.java_UserName)</span>
-    handles.java_UserName.requestFocus;     <span class="comment">% Get focus</span>
-    drawnow;
-<span class="keyword">else</span>
-    handles.java_Password.requestFocus;     <span class="comment">% Get focus</span>
-    drawnow;
-<span class="keyword">end</span>;
-</pre><h2 id="9">Setup Callbacks for Objects</h2><p>Adds the callback functions for the objects in the GUI</p><pre class="codeinput">set(handles.pushbutton_OK,     <span class="string">'Callback'</span>, {@pushbutton_OK_Callback, handles, ProgramOptions}, <span class="string">'KeyPressFcn'</span>, {@pushbutton_KeyPressFcn, handles, ProgramOptions});
-set(handles.pushbutton_Cancel, <span class="string">'Callback'</span>, {@pushbutton_Cancel_Callback, handles, ProgramOptions}, <span class="string">'KeyPressFcn'</span>, {@pushbutton_KeyPressFcn, handles, ProgramOptions});
-set(handles.java_Password, <span class="string">'ActionPerformedCallback'</span>, {@pushbutton_OK_Callback, handles, ProgramOptions});
-
-<span class="keyword">if</span> ProgramOptions.ValidatePassword
-    <span class="keyword">if</span> ProgramOptions.enterUserName
-        ObjectNext = handles.java_UserName;
-    <span class="keyword">else</span>
-        ObjectNext = handles.java_Password;
-    <span class="keyword">end</span>;
-    set(handles.java_PasswordValidate, <span class="string">'ActionPerformedCallback'</span>, {@pushbutton_OK_Callback, handles, ProgramOptions}, <span class="string">'NextFocusableComponent'</span>, ObjectNext);
-    set(handles.java_Password, <span class="string">'NextFocusableComponent'</span>, handles.java_PasswordValidate);
-<span class="keyword">elseif</span> ProgramOptions.enterUserName
-    set(handles.java_Password, <span class="string">'NextFocusableComponent'</span>, handles.java_UserName);
-<span class="keyword">end</span>;
-
-<span class="keyword">if</span> ProgramOptions.enterUserName
-    set(handles.java_UserName, <span class="string">'ActionPerformedCallback'</span>, {@pushbutton_OK_Callback, handles, ProgramOptions}, <span class="string">'NextFocusableComponent'</span>, handles.java_Password);
-<span class="keyword">end</span>;
-
-setappdata(handles.figure1, <span class="string">'isCanceled'</span>, false);
-</pre><h2 id="10">Wait for Completion</h2><pre class="codeinput"><span class="comment">% Wait for the user to complete entry.</span>
-drawnow;
-uiwait(handles.figure1);
-</pre><h2 id="11">Get current information</h2><p>User either closed the window or pressed cancel or OK.</p><pre class="codeinput">isCanceled = ~ishandle(handles.figure1) || getappdata(handles.figure1, <span class="string">'isCanceled'</span>);
-<span class="keyword">if</span> isCanceled
-    <span class="keyword">if</span> ishandle(handles.figure1)
-        delete(handles.figure1);
-    <span class="keyword">end</span>;
-    Password = -1;
-    UserName = <span class="string">''</span>;
-    <span class="keyword">return</span>;
-<span class="keyword">end</span>;
-
-Password = handles.java_Password.Password';
-<span class="keyword">if</span> ProgramOptions.enterUserName
-    UserName = strtrim(get(handles.java_UserName, <span class="string">'Text'</span>));
-<span class="keyword">else</span>
-    UserName = <span class="string">''</span>;
-<span class="keyword">end</span>;
-delete(handles.figure1);
-</pre><h2 id="12">DEFINE FUNCTIONS</h2><p>The subfunctions required by this program are in the following section.</p><pre class="codeinput"><span class="keyword">function</span> pushbutton_KeyPressFcn(hObject, eventdata, handles, ProgramOptions)
-
-<span class="keyword">switch</span> eventdata.Key
-    <span class="keyword">case</span> <span class="string">'return'</span>
-        Callback = get(hObject, <span class="string">'Callback'</span>);
-        feval(Callback{1}, hObject, <span class="string">''</span>, Callback{2:end});
-<span class="keyword">end</span>;
-
-<span class="keyword">function</span> pushbutton_OK_Callback(hObject, eventdata, handles, ProgramOptions)
-<span class="keyword">if</span> ProgramOptions.enterUserName
-    <span class="comment">% Check if username is blank</span>
-    UserName = strtrim(get(handles.java_UserName, <span class="string">'Text'</span>));
-    <span class="keyword">if</span> isempty(UserName)
-        strMessage = <span class="string">'Username is blank'</span>;
-        <span class="comment">%disp(strMessage)</span>
-        hError = errordlg(strMessage, <span class="string">'passwordEntryDialog'</span>);
-        uiwait(hError);
-        <span class="keyword">return</span>;
-    <span class="keyword">end</span>;
-<span class="keyword">end</span>;
-
-<span class="keyword">if</span> ProgramOptions.CheckPasswordLength
-    <span class="comment">%Password = handles.edit_Password.Password';</span>
-    Password = handles.java_Password.Password';
-    <span class="keyword">if</span> length(Password) &lt; ProgramOptions.PasswordLengthMin || length(Password) &gt; ProgramOptions.PasswordLengthMax
-        strMessage = sprintf(<span class="string">'Password must be between %d and %d characters'</span>, <span class="keyword">...</span>
-            ProgramOptions.PasswordLengthMin, <span class="keyword">...</span>
-            ProgramOptions.PasswordLengthMax);
-        <span class="comment">%disp(strMessage);</span>
-        hError = errordlg(strMessage, <span class="string">'passwordEntryDialog'</span>);
-        uiwait(hError);
-        <span class="keyword">if</span> ProgramOptions.ValidatePassword
-            set(handles.java_PasswordValidate,<span class="string">'Text'</span>, <span class="string">''</span>);
-        <span class="keyword">end</span>;
-        handles.java_Password.requestFocus
-        <span class="keyword">return</span>;
-    <span class="keyword">end</span>;
-<span class="keyword">end</span>;
-
-<span class="keyword">if</span> ProgramOptions.ValidatePassword
-    <span class="comment">% Check if passwords match</span>
-    <span class="keyword">if</span> ~isequal(handles.java_Password.Password, handles.java_PasswordValidate.Password)
-        strMessage = <span class="string">'Passwords do not match.  Please try again'</span>;
-        <span class="comment">%disp(strMessage);</span>
-        hError=errordlg(strMessage, <span class="string">'passwordEntryDialog'</span>,<span class="string">'modal'</span>);
-        uiwait(hError);
-        set(handles.java_Password,<span class="string">'Text'</span>, <span class="string">''</span>);
-        set(handles.java_PasswordValidate,<span class="string">'Text'</span>, <span class="string">''</span>);
-
-        handles.java_Password.requestFocus
-        <span class="keyword">return</span>;
-    <span class="keyword">end</span>;
-<span class="keyword">end</span>;
-uiresume(handles.figure1);
-
-<span class="keyword">function</span> pushbutton_Cancel_Callback(hObject, eventdata, handles, ProgramOptions)
-setappdata(handles.figure1, <span class="string">'isCanceled'</span>, true);
-uiresume(handles.figure1);
-</pre><p class="footer"><br><a href="https://www.mathworks.com/products/matlab/">Published with MATLAB&reg; R2018a</a><br></p></div><!--
-##### SOURCE BEGIN #####
-function [Password, UserName] = passwordEntryDialog(varargin)
-% PASSWORDENTRYDIALOG
-% [Password, UserName] = passwordEntryDialog(varargin)
-%
-% Create a password entry dialog for entering a password that is visibly
-% hidden.  Java must be enabled for this function to work properly.
-%
-% It has only been tested on the Windows platform in R2008a.  It should
-% work in R2007a or later.
-%
-% The password box is created using the Java Swing component
-% JPasswordField.
-%
-% Optional Input Arguments
-% REPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASH
-%
-% 'enterUserName'       DEFAULT: false
-% Display the user name entry box.  The user name entered must be at least
-% one character or an error dialog is displayed.
-%
-% 'DefaultUserName'     DEFAULT: ''
-% String value of user name to populate in User Name box upon creation.
-%
-% 'ValidatePassword'    DEFAULT: false
-% Display dialog box to reenter password for validation purposes.
-%
-% 'CheckPasswordLength' DEFAULT: true
-% Check the password length to ensure it meets the specified criteria.
-%
-% 'PasswordLengthMin'   DEFAULT: 2
-% Minimum password length allowed.
-%
-% 'PasswordLengthMax'   DEFAULT: 8
-% Maximum password length allowed.
-%
-% 'WindowName'          DEFAULT: 'Login'
-% Title of the password entry window.
-%
-% Examples
-% REPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASH
-%
-% Create a password dialog box with the default options.
-% REPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASH-
-% [Password] = passwordEntryDialog;
-%
-% Create a user name and password entry dialog box without password
-% verification.
-% REPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASH-
-% [Password, UserName] = passwordEntryDialog('enterUserName', true)
-%
-% Create a user name and password entry dialog box without password
-% verification.  Set the user name to 'jdoe' upon startup.
-% REPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASH-
-% [Password, UserName] = passwordEntryDialog('enterUserName', true,...
-%      'DefaultUserName', 'jdoe')
-%
-% Create a password dialog box with password validation
-% REPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASH-
-% [Password] = passwordEntryDialog('ValidatePassword', true);
-%
-% Create a user name and password entry dialog box with password
-% verification.
-% REPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASH-
-% [Password, UserName] = passwordEntryDialog('enterUserName', true,...
-%      'ValidatePassword', true)
-%
-% Check the length of the password to be between 5 and 8 characters
-% REPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASH-
-% [Password, UserName] = passwordEntryDialog('CheckPasswordLength', true,...
-%      'PasswordLengthMin', 5,...
-%      'PasswordLengthMax', 8)
-%
-% REPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASHREPLACE_WITH_DASH_DASH-
-% Copyright (C) 2007-2008, Jesse B. Lai
-%
-% This program is free software: you can redistribute it and/or modify
-% it under the terms of the GNU Lesser General Public License as published
-% by the Free Software Foundation, either version 3 of the License, or
-% (at your option) any later version.
-%
-% This program is distributed in the hope that it will be useful,
-% but WITHOUT ANY WARRANTY; without even the implied warranty of
-% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-% GNU Lesser General Public License for more details.
-%
-% You should have received a copy of the GNU Lesser General Public License
-% along with this program.  If not, see <http://www.gnu.org/licenses/>
-
-%% History
-% The history of this program is outlined in this section.
-%
-% 20080616 - JBL - 0.0.2
-% Started 20080612
-%
-% Updated to remove requirement for uicomponent function written by Yair
-% Altman.  Now, the Java components are created manually and the
-% undocumented feature javacomponent is used.
-%
-% A focus issue was worked out by using the drawnow command in a couple of
-% places to allow the objects to be focused properly upon startup.
-%
-% 20080427 - JBL - 0.0.1
-% Started 20080425.
-%
-% Initial version.  Uses Java to create the password entry box.  An edit
-% box was initially attemped with the Java frame, but was occasionally
-% getting Java exceptions when trying to query the 'SelectionStart' and
-% 'SelectionEnd' properties.
-%
-% Basic options of entering user name and password with options for
-% password validation.
-%
-% ToDo: Maybe add valid string input argument to only allow certain
-% characters.
-
-%% Program Information
-
-% ProgramName = 'passwordEntryDialog';
-% ProgramVersion = '0.0.2';
-% svnRevision = '$Revision: 184 $';
-% svnRevision = getSVNRevision(svnRevision);
-% ProgramVersion = [ProgramVersion, '.' ,svnRevision];
-%
-% LastChangedDate = '$LastChangedDate: 2008-06-16 09:08:17 -0600 (Mon, 16 Jun 2008) $';
-% ProgramDate = getSVNDate(LastChangedDate);
-
-%% Check for Existance of Java
-if ~usejava('swing')
-   error('passwordEntryDialog: Java is required for this program to run.');
-end
-
-%% Parse Input Arguments
-% Input arguments are parsed with the MATLAB inputParser class.
-
-% Create input parser object
-ProgramOptionsParser = inputParser;
-ProgramOptionsParser.KeepUnmatched = true;
-
-ProgramOptionsParser.addParamValue('enterUserName', false, @(x) islogical(x) || isnumeric(x));
-ProgramOptionsParser.addParamValue('DefaultUserName', '', @ischar);
-ProgramOptionsParser.addParamValue('ValidatePassword', false, @(x) islogical(x) || isnumeric(x));
-ProgramOptionsParser.addParamValue('CheckPasswordLength', true, @(x) islogical(x) || isnumeric(x));
-ProgramOptionsParser.addParamValue('PasswordLengthMin', 2, @isnumeric);
-ProgramOptionsParser.addParamValue('PasswordLengthMax', 8, @isnumeric);
-ProgramOptionsParser.addParamValue('WindowName', 'Login', @ischar);
-
-% Parse Input Arguments
-try
-    ProgramOptionsParser.parse(varargin{:});
-catch Error
-    ProgramOptionsParser.parse;
-    if strcmpi(Error.identifier, 'MATLAB:InputParser:ArgumentFailedValidation')
-        error(Error.identifier, Error.message);
-    end;
-end;
-
-ProgramOptions = ProgramOptionsParser.Results;
-
-% Validate password length options
-if ProgramOptions.CheckPasswordLength
-    if ProgramOptions.PasswordLengthMax < ProgramOptions.PasswordLengthMin
-        error('MATLAB:InputParser:ArgumentFailedValidation', 'PasswordLengthMax must be greater than PasswordLengthMin');
-    end;
-end;
-
-%% Determine GUI Size and Position
-% Center the GUI on the screen.
-
-set(0,'Units','pixels')
-Screen = get(0,'screensize');
-
-PositionGUI = [0 0 300 50];
-if ProgramOptions.enterUserName
-    PositionGUI = PositionGUI + [0 0 0 50];
-end;
-if ProgramOptions.ValidatePassword
-    PositionGUI = PositionGUI + [0 0 0 50];
-    OffsetBottom = 43;
-else
-    OffsetBottom = 0;
-end;
-
-PositionGUI = [Screen(3:4)/2-PositionGUI(3:4)/2 PositionGUI(3:4)];
-PositionLeft = 10;
-BoxWidth = 200;
-
-%% Create the GUI
-
-BackgroundColor = get(0,'DefaultUicontrolBackgroundcolor');
-handles.figure1 = figure('Menubar','none', ...
-    'Units','Pixels', ...
-    'Resize','off', ...
-    'NumberTitle','off', ...
-    'Name',ProgramOptions.WindowName, ...
-    'Position',PositionGUI, ...
-    'Color', BackgroundColor, ...
-    'WindowStyle','modal');
-
-% Create Password Validation Entry Box
-if ProgramOptions.ValidatePassword
-    handles.java_PasswordValidate = javax.swing.JPasswordField();
-    handles.java_PasswordValidate.setFocusable(true);
-    [handles.java_PasswordValidate, handles.edit_PasswordValidate] = javacomponent(handles.java_PasswordValidate, [], handles.figure1);
-
-    set(handles.edit_PasswordValidate, ...
-        'Parent', handles.figure1, ...
-        'Tag', 'edit_PasswordValidate', ...
-        'Units', 'Pixels', ...
-        'Position',[PositionLeft 10 BoxWidth 23]);
-
-    handles.text_LabelPasswordValidate = uicontrol('Parent',handles.figure1, ...
-        'Tag', 'text_LabelPassword', ...
-        'Style','Text', ...
-        'Units','Pixels',...
-        'Position',[PositionLeft 33 BoxWidth 16], ...
-        'FontSize',10, ...
-        'String','Reenter password:',...
-        'HorizontalAlignment', 'Left');
-end;
-
-% Create Password Entry Box
-handles.java_Password = javax.swing.JPasswordField();
-[handles.java_Password, handles.edit_Password] = javacomponent(handles.java_Password, [PositionLeft 10+OffsetBottom BoxWidth 23], handles.figure1);
-handles.java_Password.setFocusable(true);
-
-set(handles.edit_Password, ...
-    'Parent', handles.figure1, ...
-    'Tag', 'edit_Password', ...
-    'Units', 'Pixels', ...
-    'Position',[PositionLeft 10+OffsetBottom BoxWidth 23]);
-drawnow;    % This drawnow is required to allow the focus to work
-   
-handles.text_LabelPassword = uicontrol('Parent',handles.figure1, ...
-    'Tag', 'text_LabelPassword', ...
-    'Style','Text', ...
-    'Units','Pixels',...
-    'Position',[PositionLeft 33+OffsetBottom BoxWidth 16], ...
-    'FontSize',10, ...
-    'String','Key:',...
-    'HorizontalAlignment', 'Left');
-
-% Create OK Pushbutton
-handles.pushbutton_OK = uicontrol('Parent',handles.figure1, ...
-    'Tag', 'pushbutton_OK', ...
-    'Style','Pushbutton', ...
-    'Units','Pixels',...
-    'Position',[PositionLeft+BoxWidth+5 10 30 23], ...
-    'FontSize',10, ...
-    'String','OK',...
-    'HorizontalAlignment', 'Center');
-
-% Create Cancel Pushbutton
-handles.pushbutton_Cancel = uicontrol('Parent',handles.figure1, ...
-    'Tag', 'pushbutton_Cancel', ...
-    'Style','Pushbutton', ...
-    'Units','Pixels',...
-    'Position',[PositionLeft+BoxWidth+30+7 10 50 23], ...
-    'FontSize',10, ...
-    'String','Cancel',...
-    'HorizontalAlignment', 'Center');
-
-% Create User Name Edit Box
-if ProgramOptions.enterUserName
-    handles.java_UserName = javax.swing.JTextField();
-    handles.java_UserName.setFocusable(true);
-    [handles.java_UserName, handles.edit_UserName] = javacomponent(handles.java_UserName, [], handles.figure1);
-
-    set(handles.edit_UserName, ...
-        'Parent', handles.figure1, ...
-        'Tag', 'edit_UserName', ...
-        'Units', 'Pixels', ...
-        'Position',[PositionLeft 53+OffsetBottom 200 23]);
-    set(handles.java_UserName, 'Text', ProgramOptions.DefaultUserName);
-    drawnow;    % This drawnow is required to allow the focus to work
-
-    handles.text_LabelUserName = uicontrol('Parent',handles.figure1, ...
-        'Tag', 'text_LabelUserName', ...
-        'Style','Text', ...
-        'Units','Pixels',...
-        'Position',[PositionLeft 76+OffsetBottom 200 16], ...
-        'FontSize',10, ...
-        'String','User name:',...
-        'HorizontalAlignment', 'Left');
-
-    %uicontrol(handles.edit_UserName);
-    %set(handles.figure1,'CurrentObject',handles.java_UserName)
-    handles.java_UserName.requestFocus;     % Get focus
-    drawnow;
-else
-    handles.java_Password.requestFocus;     % Get focus
-    drawnow;
-end;
-
-%% Setup Callbacks for Objects
-% Adds the callback functions for the objects in the GUI
-
-set(handles.pushbutton_OK,     'Callback', {@pushbutton_OK_Callback, handles, ProgramOptions}, 'KeyPressFcn', {@pushbutton_KeyPressFcn, handles, ProgramOptions});
-set(handles.pushbutton_Cancel, 'Callback', {@pushbutton_Cancel_Callback, handles, ProgramOptions}, 'KeyPressFcn', {@pushbutton_KeyPressFcn, handles, ProgramOptions});
-set(handles.java_Password, 'ActionPerformedCallback', {@pushbutton_OK_Callback, handles, ProgramOptions});
-
-if ProgramOptions.ValidatePassword
-    if ProgramOptions.enterUserName
-        ObjectNext = handles.java_UserName;
-    else
-        ObjectNext = handles.java_Password;
-    end;
-    set(handles.java_PasswordValidate, 'ActionPerformedCallback', {@pushbutton_OK_Callback, handles, ProgramOptions}, 'NextFocusableComponent', ObjectNext);
-    set(handles.java_Password, 'NextFocusableComponent', handles.java_PasswordValidate);
-elseif ProgramOptions.enterUserName
-    set(handles.java_Password, 'NextFocusableComponent', handles.java_UserName);
-end;
-
-if ProgramOptions.enterUserName
-    set(handles.java_UserName, 'ActionPerformedCallback', {@pushbutton_OK_Callback, handles, ProgramOptions}, 'NextFocusableComponent', handles.java_Password);
-end;
-
-setappdata(handles.figure1, 'isCanceled', false);
-
-%% Wait for Completion
-
-% Wait for the user to complete entry.
-drawnow;
-uiwait(handles.figure1);
-
-%% Get current information
-% User either closed the window or pressed cancel or OK.
-
-isCanceled = ~ishandle(handles.figure1) || getappdata(handles.figure1, 'isCanceled');
-if isCanceled
-    if ishandle(handles.figure1)
-        delete(handles.figure1);
-    end;
-    Password = -1;
-    UserName = '';
-    return;
-end;
-
-Password = handles.java_Password.Password';
-if ProgramOptions.enterUserName
-    UserName = strtrim(get(handles.java_UserName, 'Text'));
-else
-    UserName = '';
-end;
-delete(handles.figure1);
-
-%% DEFINE FUNCTIONS
-% The subfunctions required by this program are in the following section.
-
-function pushbutton_KeyPressFcn(hObject, eventdata, handles, ProgramOptions)
-
-switch eventdata.Key
-    case 'return'
-        Callback = get(hObject, 'Callback');
-        feval(Callback{1}, hObject, '', Callback{2:end});
-end;
-
-function pushbutton_OK_Callback(hObject, eventdata, handles, ProgramOptions)
-if ProgramOptions.enterUserName
-    % Check if username is blank
-    UserName = strtrim(get(handles.java_UserName, 'Text'));
-    if isempty(UserName)
-        strMessage = 'Username is blank';
-        %disp(strMessage)
-        hError = errordlg(strMessage, 'passwordEntryDialog');
-        uiwait(hError);
-        return;
-    end;
-end;
-
-if ProgramOptions.CheckPasswordLength
-    %Password = handles.edit_Password.Password';
-    Password = handles.java_Password.Password';
-    if length(Password) < ProgramOptions.PasswordLengthMin || length(Password) > ProgramOptions.PasswordLengthMax
-        strMessage = sprintf('Password must be between %d and %d characters', ...
-            ProgramOptions.PasswordLengthMin, ...
-            ProgramOptions.PasswordLengthMax);
-        %disp(strMessage);
-        hError = errordlg(strMessage, 'passwordEntryDialog');
-        uiwait(hError);
-        if ProgramOptions.ValidatePassword
-            set(handles.java_PasswordValidate,'Text', '');
-        end;
-        handles.java_Password.requestFocus
-        return;
-    end;
-end;
-
-if ProgramOptions.ValidatePassword
-    % Check if passwords match
-    if ~isequal(handles.java_Password.Password, handles.java_PasswordValidate.Password)
-        strMessage = 'Passwords do not match.  Please try again';
-        %disp(strMessage);
-        hError=errordlg(strMessage, 'passwordEntryDialog','modal');
-        uiwait(hError);
-        set(handles.java_Password,'Text', '');
-        set(handles.java_PasswordValidate,'Text', '');
-
-        handles.java_Password.requestFocus
-        return;
-    end;
-end;
-uiresume(handles.figure1);
-
-function pushbutton_Cancel_Callback(hObject, eventdata, handles, ProgramOptions)
-setappdata(handles.figure1, 'isCanceled', true);
-uiresume(handles.figure1);
-##### SOURCE END #####
---></body></html>
\ No newline at end of file
diff --git a/html/pcode.png b/html/pcode.png
new file mode 100644
index 0000000000000000000000000000000000000000..6801bd9a259131e6de7d7957789598a451c04334
GIT binary patch
literal 212
zcmeAS@N?(olHy`uVBq!ia0vp^Qb5ej!3-qB<Z=%IDfSXiUsv|a+>CsR(zDBw1As!D
z1s;*bKxKj;%vhfiKM^R%lJ4m1$iT3%pZiZDD@aj*Pl)S(AYk|p<he{>NdQueB|(0{
z3=Yq3qyagOo-U3d6}OTT4lqj`WYF%P$jKq`kl`G&cO%P#Bm=oF5vkS`g<WYg^xQ;5
uJ%V^nXh|&OYn{9TD0Rn~XGetu14Fw$!<AVJqeXy*F?hQAxvX<aXaWEQ1vk(D

literal 0
HcmV?d00001

diff --git a/html/right.png b/html/right.png
new file mode 100644
index 0000000000000000000000000000000000000000..067c5baf250318b85ede9047ea56e394244a8712
GIT binary patch
literal 136
zcmeAS@N?(olHy`uVBq!ia0vp^{2<K83?vyP*g1g|TYyi9D?{4M|Ns9NKi(_{6yYrJ
zh%5%u9$@TtGTRQw(C~C|45_%4oRE;P;y<%fsVPsX8P8WE9zGi$J{<+26Kq`!M-{mw
aBp4Vrai_<LXDtHiVeoYIb6Mw<&;$UGCm+}V

literal 0
HcmV?d00001

diff --git a/html/sgi.png b/html/sgi.png
new file mode 100644
index 0000000000000000000000000000000000000000..20052bc569a92dff7ffb2845009b7b0a5edde83b
GIT binary patch
literal 263
zcmV+i0r>ujP)<h;3K|Lk000e1NJLTq002+`000jN0ssI2{Hx#C0002aNkl<Zc%0>z
zZ3@F642I+A(ex_uOz|q|-Q16CA~DKXHy!h#6nPc#A=(dzh_Dj}01(mYWlSQ*cu32|
zbbY!^c%J9=dA@}A9sq8umob~|g)?E>&V+Ie#<YYdy`=7%#?eNZ(8Z)o>O(HQ<!;U!
zLSW``vIJvGn<jOIdt+*tS(R5X!<pD;xHWMx)uFiy6wEBzDtvdTpTXGDCgLW}rM81Q
z7tdl?<kvcDVRcs9us23wTB&e}`S!1+zvr=~$B&=ak<YhZ#_jgEbO$B;bC>u@+QR?<
N002ovPDHLkV1hx>d=3Br

literal 0
HcmV?d00001

diff --git a/html/simulinkicon.gif b/html/simulinkicon.gif
new file mode 100644
index 0000000000000000000000000000000000000000..1386ddd4ce654071015610e81fdea82461d8e28b
GIT binary patch
literal 977
zcmbu8u}_m>5XK)83^3Uu8;SX77?CI^3B-XItA?P13elB7PXr>Q5E~tEP-6{~F%D-K
z)WpFqI=OT~2IKIO5C<o_>(b~XFmOKi{R_TBlgr&b_q*r5UY@)(Ha=TG0e=CHm)y-=
z-NhXdrR2#xsVDJ-NLq3;H+2&?M6D)Qb5&PyMYKwCF&A|a7f{KO9Oh7mI2cfy($r!z
zs}XbJSxTCcq=XpD$Sj#AlVk`ACe@N^Qb~${Vy##bO(ID^Mz$tcf+k1;r;?gtgeE1i
znB!n-Q<_?AMl2LDpPGpoVn2>$q-rXrh;>Q9q^OCQfZG#_wFWhaf$Px^VzQfdaDPH@
zLsC<W(4=H3IXIZwl%^KKxkxkS6IFzf+>c`!iKu|Sa$Qm|sSpKyq|-EjTr8*2+?H0-
z4`Q;Lc94k+b3;;7jL_^P7CAVW+LT6|D5{xe%m-eKMsh!nWh97?BYe&89m)KJVRL?!
zsLhQI*K_ZpHMb*<kZ%}DIdt44=Lq3knx6x&MDw^)8)yMdpaIl@8ZZNtff7(8#($*S
z?RKlxYBrmVMx$P@*J`zynVE9ATq>1{#n2u&8oRKvdcS(-_QHDh{>=FJST?;-$*#_>
zFWg+IF0Bn^lXvHav-8W#Szfc2RV!<i>b=VRFa{1fJ1Bvn_=*1$x~u5G{^07%?ML0m
zHxB3bGCb|+8kyh!`1T@vWbw!Thc`P<PV^sbc8?5xe%>>6y|3Oo@O9$!+|lO2pBq=~
z?6HkkzgKp4CuH{I*7l2^yRRR1_MTc?@7vp&8a;gcZ2H%?cU{-M_dgh2`cl7D{M1<}
G;M_lk-mF{z

literal 0
HcmV?d00001

diff --git a/html/solaris.png b/html/solaris.png
new file mode 100644
index 0000000000000000000000000000000000000000..e31e8a2a48078233e65bf10502de055609469206
GIT binary patch
literal 286
zcmV+(0pb3MP)<h;3K|Lk000e1NJLTq002+`000jN0ssI2{Hx#C0002xNkl<Zc%0=|
zZ4QGV3@r;sldH66s#npwu^)AW(Au%N=`vo7!9ri&vwUbkL>LJX0GRn|87F~=qO=0d
z$LTWTx~|80zJzI-0N{4DjI%Mk;moMpnNcohj7EB(iPVo~iqGKm_8{s|W(+hpPU=N2
zz2$E5rj(XtF(bOm8L*eKNAeVg;o46LO1s$e-HK3o_b<sZYi^Rf#}9jJSUU+c*Fkd@
zXiY^{CnTkbe2^c^3Y(}aTx#pox#*}Tr>;p)l_XJ5>4v`(0TG#bkaL)bhCi169@`rB
kx1WB<=i4tMjP|#52ZwT~UP>&M!~g&Q07*qoM6N<$g3~#GJpcdz

literal 0
HcmV?d00001

diff --git a/html/up.png b/html/up.png
new file mode 100644
index 0000000000000000000000000000000000000000..b348b9a1b19bd5030efd3df293d84a18b41ef6a4
GIT binary patch
literal 162
zcmeAS@N?(olHy`uVBq!ia0vp^{2<K83?vyP*g1g|TYyi9D?{4M|Ns9NKi(_{6k#d}
z@(cdY@N~O@7f4x>x4R4De<s~~Kn`btM`SUO_5fqIli7AahPtPVV@SoV<b;HT75@(h
yd~aX4tZm_;wuKIDijD1xN7;|Kx;dEg@G!_6;+Y%x_VEOu76wmOKbLh*2~7ZYv@Wjz

literal 0
HcmV?d00001

diff --git a/html/user_url_pw_inputdlg.html b/html/user_url_pw_inputdlg.html
deleted file mode 100644
index 3b58ecf50e7..00000000000
--- a/html/user_url_pw_inputdlg.html
+++ /dev/null
@@ -1,102 +0,0 @@
-
-<!DOCTYPE html
-  PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html><head>
-      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-   <!--
-This HTML was auto-generated from MATLAB code.
-To make changes, update the MATLAB code and republish this document.
-      --><title>user_url_pw_inputdlg</title><meta name="generator" content="MATLAB 9.4"><link rel="schema.DC" href="http://purl.org/dc/elements/1.1/"><meta name="DC.date" content="2019-03-21"><meta name="DC.source" content="user_url_pw_inputdlg.m"><style type="text/css">
-html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td{margin:0;padding:0;border:0;outline:0;font-size:100%;vertical-align:baseline;background:transparent}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}blockquote:before,blockquote:after,q:before,q:after{content:'';content:none}:focus{outine:0}ins{text-decoration:none}del{text-decoration:line-through}table{border-collapse:collapse;border-spacing:0}
-
-html { min-height:100%; margin-bottom:1px; }
-html body { height:100%; margin:0px; font-family:Arial, Helvetica, sans-serif; font-size:10px; color:#000; line-height:140%; background:#fff none; overflow-y:scroll; }
-html body td { vertical-align:top; text-align:left; }
-
-h1 { padding:0px; margin:0px 0px 25px; font-family:Arial, Helvetica, sans-serif; font-size:1.5em; color:#d55000; line-height:100%; font-weight:normal; }
-h2 { padding:0px; margin:0px 0px 8px; font-family:Arial, Helvetica, sans-serif; font-size:1.2em; color:#000; font-weight:bold; line-height:140%; border-bottom:1px solid #d6d4d4; display:block; }
-h3 { padding:0px; margin:0px 0px 5px; font-family:Arial, Helvetica, sans-serif; font-size:1.1em; color:#000; font-weight:bold; line-height:140%; }
-
-a { color:#005fce; text-decoration:none; }
-a:hover { color:#005fce; text-decoration:underline; }
-a:visited { color:#004aa0; text-decoration:none; }
-
-p { padding:0px; margin:0px 0px 20px; }
-img { padding:0px; margin:0px 0px 20px; border:none; }
-p img, pre img, tt img, li img, h1 img, h2 img { margin-bottom:0px; } 
-
-ul { padding:0px; margin:0px 0px 20px 23px; list-style:square; }
-ul li { padding:0px; margin:0px 0px 7px 0px; }
-ul li ul { padding:5px 0px 0px; margin:0px 0px 7px 23px; }
-ul li ol li { list-style:decimal; }
-ol { padding:0px; margin:0px 0px 20px 0px; list-style:decimal; }
-ol li { padding:0px; margin:0px 0px 7px 23px; list-style-type:decimal; }
-ol li ol { padding:5px 0px 0px; margin:0px 0px 7px 0px; }
-ol li ol li { list-style-type:lower-alpha; }
-ol li ul { padding-top:7px; }
-ol li ul li { list-style:square; }
-
-.content { font-size:1.2em; line-height:140%; padding: 20px; }
-
-pre, code { font-size:12px; }
-tt { font-size: 1.2em; }
-pre { margin:0px 0px 20px; }
-pre.codeinput { padding:10px; border:1px solid #d3d3d3; background:#f7f7f7; }
-pre.codeoutput { padding:10px 11px; margin:0px 0px 20px; color:#4c4c4c; }
-pre.error { color:red; }
-
-@media print { pre.codeinput, pre.codeoutput { word-wrap:break-word; width:100%; } }
-
-span.keyword { color:#0000FF }
-span.comment { color:#228B22 }
-span.string { color:#A020F0 }
-span.untermstring { color:#B20000 }
-span.syscmd { color:#B28C00 }
-
-.footer { width:auto; padding:10px 0px; margin:25px 0px 0px; border-top:1px dotted #878787; font-size:0.8em; line-height:140%; font-style:italic; color:#878787; text-align:left; float:none; }
-.footer p { margin:0px; }
-.footer a { color:#878787; }
-.footer a:hover { color:#878787; text-decoration:underline; }
-.footer a:visited { color:#878787; }
-
-table th { padding:7px 5px; text-align:left; vertical-align:middle; border: 1px solid #d6d4d4; font-weight:bold; }
-table td { padding:7px 5px; text-align:left; vertical-align:top; border:1px solid #d6d4d4; }
-
-
-
-
-
-  </style></head><body><div class="content"><pre class="codeinput"><span class="keyword">function</span> [url, user, pw] = user_url_pw_inputdlg
-<span class="comment">%user_url_pw_inputdlg</span>
-<span class="comment">%   Return the URL, user name and password for the openBIS server</span>
-
-prompt = {<span class="string">'openBIS URL:'</span>, <span class="string">'openBIS user:'</span>};
-title = <span class="string">'openBIS connection details'</span>;
-definput = {<span class="string">'https://XYZ.ethz.ch/openbis:8443'</span>, <span class="string">''</span>};
-answer = inputdlg(prompt, title, 1, definput);
-
-url = answer{1};
-user = answer{2};
-
-pw = passwordEntryDialog(<span class="string">'CheckPasswordLength'</span>,0);
-
-<span class="keyword">end</span>
-</pre><p class="footer"><br><a href="https://www.mathworks.com/products/matlab/">Published with MATLAB&reg; R2018a</a><br></p></div><!--
-##### SOURCE BEGIN #####
-function [url, user, pw] = user_url_pw_inputdlg
-%user_url_pw_inputdlg
-%   Return the URL, user name and password for the openBIS server
-
-prompt = {'openBIS URL:', 'openBIS user:'};
-title = 'openBIS connection details';
-definput = {'https://XYZ.ethz.ch/openbis:8443', ''};
-answer = inputdlg(prompt, title, 1, definput);
-
-url = answer{1};
-user = answer{2};
-
-pw = passwordEntryDialog('CheckPasswordLength',0);
-
-end
-##### SOURCE END #####
---></body></html>
\ No newline at end of file
diff --git a/html/windows.png b/html/windows.png
new file mode 100644
index 0000000000000000000000000000000000000000..6cec95b8815d3d5dab8c97c41c75197fdb014135
GIT binary patch
literal 286
zcmV+(0pb3MP)<h;3K|Lk000e1NJLTq002+`000jN0ssI2{Hx#C0002xNkl<Zc%0=|
zQ4WJJ2&Ich)2qOl@G5vW_rXRCVAG|WTh<q22&GS+lvWEO!bq3^fSJFY#zi2aNv%R_
zKi$r_ZCgLjhcM4G0NlQv#?=^J@Xi?Rol&n!jKi`l(T;|5DjZK59PKzaMN(na;FJ_v
zt<MXs7E^EjN(SkWh=|DX6*x~i*TO`kl8hn|ta_Z1V};LRUP6@7N!7@f_i$8ltS~%l
zd$yh%@m|f1Y*QnnYE#Wt+e)4F@pi8y8r#z1ZPa-jtueGL>4J#NJjgjrM8h9Te~(8G
kcWyrh{e1gnl+pf{?#tSrFr=&ZY5)KL07*qoM6N<$f*5RoFaQ7m

literal 0
HcmV?d00001

-- 
GitLab