RST / Dr. Kajetan Hinner \ RST

Die deutsche Anleitung finden Sie hier.

RST: Rapid Survey Tool - Disclaimer and Licence

Note: All programs and scripts are provided as-is. You can use them for free, but don't make me reliable if something is not working as it should or you expected. I appreciate it if you notify me in case you found something useful.
Right now RST has been tested in a Unix environment (Slackware/Debian Linux 2.0.36/2.2.19/2.4.x/2.6.x and Perl 5.004_04; FreeBSD 4.x).
Perl is a powerful language which is easy to learn if you know the basics of C and Unix Regular Expressions. If you need more information on this, visit the Perl homepage.
You are allowed to use RST for free. You are also allowed to use it in a commercial environment. But you are not allowed to give it away for money, sell it, put it on a CD and charge money for it. You are also not allowed to enhance it and sell it then.
Enhancements are of course encouraged. Please send me the diff-Files or mark each line you changed with some id.
The name Rostock Survey Tool has been changed after I quit working at University of Mainz in 2008 (1996 until 2002: Rostock University).

Overwiew: What is RST?

RST is a powerful tool for creating online surveys, order forms or data input forms. It is responsible for
  1. creating and displaying the survey page
  2. accepting and storing variable information
  3. allowing access for survey maintainers: data file (SPSS import ready) and short online summaries of survey results.
To use RST you need access to a WWW-Server and willingness for Unix. If you want to do only one simple online survey, RST might not be the right tool for you. There are many online survey companies which let you create and host simple surveys, like <>. RST is suitable for hosting many online surveys on your own server. It has been designed for longterm surveys in a professional environment (science, business).

RST is considered as being finished and working without errors - at least for me.

How RST works

The main program rst_main.cgi is written in Perl. There is one config file (rst_surveys.cfg) which tells rst_main.cgi which survey should be worked on.
When the survey is invoked for the first time by the user, a unique id (always increased whith each Survey Hit) is given to her. When she submits the survey, this ID is used to save their entered variable values. Each variable is stored in its own file. A Thank-You message is displayed and can be configured easily by the survey maintainer.

There is an internal area too: There you can find a possibility to find out how many respondents there were so far and you are able to d/l a file with survey data, which can be used with Excel or SPSS.

Note that there is only one file which does the job. It finds out if it is called for the first or the second time by the same user and either prints the survey or stores the results. This file also handles requests by the survey maintainer. Advantage of this approach: You don't have to flood your cgi-bin directory. Disadvantage: If you just want to change the results code, the whole survey program could fail executing.


There are two versions so far: German survey and English survey.
Click here for the quick results and internal access to those surveys: German, English
Corresponding definition file: Output HTML
#{Survey} Demo

{<h2>}This is your demo survey!{</h2>}

{<p>} You can fill it in, but you don't need to... :-) . {</p>}

{Q} Name: {A_30_30}

{Qb} How much would you like to spend for this program (first field: Amount; Second: Currency)? {Ase_4_4} in {Ase_3_3}

{Q} What's your age?
{Ai} Between one and ten
{Ai} Between 11 and 20
{Ai} Between 21 and 30
{Ai} Between 31 and 40
{Ai} Between 41 and 50
{Ai} Between 51 and 99
{Ai} {A+se_3_3} I'd like to give you my exact age.

{Qc} Whom did you read so far?
{A} Max Weber
{A} Georg Simmel
{A} Thorstein Veblen
{A} Karl Popper

That's it. Click "Continue" for our answers page.

This is your demo survey!

You can fill it in, but you don't need to... :-) . 
Q1. Name: 

Q2. How much would you like to spend for this program (first field: Amount; Second: Currency)? in 

Q3. What's your age?

Between one and ten
Between 11 and 20
Between 21 and 30
Between 31 and 40
Between 41 and 50
Between 51 and 99
I'd like to give you my exact age. 

Q4. Whom did you read so far?
Max Weber
Georg Simmel
Thorstein Veblen
Karl Popper

That's it. Click "Continue" for our answers page.

Example survey - ASCII definition file and HTML output


There is no "hidden code" in this program. There isn't any reference (link) to outside graphics or help files. You get all you need in the package.
But take care of security of your server and access rights. You should only grant as few as absolutely needed. If you are not sure how this works, inform yourself about Unix access rights (chmod and chown). There is some more advice on this in the Installation section.


Please use this link to the Download-Server and get the newest version rst_latest.tar.gz


Get and unpack the distribution using
gunzip rst_latest.tar.gz
tar -xvf rst_latest.tar
Change to the newly created directory of rst. Find out where your cgi-bin directory is located (type: locate cgi-bin). On my system it's /usr/lib/cgi-bin/
On most systems you have to be root to store files in this directory. Copy the files in the cgi-bin subdirectory to your system's cgi-bin directory (for Apache2 on FreeBSD 4.7 you need to use /usr/local/www/cgi-bin-dist/) .
cd cgi-bin
cp rst_main.cgi /usr/lib/cgi-bin/
cp rst_surveys.cfg /usr/lib/cgi-bin/
Security: The rst_main.cgi script should be not writable by others. To achieve this, change to your system's cgi-bin directory and change the access rights accordingly. Also set owner to root.
cd /usr/lib/cgi-bin/
chmod 755 rst_main.cgi
chown root:root rst_main.cgi
Then take care of the main config file. On my system it's only readable and writable by the http-daemon process (apache on my system). Find out which user your apache runs under and has access to files. It should not be root. If it's root on your system, read those apache docs again and fix this first.
chown www-data:www-data rst_surveys.cfg
chmod 600 rst_surveys.cfg
Of course this rst_surveys.cfg file can be located everywhere on your system. Just make sure to change the appropriate line in rst_main.cgi then.

You've completed the main part. Of course you need to setup your survey also and tell rst where your survey files shall be.

Writing the source file of your survey

Be sure it's a plain ASCII file (not Word, WordPerfect, etc. Format).
The survey file (rst_demo.txt) is very simple, that's why rst is so powerful: You don't need to number variable names or take care of the structure of your survey. This is all done by the rst program. There are special tags which tell rst the structure of your survey file. These tags have to be written in between {} and almost always at the beginning of the line, like:
{Q} What's your age?
{A} Between one and ten
{A} Between 11 and 20
{A} Between 21 and 50
Simpleradio question are the default ones. The user can only select one question. If you want her to allow several selections (checkbox question), just add the "c" modifier in your question tag.
{Qc} Whom did you read so far?
{A} Max Weber
{A} Georg Simmel
{A} Thorstein Veblen
{A} Karl Popper
You get the picture. Matrix questions have to be defined with the m(N,S,O) modifier: N is for number of choices for each answer, S defines number of spaces between buttons and O is offset for variable values.
I won't get more into detail here. Read the Command tags section for more.


You need: The source file of your survey. The configuration file for your survey. It's best to adapt rst_demo.config. You have to change this file, my example won't work on your system! To help you, every line which has to be changed follows "***".
Select a directory in your home directory for your surveys and its data files. Be sure to get access rights done. If in doubt, check with for all readable (chmod +r *). When it works, set access rights for maximum security.
Create a link to your survey from your main page. Every survey is invoked with
"demo" refers to the name of your Survey. You can host unlimited surveys on your system. Choose a good identifier for your survey and don't forget to create different directories for your survey data.
If you want to have access to the internal menu, create a link like:
Be sure to replace those "..." with your computer's name (like:

After configuring your survey in the config file, be sure to allow the WebServer to write to your data directory and files! For example, change the owner of the data directory to your web server's user name and the group to your group. The following is only an example and is good for your system, if you already created a rst subdirectory in your home dir and "www-data" is user and group of your apache process.

cd ~/rst/
mkdir survey_data
chown www-data:www-data survey_data
chmod 775 survey_data

File rst_surveys.cfg

This file defines which surveys are worked on. It’s pretty simple, at first there is the survey name, then the path of this survey’s config file follows. Finally there can be a mode-Flag. Example:
# rst_surveys.cfg – example file
simplesurvey   /home/khh/rst/rst_simplesurvey.cfg <mode>
If the survey name doesn’t exist (invoked with ...rst_main.cgi?_surveycfg=demo) a fatal error results. Same if example file isn’t found. You have to take care of this basic installation procedure.
So far only the "view" mode is supported. Surveys which are marked that way can only be viewed but no submitted data will be stored. This is useful, if you want to keep surveys on the net after the poll is over.

File for Token/Password (i.e. rst_tokenpw.txt)

The path to this file has to be defined in the config-File of your survey.
RST expects in the 2nd row the token and in the 3rd row the password.
For example could your file look like this:

#       LOGIN   PASSW          STATUS
1       usern1     pw1        comment1
2       usern2     pw2        comment2

Columns are distinct with whitespaces. # at the beginning of a line marks a comment.
Depending on your setting in the config file the Token/Password file is ignored or each combination may be used only once or multiple times.

File for used (void) Token/Password (i.e. rst_token_void.txt)

This file is written by RST, each column :

ID#     LOGIN     tokenmode
1       usern1       1
2       usern2       2

The first column contains the survey ID, the second the used Login/Token, the third the tokenmode currently in use.

Locale: Supported languages

Right now only English and German are supported. Those files define error messages and other language-dependent settings. Take a look to get a clue:
  • You are free to translate the demo files and send me your locale files. They will be included in following releases.


     These are the main tags and short description for the survey definition file:

    {survey} Document should start with this tag
    {createsyntax} writes spss syntax file with variable and labels to output
    {newpage} breaks survey into several parts
    {<html>} print html code as is (without any line feeds as it would be printed without {<....>}
    Example: {<HR>} Horizontal Rule - the user's browser will print a horizonzal rule then.
    {mail emailaddress} Sends Email when processed. You can use this for Survey View and Results View.
    Example: {mail} in the Survey definition file sends mail when the survey is accessed
    {mail} in the $rst_eos_header HTML (survey config file) sends mail when the survey is submitted.
    {lastanswer} Stops waiting for an answer. Useful for Drop-Down questions.
    {filteranchor_name}Define "name" as position to jump to (to meet a condition or when filtering)

    {If_§variable§operator§value§anchor§} Jump depending on condition (If variable operator value then jump to anchor) - variable and value can be Survey variables (marked with heading $)
        Currently supported operators: =

    {checktoken_login_password}Corresponds with the token file defined in the .config-file: Checked if Variable "login" and corresponding variable "password" is valid.
        The following result codes are possible (and stored in the special variable "$__rst_checktoken_result" which can be used in the "variable" of the If-command):
           1: Token was found with valid password - TokenMode 1
           2: Token was found with valid password - TokenMode 2
           3: Token was found but with wrong password - TokenMode 1
           4: Token was not found - TokenMode 1
           5: Token was found but with wrong password - TokenMode 2
           6: Token was not found - TokenMode 2
           7: checktoken mode is 0 - not set - no pw checking
           8: Token was found with void (already used) password - TokenMode 1

    {quit} Stops parsing. The survey so far will be displayed, the end of survey infile is ignored.

    Single character commands: 

    {Q} Question. Without additional information, all questions are numbered (1,2,3,...) and Simpleradio mode.

    {Qc} Checkbox mode.
    {Qm(N,S,O)} Matrix Mode, N represents choices for each answer. S spaces between buttons, O offset for value
    {Qd(SIZE=3 Multiple)} Drop-Down like questions (selection mode); Code in parentheses is copied as is. This example means 3 options can be seen and user can select more than one entry. In this case, the variable name will be special: _m will be appended, and the multiple values will be set comma-separated. [Hint: Use 'e' command to disable HTML end coding in Drop-Down mode.]

    {Qs} Sequence. Useful for filters, this question has the same number as the one before, but a letter is attached (a,b,c) by default.
    {Q&vname&} Don't autoselect variable name (like "Q12"), but set vname (like "income") for this Question, mostly you will use = or ! option also.
    {Q!} Do not print question number in front of question text.
    {Q=} Do not autonumber variable numbers for this Question (this is useful for questions inserted after an online survey is already running for some time or with option &&.
    {Qi} indent. Print four spaces before question text
    {Qb} beginning: There won't be generic HTML added before this question
    {Qe} end: There won't be a line feed added after this question (if you want next item in the same line)

    {A} Answer. Belongs to the previous defined {Q}.

    Without additional tags the default depends on the previous question's type.
    {A_} defines text openfield. {A_20_25} defines width of 20 characters and max length of 25.
    {At(rows="3" cols="50")}. Defines a text area input field with 3 rows and 50 Columns.
    {A&vname&} Don't autoselect variable name, but define name of variable for this answer
    {A=} don't auto number answers
    {A+} increase answer number and reset answerseq_no
    {Ai} indent: print 4 spaces before answer
    {Ab} beginning: Do NOT add some spaces before this question (if you want no indent)
    {Ae} end: Do NOT add a line feed after this answer (if you want both in same line). [Hint: In Drop-Down Question mode ('d'-Tag), this 'e'-Tag is automatically selected.]
    {Af-filter_anchor-} If this answer has been chosen, filter and jump to the anchor named "filter_anchor".
    {A<extrahtml>} Appends html code in question tag. Only available for Simpleradio answer questions. Example (with enabled Javascript and defined function AutoJump(destination) {window.location=destination) - when clicking the answer the browser jumps to the next question (possibility for filter): {A<OnClick=("#Q10")>}. See example file for details.

    {#} Calculate

    {#ABQ(5-3)} prints number of current Answer (A), A-Sequence (B), Question (Q) (automatically increased} terms in parentheses () will be calculated, like {(Q-1)} prints number of the question before

    {G} Graphic. Display special HTML-code.

    {Gm} matrix: Displays matrix numbers (on top of or end of matrix battery). Prints correct numbers of rows and uses spaces as defined between them.
    {Ge} end html: Add a line feed after Graphic output (if you want both in same line)


  • && may be used for your variable names, but those are not allowed to start with "_" (this marks internal vars). The sequence "_§" is also not allowed in your variable names.
  • Carriage returns are replaced with <cr> and new lines with <br> in all answers (i.e. textarea) which are saved.
  • Two more variables are auto-created: _timeb and _timee. Every invocation of the survey is stored in _timeb (beginning), and every submission in _timee (end). If someone decides not to fill in the survey, then no _timee Timestamp will be found for his access number (ID).
  • Results and internal mode

    So far you can get the quick results page or you can create a file with either the variable data or an SPSS syntax file.
    Please note that this SPSS file can't be perfect and you will often need to change variable type and labels. But it helps you with this a lot.
    Please also make sure that you press "Reload" in your browser to get an updated version of the created file. Most browsers will display old data stored in their cache.
    If you want to display your variables in a certain order (for your Excel file import), please use the @rst_result_variable_order array in your .config-file. If you do so, you must include all your variables you want in your output file in this array, additional variables (files in your data directory) will be ignored.

    Commands in quick result mode

    For a better understanding of these commands, browse through and check rst_summary_html.
  • tail(n,var): Prints n last lines of Variable var.
  • head(n,var): Prints n beginning lines of Variable var.
  • mean (var): Prints mean (arithmetic) of Variable var.
  • maxindex (var): Prints biggest number of ID of Variable var (i.e. for number of participants).
  • max (var): Prints most frequent value of Variable var.
  • Error handling

    In case of errors:
    1. Check your webserver error log (for example: /var/log/apache/error.log)
    2. Check the error log of your survey (in your survey dir, for example the file  rst_demo.error)
    3. Check if there is an error file in /tmp, like: /tmp/rst.error
    4. Be sure to allow the web server to write to the files it needs to write to (i.e. the data directory in the config file)

    Command line mode

    Since version 1.3 RST is useful to create HTML files which can be used for later processing or fine-tuning of your Web-page.
    Of course there needs to be a configuration file and a Locale file for RST to start properly, as in the CGI version.
    You also need to specify a survey definition file. To summarize, you can start RST in command line mode like that:
    perl rst_main.cgi infile.txt <outfile.html>
    You must tell RST the survey definition file (infile.txt).
    You must have a valid configfile (-c or best guess by RST).

    You can also supply the following switches:

    If those files are not defined, RST tries to find sensible solutions on its own. If no outfile is specified, infile.html will be used.

    Known bugs, missing features and things to come


    There is a strange compiling error like "Can't locate Date::Manip"...

    You need to install additional Perl Modules. Take them either from your distribution (in case you use Debian Linux, use dselect to get the missing modules) or from

    I always get the error "No config file (undefined _surveycfg) - check Manual at"

    Let's think again how RST works: Example line in rst_surveys.cfg
    inglehart     /home/rst/data/inglehart/rst_inglehart.config

    Fatal error ():

    The config file is no RST config file so that no locale or errors list can be loaded. Check the file at rst_surveys.cfg your passed survey name is linked to. Look at the example of the previous error: The file rst_inglehart.config in this example is not defined or is now real rst configuration file (or has faulty perl syntax) when this Fatal error appears.

    RST seems to work, but the survey is not displayed. Only the "Continue" button appears when my survey is accessed.

    The .txt-file (Survey definition) is not found. Most probably the path in the Config-File is wrong - did you omit the trailing "/" when you defined the directory of the survey?

    How can I get the data file? I always get a "non implemented" error.

    First of all you need to tell RST that you want it into results mode. So you have to append &_mode=results to your Survey URL. When calling this URL and having copied the default rst_results.en.txt file, you should have two radiobuttons. Chose the first one on each, that is you want Data Output in plain ASCII format and you should get a link to the data file.

    I cannot see the results page

    Make sure that you copied the rst_results.txt in your survey directory and that the corresponding entry in your config file points to that file (if you did not change the default setting you forgot to copy the file to your working directory.

    I can see the results page, but something goes wrong when I want to access my survey data

    Make sure that the two entries $rst_resultsoutputfile and $rst_resultsoutputfilelink are set correctly and that your WWW server process (usually Apache) can write to the file $rst_resultsoutputfile. This entry corresponds to your file system, the latter corresponds to access that specific file using http. Depending on your rights on your survey you maybe should put that file in your public_html directory.

    The creation of the result data file seems to work, but it is almost empty: Only "ID" shows up and that's it.

    Please make sure that the access rights of the web server process are allowed to read the data directory where your survey data is stored.

    How can I erase data? I built my survey, it is working, but now I want to delete the first testing data.

    It is not possible to erase data automatically using the web interface. You need to ssh to the system and either
    a) rename the data directory (where all the files for each question are in), like for example data.old (so you still have an archive). Don't forget to create a new data directory with appropriate access rights..
    b) delete only those question-files you want to discard in the data directory, i.e. if you took out some questions.
    In some cases it is sensible to also change the .id file also, which stores the current survey number, so it will start from 1 again.

    I want to include a picture in my survey. How to do this?

    Just include the necessary HTML in your .txt file between {< and >}, like
    {<img SRC="">}
    If you need fancy layout, you can fire up SeaMonkey (or any other HTML) Editor, do what you want with the picture, view the source, copy and paste it.

    RST seems to work, but I do not see any survey questions, only the "Submit" button appears

    rst_main.cgi is not able to access your survey .txt file. Several reasons are possible: The web server process does not have appropriate access rights to read the file. The file does not exist or there is a typo somewhere.
    You will find out what's wrong if you look for .log or .error files. If there are no files where they should be, look into the /tmp directory.

    Filter mode: The renumbering of the questions / answers is not always working

    Be sure that {Q} and {A} tags are always at the very beginning of each line in the .config-file

    Is the HTML::Entities module really needed?

    Yes. It is not easy to install additional perl modules if you are not root. You can put it into your user directory and modify the rst_main.cgi program to read those files from there. So you do not need to be root. The package name in Debian Squeeze: libhtml-parser-perl

    I do not understand why there are so many files needed and how they work together

    Please read this manual again. There are no additional or unneeded remarks, every sentence is necessary to understand how RST works. If you still do not understand, please read the comments in the RST program itself. They should be self-explanatory.

    Who is using RST?

    There is no obligation to register and RST is available for free. Users can only be identified when they are downloading RST (ftp logfile). It is found that RST is used worldwide, Top Level Domais include the US, Austria, Switzerland, the Netherlands, Canada, Australia, Great Britain, Poland, Romania, Sweden.
    Corporations like 3M, ABB, Adidas, Alcatel, BMW, Böhringer-Ingelheim, Continentale, Daimler-Benz, Debis, Ford, IBM, Network Solutions, Novell, Pro7-Sat1, Siemens, Webasto, Veritas did download RST, but the biggest share is from members of universities like University of Australia, Uni Augsburg, HU Berlin, Uni Bochum, TU Darmstadt, Uni Duisburg, KU Eichstätt, Uni Erlangen, Uni Essen, Uni Göttingen, Uni Greifswald, Univ. of Guelph, FU Hagen, Uni Hamburg, Uni Hannover, Uni Jena, Uni Karlsruhe, Uni Kassel, Uni Leipzig, Uni Maastricht, HS Magdeburg, Uni Marburg, Uni Münster, Univ. of Surrey, Univ. Sunderland, Uni Tübingen, Univ. Zürich, Univ. of Texas.
    Most addresses though are from access providers like T-Online, AOL, UUnet, and cannot be resolved to users or institutions. Very exotic was the download of RST 1.3 from Kathmandu, Nepal

    Updating to a new version

    Please do not update from RST 1.2 to 1.3 (or later versions) while you are running a survey on your system. With new functions added, not only rst_main.cgi but also the rst_config file will be changed. And this will affect your survey. If you are not an experienced programmer and know what you are doing (and can copy&paste the sections of the newer config files to your existing survey's file), please install newer versions only when you don't want anyone to fill in elder surveys. Beware you and me from hassle.


    1.2: First public release: December 18th, 1999

    1.3beta: January 13th, 2000

    1.3beta2: February, 4th, 2000 (provided only for experienced users, 1.3 will follow)

  • Provides textarea Tag
  • Provides Dropdown-Command (Select/Option)
  • Matrix questions are built on tables now
  • Command Line mode working fine
  • Several minor bugfixes
  • 1.3beta3: April 10th, 2000 (provided only for experienced users, 1.3 will follow)

  • Several changes in Dropdown code
  • included {lastanswer} tag.
  • included max(var) command for results mode.
  • Better documentation
  • 1.3beta4: May 12th, 2000 (provided only for experienced users, 1.3 will follow)

  • New: Mail command.
  • Removed $rst_eos_footer from config file. Beware updaters from 1.2!
  • Changed End of Survey code
  • Correct HTML entities encoding
  • improved rst_surveys.cfg for demo purposes
  • Introduced new tool: rst_check, checks for non-numeric characters in variables (good for cleaning survey file)
  • 1.3beta5: May 21st, 2000 (provided only for experienced users, 1.3 will follow)

  • Introduced "view" only mode for surveys.
  • New german manual.
  • Attention for users of previous 1.3beta versions: Line 61 ($rst_button_type) of rst_config_file was changed.
  • 1.3beta6: June 2nd, 2000 (provided only for experienced users, 1.3 will follow)

  • Better error handling if there is a syntax error in the config file
  • new command for adding extra html in answers: {A<...>}
  • 1.3beta7: July 5th, 2000 (provided only for experienced users, 1.3 will follow)

    1.3: March 10th, 2001

  • Fixed small bug which caused sometimes an entry in the webserver error log ($rst_error).
  • Official release of RST 1.3.
  • 1.3.1: November 1st, 2001

  • Numbering of questions is also working if a specific variable name was given.
  • Added "!" option for questions (omit question numbering output).
  • Fixed small bug which caused an entry in the webserver error log ("use of uninitialized value in rst_locale, line 37")
  • 1.3.2: May 5th, 2003

  • Added new example, Pool for World Football Championship 2002 (all "surveys" of all rounds of the tournament)
  • 1.3.3: June 8th, 2003

  • English locale is now English again and not German.
  • Small documentation updates
  • 1.3.4: April 6th, 2004

    1.3.5: August 2nd 2007

    1.4. August 29th, 2007

  • Filtering: Included {Af} command and {filteranchor} command
  • included new filter related error in locale files
  • Small documentation updates
  • 1.4.1 September 20th, 2007

  • HTML page numbering fixed (thanks to Lucian Krille)
  • Fixed wrong calculation of question numbering in filter mode
  • Fixed wrong line numbers printed in questionnaire debug mode
  • Fixed skipped line after {newpage}- no empty line after {newpage} necessary any more (thanks to Lucian Krille)
  • 1.4.2 April 20th, 2010

    1.4.3: July/August 2010 (no public release yet, please ask for obtaining)

    1.4.4: February 2013 (no public release yet, please ask for obtaining)

    1.5: expected autumn 2017 [Upcoming]

  • Easy installation
  • Debian packet .deb
  • new place for configuration files (in /etc for Linux - /usr/local/etc for *BSD)

  • Last changes: November 21st, 2016
    This page is  (c) Dr. Kajetan Hinner 1999 - 2016 (, unless otherwise stated. Without written permission it's not allowed to use any of this content (including links) commercially. Non-commercial use is encouraged. But it's not allowed to make profit out of my work (ie: sell this program or use it for surveys you obtain money for. If so, you need a commercial license).

    Please follow this Link to get to my homepage.