if test -e question.html; then echo Overwriting question.html; else echo Extracting question.html; fi
cat > question.html << 'End of question.html'
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang='en'>
<head>
<title>
User Interface Usability Evaluation with Web-Based Questionnaires
</title>
<meta name="description" content="question.cgi is a free script for administering user interface usability questionnaires on the web. The script has been used to display and collect data from several validated questionnaires, including: QUIS, PUEU, CSUQ, ASQ, PUTQ, and USE." />
<meta name="keywords" content="usability, testing, user interface, questionnaire, questionnaires, practical, evaluation, survey, surveys, rating, ratings, rating scale, likert scale, thurstone scale, semantic differential, free, online form-based, quantitative, measurement, satisfaction, data collection, QUIS, PUEU, CSUQ, ASQ, PUTQ, USE" />
<!--#config timefmt="%Y-%m-%d"-->
<!--#config sizefmt="bytes"-->
<meta name = "start-date" content="2001-12-02" />
<meta name="accesses" content="<!--#exec cmd="/acminfo/1/sigs/sigchi/bin/count.pl .question.html" -->" />
<style type="text/css">
<!--
	BODY {background-color: #FFFFFF; font-family: Arial, sans-serif}
	H1 {color: #000077; padding: 5; background-color: #DDD; border: solid 1px black; font-size: 125%}
	H2 {color: #000066; padding: 3; background-color: #EEE; border: solid 1px black; font-size: 110%}
	H3 {color: #000055 }
	.form {background: #EEE; }
	pre { background: #FFE; margin-left: 3em}
	ul.toc {margin-bottom: 0}
	a:hover { background: #CCCCCC}
	tr {vertical-align: top}
	.hcibib { background: #FFFFCC }
	.dark {background: #CCC}
	.light{background: #EEE}
-->
</style>
</head>
<body >
<h1>User Interface Usability Evaluation with Web-Based Questionnaires</h1>

<span style='font-size:120%'>
Last updated:
<b><!--#flastmod file="question.html"--></b>
by <b>Gary Perlman</b></span>
(<a href="http://hcibib.org/perlman/">hcibib.org/perlman/</a>
|
<a href='mailto:perlman@acm.org'>perlman@acm.org</a>)

   <ul>
      <li><a href="#abstract">Abstract</a></li>
      <li><a href="#keywords">Keywords</a></li>
      <li><a href="#intro">Introduction</a></li>
      <li><a href="#standard">Standard Forms of Questionnaires</a></li>
      <li><a href="#combo">Combining Options</a></li>
      <li><a href="#options">Options Reference and Design Form</a></li>
      <li><a href="#data">Data Format and Analysis</a></li>
   </ul>

<h2 id='abstract'>Abstract</h2>

<tt>question.cgi</tt> is a customizable Web-based
perl CGI script to administer and
collect data according to a few "standard" user interface
evaluation questionnaire forms (QUIS, PUEU, CSUQ, and PUTQ).
The script can be customized and run from a remote server,
<a href="question.cgi"
	>hcibib.org/perlman/question.cgi</a>,
from which data are emailed in a simple format.
The script accepts options as part of its form data:
<ul>
	<li>general customizations such as system name, administrator email, ...</li>
	<li>customizations to the rating scale such as number of points, labels, ...</li>
	<li>number of open-ended positive/negative comments requested</li>
</ul>
The script uses these options to present the questionnaire on the Web,
gather ratings, general comments, and question-specific comments,
and email the results to the designated survey administrator.
This document is a user manual that allows
the online reader to design and create their own questionnaire.
It is available at:
<a href="question.html"
	>hcibib.org/perlman/question.html</a>.
The script is freely available, AS-IS, in a shell archive at:
<a href="question.sh"
	>hcibib.org/perlman/question.sh</a>.

<h2 id='keywords'>Keywords</h2>

Subjective ratings,
Usability evaluation,
User satisfaction,
User acceptance,
User interface questionnaire,
Online survey administration,
Remote evaluation,
Measurement,
World-Wide Web, CGI, form,
Human-computer interaction,
Human factors

<h2 id='intro'>Introduction</h2>

<p>
Questionnaires have long been used to evaluate user interfaces
(<a class='hcibib' href="http://hcibib.org/bs.cgi?searchtype=question&amp;query=C.CHI.83.83"
	>Root &amp; Draper, 1983</a>).
Questionnaires have also long been used in electronic form
(<a class='hcibib' href="http://hcibib.org/bs.cgi?searchtype=question&amp;query=J.BRMIC.17.2.203"
	>Perlman, 1985</a>).
For a handful of questionnaires specifically designed to
assess aspects of usability,
the validity and/or reliability have been established,
including some in the following table,
some of which are discussed in Chapter 6 of
<a class='hcibib' href="http://hcibib.org/bs.cgi?searchtype=question&amp;query=B.Tullis.08">Tullis &amp; Albert, 2008</a>.
</p>

<div align='center'>
<table border='1' cellpadding='3' cellspacing='0' summary='Information about questionnaires, including links to examples'>

<tr class='dark' >
	<th>Acronym</th>
	<th>Instrument</th>
	<th>Reference</th>
	<th>Institution</th>
	<th>Example</th>
</tr>

<tr >
	<th class='form'>QUIS</th>
	<td>Questionnaire for User Interface Satisfaction</td>
	<td><a class='hcibib' href="http://hcibib.org/bs.cgi?searchtype=question&amp;query=C.CHI.88.213"
		>Chin <i>et al</i>, 1988</a></td>
	<td>Maryland</td>
	<td><a href="question.cgi?form=QUIS">27 questions</a></td>
</tr>

<tr >
	<th class='form'>PUEU</th>
	<td>Perceived Usefulness and Ease of Use</td>
	<td><a class='hcibib' href="http://hcibib.org/bs.cgi?searchtype=question&amp;query=J.MISQ.13.3.319"
		>Davis, 1989</a></td>
	<td>IBM</td>
	<td><a href="question.cgi?form=PUEU">12 questions</a></td>
</tr>

<tr >
	<th class='form'>NAU</th>
	<td>Nielsen's Attributes of Usability</td>
	<td><a href='http://www.useit.com/jakob/useengbook.html'
		>Nielsen, 1993</a></td>
	<td>Bellcore</td>
	<td><a href="question.cgi?form=NAU">5 attributes</a></td>
</tr>

<tr >
	<th class='form'>NHE</th>
	<td>Nielsen's Heuristic Evaluation</td>
	<td><a href='http://www.useit.com/jakob/useengbook.html'
		>Nielsen, 1993</a></td>
	<td>Bellcore</td>
	<td><a href="question.cgi?form=NHE">10 heuristics</a></td>
</tr>

<tr >
	<th class='form'>CSUQ</th>
	<td>Computer System Usability Questionnaire</td>
	<td><a class='hcibib' href="http://hcibib.org/bs.cgi?searchtype=question&amp;query=J.IJHCI.7.1.57"
		>Lewis, 1995</a></td>
	<td>IBM</td>
	<td><a href="question.cgi?form=CSUQ">19 questions</a></td>
</tr>

<tr >
	<th class='form'>ASQ</th>
	<td>After Scenario Questionnaire</td>
	<td><a class='hcibib' href="http://hcibib.org/bs.cgi?searchtype=question&amp;query=J.IJHCI.7.1.57"
		>Lewis, 1995</a></td>
	<td>IBM</td>
	<td><a href="question.cgi?form=ASQ">3 questions</a></td>
</tr>

<tr >
	<th class='form'>PHUE</th>
	<td>Practical Heuristics for Usability Evaluation</td>
	<td><a href='http://sigchi.org/chi97/proceedings/tutorial/gp.htm'
		>Perlman, 1997</a></td>
	<td>OSU</td>
	<td><a href="question.cgi?form=PHUE">13 heuristics</a></td>
</tr>

<tr >
	<th class='form'>PUTQ</th>
	<td>Purdue Usability Testing Questionnaire</td>
	<td><a class='hcibib' href="http://hcibib.org/bs.cgi?searchtype=question&amp;query=J.BIT.16.4/5.267"
		>Lin <i>et al</i>, 1997</a></td>
	<td>Purdue</td>
	<td><a href="question.cgi?form=PUTQ">100 questions</a></td>
</tr>

<tr >
	<th class='form'>USE</th>
	<td>USE Questionnaire</td>
	<td><a class='hcibib' href="http://hcibib.org/bs.cgi?searchtype=question&amp;query=U.Lund.2001"
		>Lund, 2001</a></td>
	<td>Sapient</td>
	<td><a href="question.cgi?form=USE">30 questions</a></td>
</tr>

</table>
</div>

<p>
There are other questionnaires, including instruments from the
<a href='http://www.ucc.ie/hfrg/questionnaires/'>HFRG</a>
(Human Factors Research Group):
</p>
<ul>
	<li>SUMI: Software Usability Measurement Inventory</li>
	<li>MUMMS: Measurement of Usability of Multi Media Software</li>
	<li>WAMMI: Website Analysis and Measurement Inventory</li>
	<li><a href='http://www.ucc.ie/hfrg/resources/qfaq1.html'
		>FAQ: Frequently Asked Questions about Questionnaires in Usability Engineering</a>
		(compiled by Jurek Kirakowski)</li>
</ul>
<p>
Also, see <a class='hcibib' href="http://hcibib.org/bs.cgi?searchtype=question&amp;query=IJHCI+scale+LaLomia+Sidowski&amp;highlight=checked"
	>LaLomia &amp; Sidowski, 1990, 1991, 1993</a>
for reviews of measurements of satisfaction, literacy, aptitude,
attitude, and anxiety.
</p>

<p>
NetRaker
(<a href='http://netraker.com'>netraker.com</a>)
once provided online usability evaluation,
with a free trial version.
Now there are many 
<a href="http://www.google.com/search?q=online+survey">online survey</a>
services, most offering free simple surveys or trial periods:
</p>
<ul>
	<li><a href="http://www.surveymonkey.com/"><b>SurveyMonkey</b></a></li>
	<li><a href="http://info.zoomerang.com/"><b>Zoomerang Survey</b></a></li>
	<li><a href="http://www.questionpro.com/"><b>QuestionPro</b></a></li>
	<li><a href="http://freeonlinesurveys.com/"><b>Free Online Surveys</b></a></li>
	<li><a href="http://www.websurveyor.com/"><b>WebSurveyor</b></a></li>
	<li><a href="http://www.advancedsurvey.com/"><b>AdvancedSurvey</b></a></li>
	<li><a href="http://www.keysurvey.com/"><b>KeySurvey</b></a></li>
</ul>

<p>
<b>Note:</b>
Although these instruments are online,
many are copyrighted and some require a fee for non-educational use.
See the references at the end of each form for more information.
</p>

<p>
These questionnaires are similar in format,
so a Web-based system to present them has been developed
(as seen in the Example links above).
The system, <tt>question.cgi</tt>,
is a perl-based (version 4 or 5) CGI script that presents a form
for a questionnaire and
emails data to a specifiable address.
Many options for the format of the questionnaire are read
from the incoming form data,
so a surveyor can adapt an existing questionnaire
(although in ways that may change the validity or reliability
of the <i>standard</i> forms of the questionnaires).
The rest of this document describes how to use
the standard forms of the surveys and how to adapt them.
</p>

<h2 id='standard'>Standard Forms of Questionnaires</h2>

Three options to
	<tt>question.cgi</tt>
specify all you need to evaluate
a system using a Web form.
<ol>
<li>
By default, the CSUQ is used, but you can supply a
<tt>form=</tt>
option:

<pre>
form=QUIS
form=CSUQ
form=PUEU
form=PUTQ
</pre></li>

<li>
You can specify a system name (e.g., My Web Site, WordProcessorII)
that will be used in the form and reported in the data.

<pre>
system=HCI_Bibliography_Search
system=VR_Applet
</pre></li>

<li>
You can specify an email address to which the
data will be sent when the rater submits their data.

<pre>
email=perlman@acm.org
</pre></li>
</ol>

<h2 id='combo'>Combining Options</h2>

Options can be appended to a URL or supplied as form data
(either hidden or visible).

<ul>
<li>
To append options to the
<tt>question.cgi</tt>
URL,
the list of options begins with a ?,
and an &amp; is placed between options.
Also, many characters must the <i>hex-quoted</i>
(e.g., space is shown as %20).
So, to evaluate a system called
<tt>My&nbsp;HomePage&nbsp;Maker</tt>
with QUIS, and send the results to
<tt>marketing@myhomepage.com</tt>,
you would append
<tt>?system=My%20HomePage%20Maker&amp;form=QUIS&amp;email=marketing@myhomepage.com</tt>.
<br />
<a href="question.cgi?system=My%20HomePage%20Maker&amp;form=QUIS&amp;email=marketing@myhomepage.com">Evaluate My HomePage Maker</a>
</li>

<li>
To pass the options in via a form,
you could create a form with
<tt>question.cgi</tt>
as the action
and with input elements
for system, form, and email,
which can be hidden.

<form method='post' action="question.cgi">
	<input type='hidden' name='system' value="My HomePage Maker" />
	<input type='hidden' name='form' value='QUIS' />
	<input type='hidden' name='email' value="marketing@myhomepage.com" />
	<input type='submit' value="Evaluate My HomePage Maker" />
</form>
</li>
</ul>


<h2 id='options'>Options Reference and Design Form</h2>

<p>
The following options can be supplied as form data or on the URL.
The default values of the options depend on which form is in use.
The default or modified values are kept in the HTML as hidden values;
they can be viewed by looking at the HTML page source.
</p>

<form method='get' action="question.cgi">

<input type='submit' accesskey='s' value="Show the Questionnaire with these Options" />

<table style='margin-top: 1em' border='1' cellspacing='0' cellpadding='3' summary='Form of values to create a questionnaire'>

<tr >
	<th class='dark' colspan='3'>
		GENERAL OPTIONS
	</th>
</tr>

<tr class='light' >
	<th>
		OPTION
	</th>
	<th>
		EXAMPLE
	</th>
	<th align='left'>
		DESCRIPTION
	</th>
</tr>

<tr >
	<th>
		<label for='system'>system</label>
	</th>
	<td>
		<input id='system' name='system' value="question.cgi" />
	</td>
	<td>
		The name of the system to be evaluated.
		This is used as part of the Subject: line in the emailed data.
	</td>
</tr>

<tr >
	<th>
		<label for='object'>object</label>
	</th>
	<td>
		<input id='object' name='object' value="Webform" />
	</td>
	<td>
		The type of object to be evaluated (by default "System")
		This is used as part of the form and in some questions.
	</td>
</tr>

<tr >
	<th>
		<label for='the'>the</label>
	</th>
	<td>
		<input id='the' name='the' value="The" />
	</td>
	<td>
		Definite article to precede the object
		at the start of a sentence.
		Used for translation to languages with gender
		(e.g., French <i>Le</i>, <i>La</i>).
	</td>
</tr>

<tr >
	<th>
		<label for='this'>this</label>
	</th>
	<td>
		<input id='this' name='this' value="This" />
	</td>
	<td>
		Pronoun to precede the object
		at the start of a sentence.
		Used for translation to languages with gender
		(e.g., French <i>Cet</i>, <i>Cette</i>).
	</td>
</tr>

<tr >
	<th>
		<label for='email'>email</label>
	</th>
	<td>
		<input id='email' name='email' value="perlman@acm.org" />
	</td>
	<td>
		The email address to send the data to.
	</td>
</tr>

<tr >
	<th>
		<label for='form'>form</label>
	</th>
	<td>
		<select id='form' name='form'>
			<option value="">default</option>
			<option value='QUIS'>QUIS</option>
			<option value='PUEU'>PUEU</option>
			<option value='NAU'>NAU</option>
			<option value='NHE'>NHE</option>
			<option value='CSUQ' selected='selected'>CSUQ</option>
			<option value='ASQ' >ASQ</option>
			<option value='PHUE' >PHUE</option>
			<option value='PUTQ'>PUTQ</option>
			<option value='USE'>USE</option>
		</select>
	</td>
	<td>
		The form of the questionnaire.
		Allowed values are:
		<ul compact='compact'>
			<li>QUIS: Questionnaire for User Interface Satisfaction</li>
			<li>PUEU: Perceived Usefulness and Ease of Use</li>
			<li>NAU: Nielsen's Attributes of Usability</li>
			<li>NHE: Nielsen's Heuristic Evaluation</li>
			<li>CSUQ: Computer System Usability Questionnaire
				(and the 3-item After-Scenario Questionnaire, ASQ)</li>
			<li>PHUE: Practical Heuristics for Usability Evaluation</li>
			<li>PUTQ: Purdue Usability Testing Questionnaire</li>
			<li>USE: USE Questionnaire</li>
		</ul>
		If unspecified, the CSUQ is presented.
		If any other value is provided, it causes a server error.
	</td>
</tr>

<tr >
	<th>
		<label for='title'>title</label>
	</th>
	<td>
		<input id='title' name='title' value="Questionnaire System Evaluation" />
	</td>
	<td>
		The title at the top of the form.
		This is used as part of the Subject: line in the emailed data.
	</td>
</tr>

<tr >
	<th>
		<label for='sender'>sender</label>
	</th>
	<td>
		<input id='sender' name='sender' value="question.cgi" />
	</td>
	<td>
		This is used as the Sender: of the data.
	</td>
</tr>

<tr >
	<th>
		<label for='help'>help</label>
	</th>
	<td>
		<textarea id='help' rows='2' cols='20' name='help'></textarea>
	</td>
	<td>
		This overrides the paragraph of help at the top of the form.
		Supplying this requires a fair amount of expertise with HTML forms.
	</td>
</tr>

<tr >
	<th class='dark' colspan='3'>
		RATING SCALE OPTIONS
	</th>
</tr>

<tr >
	<td colspan='3'>
		I like to use
		<a class='hcibib' href="http://hcibib.org/bs.cgi?searchtype=question&amp;query=J.IJHCI.5.4.383"
		>seven-point rating scales</a>
		because they allow three
		levels of either positive or negative ratings;
		two levels seems too few.
		I prefer to range from 1-7 (bad-good) instead of the more techno -3...+3.
	</td>
</tr>

<tr class='light' >
	<th>
		OPTION
	</th>
	<th>
		EXAMPLE
	</th>
	<th align='left'>
		DESCRIPTION
	</th>
</tr>

<tr >
	<th>
		<label for='lowval'>lowval</label>
	</th>
	<td>
		<input id='lowval' size='3' name='lowval' value="-2" />
	</td>
	<td>
		The value at the low end of the rating scale.
		This value can be negative.
	</td>
</tr>

<tr >
	<th>
		<label for='highval'>highval</label>
	</th>
	<td>
		<input id='highval' size='3' name='highval' value="2" />
	</td>
	<td>
		The value at the high end of the rating scale.
	</td>
</tr>

<tr >
	<th>
		<label for='lowlab'>lowlab</label>
	</th>
	<td>
		<input id='lowlab' name='lowlab' size='10' value="DISAGREE" />
	</td>
	<td>
		The label at the low end of the rating scale
		(for questions not assigned a special label).
	</td>
</tr>

<tr >
	<th>
		<label for='highlab'>highlab</label>
	</th>
	<td>
		<input id='highlab' name='highlab' size='10' value="AGREE" />
	</td>
	<td>
		The label at the high end of the rating scale
		(for questions not assigned a special label).
	</td>
</tr>

<tr >
	<th>
		<label for='NA'>NA</label>
	</th>
	<td>
		<input id='NA' name='NA' size='4' value="N/A" />
	</td>
	<td>
		The label to indicate <b>Not Applicable</b>.
	</td>
</tr>

<tr >
	<th>
		<label for='NAval'>NAval</label>
	</th>
	<td>
		<input id='NAval' name='NAval' size='3' value="NA" />
	</td>
	<td>
		The value to send when NA is chosen.
	</td>
</tr>

<tr >
	<th>
		<label for='commlines'>commlines</label>
	</th>
	<td>
		<input id='commlines' name='commlines' size='2' value="1" />
	</td>
	<td>
		The number of lines in the comment area.
		If 0, then no comments can be added to questions.
		If 1, then a single input field is provided.
		If 2 or more, a textarea is provided.
	</td>
</tr>

<tr >
	<th class='dark' colspan='3'>
		NEGATIVE/POSITIVE POINTS
	</th>
</tr>

<tr >
	<td colspan='3'>
		I like to ask users about the N most negative / positive points
		about a system (first negative, then positive).
		I usually get N/2 answers, so 3 or 5 is a good number to ask for.
	</td>
</tr>

<tr class='light' >
	<th>
		OPTION
	</th>
	<th>
		EXAMPLE
	</th>
	<th align='left'>
		DESCRIPTION
	</th>
</tr>

<tr >
	<th>
		<label for='negative'>negative</label>
	</th>
	<td>
		<input id='negative' name='negative' size='1' value='3' />
	</td>
	<td>
		Number of negative points about system for rater to supply.
	</td>
</tr>

<tr >
	<th>
		<label for='positive'>positive</label>
	</th>
	<td>
		<input id='positive' name='positive' size='1' value='5' />
	</td>
	<td>
		Number of positive points about system for rater to supply.
	</td>
</tr>

</table>

<p>
<input type='submit' accesskey='s' value="Show the Questionnaire with these Options" />
</p>

</form>

<h2 id='data'>Data Format and Analysis</h2>

Data is sent to the email address in a name=value format,
with one name and value per line.
Missing comments on specific questions
and missing negative/positive points are omitted.
You are on your own for the analysis.
Obviously, you must coordinate with the questionnaire form.

<p>
Here is an example mail message with questionnaire data.
</p>

<pre>
From httpd@turing.acm.org Mon Oct  5 12:47:00 1998
<b>Date:</b> Mon, 5 Oct 1998 12:46:59 -0400
<b>Subject:</b> question.cgi: Questionnaire System Evaluation
<b>Sender:</b> perlman@acm.org
<b>From:</b> perlman@acm.org (question.cgi)
<b>Apparently-To:</b> perlman@acm.org

system=question.cgi
date=98-10-05 12:46:58
comment=I like the generalization of this system.&lt;br&gt;Thanks.
q1=1
q2=0
q3=2
q4=1
q5=1
q6=0
q7=-1
c7=I found the concept novel &amp; difficult to grok.
q8=0
q9=NA
q10=0
q11=-1
q12=-1
q13=0
q14=0
q15=1
q16=1
q17=1
q18=2
c18=It has more than expected, and yet, not enough.  Sigh.
q19=2
negative1=no analysis tools
negative2=hard to completely customize
negative3=questionnaire terminology does not closely match my domain
positive1=nice looking forms
positive2=lots of options
positive3=based on established questionnaires
positive4=lets me automate data collection
</pre>

</body>
</html>
End of question.html
chmod +x question.html
if test -e question.cgi; then echo Overwriting question.cgi; else echo Extracting question.cgi; fi
cat > question.cgi << 'End of question.cgi'
#!/usr/bin/perl

# Copyright 1998 Gary Perlman. All rights reserved.

# output form= info with questionnaire data
# allow dump of questions with data

@languages = ("en", "fr", "xx");

%F = &formdata (); # load the form data

&setup (); # set global variables

# handle the submit options
if ($F{'submit'} eq $Lang{'Submit'}) {
	&mailit ($F{'system'}, $F{'email'});
} elsif ($F{'submit'} eq $Lang{'Addall'}) {
	for $i (1 .. $qn) {
		&addcomment ($i);
		$Addbutton = "";
	}
} else {
	# check for user clicking on comment note image
	for $i (1 .. $qn) {
		$coord = "c$i.x"; # x coord of click
		$name="c$i";
		if ($F{$coord}) {
			&addcomment ($i);
			$message = "<a href=#q$i>$Lang{'AddedComment'} $i</a>";
		# maybe use something like the following to clean up comments
		#} elsif ($F{$name}) {
		#	$F{$name} =~ s/$Lang{'NewNote'}:? *//;
		}
	}
}

print "Content-type: text/html\r\n\r\n"; # start the output

################################## Print the HTML Page
print "<html lang=\"$F{'language'}\"><head><title>$F{'title'}</title></head><body bgcolor=white>
<table id=title bgcolor=\"#eeeeee\" border=1 cellpadding=2 cellspacing=0><tr><th>
<font size=+2>$F{'title'}</font>
</th></tr>
";

if ($F{'ref'}) {
	print "<tr><td>\n";
	print "<font size=-1><b>$Lang{'BasedOn'}:</b>\n$F{'ref'}</font>\n";
	local ($script_name) = $ENV{'SCRIPT_NAME'};
	$script_name =~ s/.*\///;
	print " | <a href=question.html><font size=-2 color=\"#666666\">$Lang{'About'}&nbsp;$script_name<font></a>\n";
	print "</td></tr>\n";
}
print "</table><p>\n";

&printhelp;

print "<form method=POST action=\"$ENV{'SCRIPT_NAME'}\">
<a name=top></a>
";

&hidden; # save the hidden values

if ($message) {
	print "<div><font color=red size=+1><b>$message</b></font></div>"
}
print "<div>
		<b><label for=system>$F{'object'}</label></b>:
		<input type=text id=system name=system value=\"$F{'system'}\">
		&nbsp;
		<b><label for=email>$Lang{'Email'}</label>:</b>
		<input type=text id=email name=email value=\"$F{'email'}\">
</div>
<div>
	<label for=comment>$Lang{'UseComment'}</label><br>
	<textarea id=comment name=comment title=\"$Lang{'UseComment'}\" rows=3 cols=$width>$F{'comment'}</textarea>
</div>
<div>
	$Submitbutton
	$Addbutton
	$return
</div>
<p>
";

print "<table id=ratings cellspacing=1 cellpadding=2 border=0>\n";

&ratingscale () unless $section[1]; # $section[1] will print scale

for $i (1 .. $qn) {
	&showitem ($i);
}

&ratingscale; ();

print "</table>\n";

&openended ($F{'negative'}, "negative");
&openended ($F{'positive'}, "positive");

print "<br>
$Submitbutton
$Addbutton
<a href=#top>$Lang{'FormTop'}</a> |
$return

</form>
";

print "</body>\n</html>\n";

################################## UTILITY FUNCTIONS

sub mydate {
	local ($xtime) = @_;
	($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime ($xtime);
	sprintf ("%d-%02d-%02d %02d:%02d:%02d", $year+1900, $mon+1, $mday, $hour, $min, $sec);
}

sub formdata { # nil -> %F
    local (*F);
    if ($ENV{'REQUEST_METHOD'} eq 'POST') {
        read (STDIN, $F, $ENV{'CONTENT_LENGTH'});
    } else {
        $F = $ENV{'QUERY_STRING'};
    }
    @F = split (/&/, $F);
    for (@F) {
        local ($name, $value) = split (/=/, $_, 2);
        $value =~ s/\+/ /g;
        $value =~ s/%([\dA-Fa-f][\dA-Fa-f])/pack ("C", hex ($1))/eg;
        $F{$name} = $value;
    }
    return (%F);
}

sub ratingscale # [section name]
{
	local ($section) = (@_);
	local ($empty) = "<td>&nbsp;</td>";
	print "<tr bgcolor=\"#dddddd\" valign=middle>";
	if ($section) {
		$section =~ tr/a-z/A-Z/;
		print " <td colspan=2><b>$section</b></td>\n";
	} else { # skip the empty parts
		print $empty;
		print $empty;
	}
	print $empty;
	for $j ($F{'lowval'} .. $F{'highval'}) {
		print "<th scope=\"col\">$j</th>\n";
	}
	print $empty;
		print "<th>$F{'NA'}</th>\n";
	print "</tr>";
}

sub showitem # item number
{
	local ($i) = @_;
	local ($labfont) = "<font size=\"-1\">";
	local ($name) = "q$i";
	local ($cname) = "c$i"; # comment name
	local ($value) = $F{$name};
	local ($lowlab) = $lowlab[$i] ? $lowlab[$i] : $F{'lowlab'};
	local ($highlab) = $highlab[$i] ? $highlab[$i] : $F{'highlab'};
	local ($checked);
	if ($section[$i]) {
		&ratingscale ($section[$i]);
	}
	print "<tr valign=top>";
	print "<td align=right><a name=$name>$i.</a></td>\n";
	print "<td>";
	print "<label for=$name>$q[$i]</label>" if $q[$i];
	if ($F{$cname}) { # there is a comment for this item in the form data
		print "<br>" if $q[$i]; # go to new line if there is a question
		if ($F{'commlines'} > 1) {
			print "<textarea name=$cname title=\"$Lang{'CommentHelp'}\" rows=$F{'commlines'} cols=30>$F{$cname}</textarea>\n";
		} else {
			print "<input type=text size=30 title=\"$Lang{'CommentHelp'}\" name=$cname value=\"$F{$cname}\">\n";
		}
	} elsif ($F{'commlines'}) {
		print "&nbsp;<input type=image title=\"$Lang{'Comment'}\" alt=\"$Lang{'Comment'}\" src=\"$NoteIcon\" name=$cname>\n";
	}
	print "</td>\n";
	# LOW LABEL
	print "<td align=right>$labfont$lowlab</font></td>\n";
	# RATING VALUES
	local ($valtitle);
	for $j ($F{'lowval'} .. $F{'highval'}) {
		$checked = ($value eq $j) ? "checked" : "";
		if ($j == $F{'lowval'}) {
			$valtitle="$j ($lowlab)";
		} elsif ($j == $F{'highval'}) {
			$valtitle="$j ($highlab)";
		} else {
			$valtitle=$j
		}

		print "<td><input type='radio' id='${name}_$j' name='$name' title='$valtitle' value='$j' $checked></td>\n";
	}
	# HIGH LABEL
	print "<td align=left>$labfont$highlab</font></td>\n";
	$checked = ($value eq $F{'NAval'}) ? "checked" : "";
	# NA Value
	print "<td><input type=radio title=\"$Lang{'UseNA'} $Lang{'NA'}\" id=$name name=$name value=\"$F{'NAval'}\" $checked></td>\n";
	print "</tr>";
}

sub openended # number, label
{
	local ($number, $label) = (@_);
	local ($i, $name);
	if ($number > 0) {
		if ($label eq "negative") {
			print "<p>$Lang{'ListNegative'}:\n";
		} else {
			print "<p>$Lang{'ListPositive'}:\n";
		}
		print "<ol>\n";
		for $i (1 .. $number) {
			$name = "$label$i";
			print "	<li><input id='$name' name='$name' value=\"$F{$name}\" size='$width'>\n";
		}
		print "</ol>\n";
	}
}

sub hidden # void -> prints hidden form data
{
	local ($name, $value);
	for $name (sort (keys (%D))) {
		$value = $F{$name};
		$value =~ s/&/\&amp;/g;
		$value =~ s/</\&lt;/g;
		$value =~ s/>/\&gt;/g;
		print "<input type=hidden name=\"$name\" value=\"$value\">\n";
	}
}

sub setup # void -> sets globals
{
	local ($name);

	$logfile = "csuq.log";
	$now = time;
	$date = &mydate ($now);
	$width = 60; # width of input fields
	$mailer = '/bin/mail';               # the mail sending program

	$NoteIcon = "http://members.aol.com/dcreelma/imagesite/minigifs/jthruz/note.gif";
	$NoteIcon = "note.gif"; # local version of the above

	# check any language setting coming in
	if ($F{'language'}) {
		local ($lang, $okaylang);
		$okaylang = 0;
		for $lang (@languages) {
			if ($lang eq $F{'language'}) {
				$okaylang = 1;
			}
		}
		if (! $okaylang) {
			$F{'language'} = ""; # ignore bogus language
		}
	}
	# complete language setup
	$F{'language'} = &getlanguage (@languages) unless $F{'language'};
	$D{'language'} = $F{'language'}; # set this so it is included in hidden data
	$D{'language'} = "en" unless $D{'language'};
	require ("questlang.pl");            # read in language-specific strings

	$Submitbutton = "<input type=submit name=submit title=\"$Lang{'Submit'}\" value=\"$Lang{'Submit'}\">";

	# system defaults
	$D{'object'}    = $Lang{'System'};
	$D{'the'}       = $Lang{'The'};
	$D{'this'}      = $Lang{'This'};
	$D{'lowval'}    = 1;
	$D{'highval'}   = 7;
	$D{'NAval'}     = "0";
	$D{'commlines'} = "1";
	$D{'positive'}  = 3;
	$D{'negative'}  = 3;
	$D{'lowlab'}    = $Lang{'StronglyDisagree'};
	$D{'highlab'}   = $Lang{'StronglyAgree'};
	$D{'NA'}        = $Lang{'NA'};
	$Object = $F{'object'} ? $F{'object'} : $D{'object'}; # name for object
		($object = $Object) =~ tr/A-Z/a-z/; # lower case name for object
	$The = $F{'the'} ? $F{'the'} : $D{'the'}; # article for object
		($the = $The) =~ tr/A-Z/a-z/; # lower case article for object
	$This = $F{'this'} ? $F{'this'} : $D{'this'}; # article for object
		($this = $This) =~ tr/A-Z/a-z/; # lower case article for object
	$System = $F{'system'} ? $F{'system'} : "$the $object";

	# read in specific form of questionnaire (default: csuq)
	if ($F{'form'}) {
		$F{'form'} =~ tr/A-Z/a-z/;
		require ("$F{'form'}.pl");
		$D{'form'} = $F{'form'};
	} else {
		require ('csuq.pl');
	}

	# use default values if missing form data
	$D{'HTTP_REFERER'} = ""; # don't want to save it
	for $name (sort (keys (%D))) {
		$F{$name} = $D{$name} unless length($F{$name});
	}
	if ($F{'commlines'}) {
		$Addbutton = "<input type=submit name=submit title=\"$Lang{'Addall'}\" value=\"$Lang{'Addall'}\">";
	}

	# maintain the HTTP_REFERER page, if it exists
	if (!$F{'HTTP_REFERER'}) {
		if ($ENV{'HTTP_REFERER'}) {
			if (!($ENV{'HTTP_REFERER'} =~ /^$ENV{'SCRIPT_NAME'}/)) {
				$F{'HTTP_REFERER'} = $ENV{'HTTP_REFERER'};
			}
		}
	}

	if ($F{'HTTP_REFERER'}) {
		$return = "<a href=\"$F{'HTTP_REFERER'}\"
			><font size=-1 color=blue>$Lang{'RETURN'}</font></a>";
	}
}

sub oneline # string -> s/\n/HTML/
{
	local ($string) = @_;
	$string =~ s/(\n\n)|(\r\n\r\n)/<p>/sg;
	$string =~ s/(\n)|(\r\n)/<br>/sg;
	return ($string);
}

sub mailit # system email -> mail the data
{
	local ($comment);
	$message = "";
	($F{'email'} =~ /\w+\@[\w-]+[.]\w+/) ||
		($message .= " $Lang{'NeedEmail'}.\n ");
	if (! $message) {
		$F{'email'} =~ s/[<|>()`;\${} ]//g; # security patch
		open (MAILPIPE, "|$mailer $F{'email'}");
		print MAILPIPE "Subject: $F{'system'}: $F{'title'}\n";
		print MAILPIPE "Sender: $F{'email'}\n";
		print MAILPIPE "From: $F{'email'} ($F{'sender'})\n";
		print MAILPIPE "\n";
		print MAILPIPE "system=$F{'system'}\n";
		print MAILPIPE "date=$date\n";
		$comment = &oneline ($F{'comment'});
		print MAILPIPE "comment=$comment\n";
		for $i (1 .. $qn) {
			$name = "q$i";
			print MAILPIPE "$name=$F{$name}\n";
			$name = "c$i";
			$comment = $F{$name};
			$comment =~ s/$Lang{'NewNote'}:? *//;
			if ($comment) {
				$comment = &oneline ($comment);
				print MAILPIPE "$name=$comment\n";
			}
		}
		local ($valence);
		for $valence ("negative", "positive") {
			if ($F{$valence} > 0) {
				for $i (1 .. $F{$valence}) {
					$name = "$valence$i";
					print MAILPIPE "$name=$F{$name}\n" if $F{$name};
				}
			}
		}
		$message = $Lang{'Submitted'};
		close (MAILPIPE);
		if ($logfile) {
			local ($loginfo) = "$F{'email'} \"$F{'system'}\" $date $ENV{'HTTP_CLIENT_IP'} $F{'HTTP_REFERER'}\n";
			open (LOGFILE, ">>$logfile") || return;
			print LOGFILE $loginfo;
			close (LOGFILE);
		}
	} else {
		$message = $Lang{'NotSubmitted'} . $message;
	}
}

sub addcomment # item-number
{
	local ($i) = @_;
	local ($name) = "c$i";
	if (! $F{$name}) {
		$F{$name} = "$Lang{'NewNote'}: ";
	}
}

# http://www.w3.org/Protocols/rfc2068/rfc2068 HTTP 1.1
# returns the first matching supported language
sub getlanguage # lower-case list of supported languages
{
	local (@supported) = (@_);
	$ENV{'HTTP_ACCEPT_LANGUAGE'} = "en-us" unless $ENV{'HTTP_ACCEPT_LANGUAGE'};
	# print "$ENV{'HTTP_ACCEPT_LANGUAGE'}\n";

	local (@languages) = split (/[, ]+/, $ENV{'HTTP_ACCEPT_LANGUAGE'});
	for $language (@languages) {
		# local ($lang);    # ISO 639 language abbreviation
		# local ($country); # ISO 3166 coutry abbreviation
		# local ($quality); # optional preference for the language 0.0 to 1.0
		# parse language into parts
		# $language =~ /^([A-Za-z][A-Za-z])(-([^;]+))?(;[Qq]=([0-9.]+))?$/;
		# ($lang,$country,$quality)= ($1,$3,$5);
		# $lang =~ tr/A-Z/a-z/;
		# print "	lang=$lang country=$country quality=$quality\n";
		local ($s);
		for $s (@supported) {
			if ($language =~ /^$s/i) { # initial match, ignoring case
				return ($s); # could return $language
			}
		}
	}
	return ("");
}

sub printhelp
{
	local ($NA) = $F{'NA'} ? $F{'NA'} : $D{'NA'};
	# first print the supplied help
	print "$F{'help'}\n";
	# then add help based on settings
	print "<ul compact>\n";
	print "	<li>$Lang{'RespondAll'}\n";
	print "	<li>$Lang{'UseNA'} <b>$NA</b>\n";
	print "	<li>$Lang{'FillRequired'}:
		<b>$Object:</b>
		&nbsp;
		<b>$Lang{'Email'}:</b>
		\n";
	# print "	<li><label for=comment>$Lang{'UseComment'}</label>\n";
	print "	<li>$Lang{'AddComment'}" if $F{'commlines'};
	print "	<li>$Lang{'HowSubmit'} <b>$Lang{'Submit'}</b>\n";
	print "</ul>\n";
}
End of question.cgi
chmod +x question.cgi
if test -e quis.pl; then echo Overwriting quis.pl; else echo Extracting quis.pl; fi
cat > quis.pl << 'End of quis.pl'
$D{'title'} = "Questionnaire for User Interface Satisfaction";
$D{'sender'} = "QUIS 5.0";
$D{'lowval'} = 0;
$D{'highval'} = 9;
$D{'lowlab'} = $Lang{'Bad'};
$D{'highlab'} = $Lang{'Good'};
$D{'NAval'} = "-1";

$D{'ref'} = "Chin,&nbsp;J.P., Diehl,&nbsp;V.A., Norman,&nbsp;K.L. (1988)
<i>Development of an Instrument Measuring User Satisfaction
of the Human-Computer Interface.</i>
<b>ACM CHI'88 Proceedings</b>,
213-218.
&copy;1988&nbsp;ACM.
<a href=http://www.hcibib.org/bs.cgi?query=C.CHI.88.213&searchtype=question>[Abstract]</a>
Copying without fee is permitted provided that the copies are not made or distributed
for direct commercial advantage, and credit to the source is given.
&copy;1986-1998 University of Maryland.
This display is for educational uses only.
<b>Commercial use requires a license from the Office of Technology Commercialization</b>:
(301) 403-2711
<a href=mailto:otc@\@umail.umd.edu>otc\@umail.umd.edu</a>.
<a href=http://www.cs.umd.edu/hcil/quis/>[QUIS Home Page]</a>
";

$qn = 27;

$D{'help'} = "Please rate your satisfaction with $System.";

$section[1] = "Overall Reaction to the Software";
$q[1] = ""; $lowlab[1] = "terrible";         $highlab[1] = "wonderful";
$q[2] = ""; $lowlab[2] = "difficult";        $highlab[2] = "easy";
$q[3] = ""; $lowlab[3] = "frustrating";      $highlab[3] = "satisfying";
$q[4] = ""; $lowlab[4] = "inadequate power"; $highlab[4] = "adequate power";
$q[5] = ""; $lowlab[5] = "dull";             $highlab[5] = "stimulating";
$q[6] = ""; $lowlab[6] = "rigid";            $highlab[6] = "flexible";

$section[7] = "Screen";
$q[7] = "Reading characters on the screen";
	$lowlab[7] = "hard";  $highlab[7] = "easy";
$q[8] = "Highlighting simplifies task";
	$lowlab[8]= "not at all";  $highlab[8] = "very much";
$q[9] = "Organization of information";
	$lowlab[9]= "confusing";  $highlab[9] = "very clear";
$q[10] = "Sequence of screens";
	$lowlab[10]= "confusing";  $highlab[10] = "very clear";

$section[11] = "Terminology and $Object Information";
$q[11] = "Use of terms throughout $object";
	$lowlab[11]= "inconsistent";  $highlab[11] = "consistent";
$q[12] = "Terminology related to task";
	$lowlab[12]= "never";  $highlab[12] = "always";
$q[13] = "Position of messages on screen";
	$lowlab[13]= "inconsistent";  $highlab[13] = "consistent";
$q[14] = "Prompts for input";
	$lowlab[14]= "confusing";  $highlab[14] = "clear";
$q[15] = "Computer informs about its progress";
	$lowlab[15]= "never";  $highlab[15] = "always";
$q[16] = "Error messages";
	$lowlab[16]= "unhelpful";  $highlab[16] = "helpful";

$section[17] = "Learning";
$q[17] = "Learning to operate $the $object";
	$lowlab[17]= "difficult";  $highlab[17] = "easy";
$q[18] = "Exploring new features by trial and error";
	$lowlab[18]= "difficult";  $highlab[18] = "easy";
$q[19] = "Remembering names and use of commands";
	$lowlab[19]= "difficult";  $highlab[19] = "easy";
$q[20] = "Performing tasks is straightforward";
	$lowlab[20]= "never";  $highlab[20] = "always";
$q[21] = "Help messages on the screen";
	$lowlab[21]= "unhelpful";  $highlab[21] = "helpful";
$q[22] = "Supplemental reference materials";
	$lowlab[22]= "confusing";  $highlab[22] = "clear";

$section[23] = "$Object Capabilities";
$q[23] = "$Object speed";
	$lowlab[23]= "too slow";  $highlab[23] = "fast enough";
$q[24] = "$Object reliability";
	$lowlab[24]= "unreliable";  $highlab[24] = "reliable";
$q[25] = "$Object tends to be";
	$lowlab[25]= "noisy";  $highlab[25] = "quiet";
$q[26] = "Correcting your mistakes";
	$lowlab[26]= "difficult";  $highlab[26] = "easy";
$q[27] = "Designed for all levels of users";
	$lowlab[27]= "never";  $highlab[27] = "always";

1;
End of quis.pl
chmod +x quis.pl
if test -e pueu.pl; then echo Overwriting pueu.pl; else echo Extracting pueu.pl; fi
cat > pueu.pl << 'End of pueu.pl'
$D{'title'} = "Perceived Usefulness and Ease of Use";
$D{'sender'} = "PUEU";
$D{'lowlab'} = $Lang{'Unlikely'};
$D{'highlab'} = $Lang{'Likely'};

$D{'ref'} = "Davis, F. D. (1989)
	<i>Perceived Usefulness, Perceived Ease of Use,
	and User Acceptance of Information Technology.</i>
	<b>MIS Quarterly</b>,
	13:3, 319-340.
";

$qn = 12;

$D{'help'} = "Please rate the usefulness and ease of use of $System.";

$section[1] = "Perceived Usefulness";
$q[1] = "Using $System in my job would enable me to accomplish tasks more quickly";
$q[2] = "Using $System would improve my job performance";
$q[3] = "Using $System in my job would increase my productity";
$q[4] = "Using $System would enhance my effectiveness on the job";
$q[5] = "Using $System would make it easier to do my job";
$q[6] = "I would find $System useful in my job";

$section[7] = "Perceived Ease of Use";
$q[7] = "Learning to operate $System would be easy for me";
$q[8] = "I would find it easy to get $System to do what I want it to do";
$q[9] = "My interaction with $System would be clear and understandable";
$q[10] = "I would find $System to be flexible to interact with";
$q[11] = "It would be easy for me to become skillful at using $System";
$q[12] = "I would find $System easy to use";

$abstract = "
Valid measurement scales for predicting user
acceptance of computers are in short supply.
Most subjective measures used in practice are
unvalidated, and their relationship to system
usage is unknown.  The present research develops
and validates new scales for two specific
variables, perceived usefulness and perceived
ease of use, which are hypothesized to
be fundamental determinants of user acceptance.
Definitions of these two variables were
used to develop scale items that were pretested
for content validity and then tested for reliability
and construct validity in two studies involving
a total of 152 users and four application programs.
The measures were refined and streamlined,
resulting in two six-item scales with reliabilities
of .98 for usefulness and .94 for ease
of use.  The scales exhibited high convergent,
discriminant, and factorial validity.  Perceived usefulness
was significantly correlated with both self-reported
current usage (r=.63, Study 1) and
self-predicted future usage (r=.85, Study 2).  Perceived
ease of use was also significantly correlated
with current usage (r=.45, Study 1) and
future usage (r=.59, Study 2).  In both studies,
usefulness had a significantly greater correlation
with usage behavior than did ease of use.
Regression analyses suggest that perceived
ease of use may actually be a causal antecedent
to perceived usefulness, as opposed to
a parallel direct determinant of system usage.
Implications are drawn for future research on
user acceptance.
";

1;
End of pueu.pl
chmod +x pueu.pl
if test -e csuq.pl; then echo Overwriting csuq.pl; else echo Extracting csuq.pl; fi
cat > csuq.pl << 'End of csuq.pl'
$D{'title'} = "Computer System Usability Questionnaire";
$D{'sender'} = "CSUQ";

$D{'ref'} = "Lewis, J. R. (1995)
	<i>IBM Computer Usability Satisfaction Questionnaires:
	Psychometric Evaluation and Instructions for Use.</i>
	<b>International Journal of Human-Computer Interaction</b>,
	7:1, 57-78.
	<a href=http://www.hcibib.org/bs.cgi?query=J.IJHCI.7.1.57&searchtype=question
		>$Lang{'Abstract'}</a>
";

$qn = 19;

if ($F{'language'} eq "fr") {

$D{'title'} = "Questionnaire sur l'usabilit&eacute; d'un syst&egrave;me informatis&eacute;";
$D{'help'}   = "Veuillez &eacute;valuer la facilit&eacute; d'utilisation.";

# QUESTIONS
$q[1] = "En g&eacute;n&eacute;ral, je suis satisfait(e) de la facilit&eacute;
d&#146;utilisation de ce $object";
$q[2] = "Ce $object est simple &agrave; utiliser";
$q[3] = "J&#146;ai compl&eacute;t&eacute; mon travail correctement en utilisant
ce $object";
$q[4] = "J&#146;ai &eacute;t&eacute; en mesure de compl&eacute;ter rapidement
ma t&acirc;che avec ce $object";
$q[5] = " J&#146;ai compl&eacute;t&eacute; mon travail efficacement en utilisant
ce $object";
$q[6] = "Je me sens &agrave; l&#146;aise avec ce $object";
$q[7] = "J&#146;ai eu de la facilit&eacute; &agrave; apprendre comment utiliser
ce $object";
$q[8] = "Je crois &ecirc;tre devenu(e) rapidement efficace en utilisant
ce $object";
$q[9] = "Les messages d&#146;erreur pr&eacute;sent&eacute;s par ce $object
m&#146;indiquent clairement comment r&eacute;soudre les probl&egrave;mes";
$q[10] = "Lorsque j&#146;ai fais une erreur d&#146;utilisation sur ce
$object, il m&#146;a &eacute;t&eacute; facile et rapide de la corriger";
$q[11] = "Les outils d&#146;aide disponibles sur ce $object (tels que
l&#146;aide en ligne, les messages &agrave; l&#146;&eacute;cran et
autres informations) sont utiles";
$q[12] = "J&#146;ai facilement trouv&eacute; l&#146;information que je cherchais";
$q[13] = "L&#146;information fournie avec ce $object est facile &agrave;
comprendre";
$q[14] = "L&#146;information disponible sur ce $object contribue &agrave; me
soutenir dans la r&eacute;alisation des t&acirc;ches et des sc&eacute;narios";
$q[15] = "L&#146;organisation de l&#146;information dans les &eacute;crans
du $object est claire";
$q[16] = "L&#146;interface de ce $object est agr&eacute;able";
$q[17] = "J&#146;aime utiliser l&#146;interface de ce $object";
$q[18] = "Ce $object poss&egrave;de toutes les fonctions et le
potentiel correspondant &agrave; mes attentes";
$q[19] = "En g&eacute;n&eacute;ral, je suis satisfait(e) de ce $object";

} else {

$D{'help'}   = "Please rate the usability of $System.";

$q[1] = "Overall, I am satisfied with how easy it is to use $this $object";
$q[2] = "It was simple to use $this $object";
$q[3] = "I can effectively complete my work using $this $object";
$q[4] = "I am able to complete my work quickly using $this $object";
$q[5] = "I am able to efficiently complete my work using $this $object";
$q[6] = "I feel comfortable using $this $object";
$q[7] = "It was easy to learn to use $this $object";
$q[8] = "I believe I became productive quickly using $this $object";
$q[9] = "$The $object gives error messages that clearly tell me how to fix problems";
$q[10] = "Whenever I make a mistake using $the $object, I recover easily and quickly";
$q[11] = "The information (such as online help, on-screen messages, and other documentation) provided with $this $object is clear";
$q[12] = "It is easy to find the information I needed";
$q[13] = "The information provided for $the $object is easy to understand";
$q[14] = "The information is effective in helping me complete the tasks and scenarios";
$q[15] = "The organization of information on $the $object screens is clear";
$q[16] = "The interface of $this $object is pleasant";
$q[17] = "I like using the interface of $this $object";
$q[18] = "$This $object has all the functions and capabilities I expect it to have";
$q[19] = "Overall, I am satisfied with $this $object";

}

1;
End of csuq.pl
chmod +x csuq.pl
if test -e asq.pl; then echo Overwriting asq.pl; else echo Extracting asq.pl; fi
cat > asq.pl << 'End of asq.pl'
$D{'title'} = "After-Scenario Questionnaire";
$D{'sender'} = "ASQ";
$D{'positive'} = 0;
$D{'negative'} = 0;

# force add of all comment fields
$F{'submit'} = $Addall unless $F{'submit'};

$D{'ref'} = "Lewis, J. R. (1995)
	<i>IBM Computer Usability Satisfaction Questionnaires:
	Psychometric Evaluation and Instructions for Use.</i>
	<b>International Journal of Human-Computer Interaction</b>,
	7:1, 57-78.
	<a href=http://www.hcibib.org/bs.cgi?query=J.IJHCI.7.1.57*&searchtype=question>Abstract</a>
";

$qn = 3;

$D{'help'} = "Please rate the usability of $System for the previous scenario.";

$q[1] = "Overall, I am satisfied with the ease of completing the tasks in this scenario";
$q[2] = "Overall, I am satisfied with the amount of time it took to complete the tasks in this scenario";
$q[3] = "Overall, I am satisfied with the support information (online-line help, messages, documentation) when completing the tasks";

1;
End of asq.pl
chmod +x asq.pl
if test -e putq.pl; then echo Overwriting putq.pl; else echo Extracting putq.pl; fi
cat > putq.pl << 'End of putq.pl'
$D{'title'} = "Purdue Usability Testing Questionnaire";
$D{'sender'} = "PUTQ";
$D{'lowlab'} = $Lang{'Bad'};
$D{'highlab'} = $Lang{'Good'};

$D{'ref'} = " Lin,&nbsp;H.X. Choong,&nbsp;Y.-Y., and Salvendy,&nbsp;G. (1997)
	<i>A Proposed Index of Usability:
	A Method for Comparing the Relative Usability of Different Software Systems</i>.
	<b>Behaviour &amp; Information Technology</b>,
	16:4/5, 267-278.
	<a href=http://www.hcibib.org/bs.cgi?query=J.BIT.16.4/5.267&searchtype=question>Abstract</a>
	Reproduced by permission.
	(The ratings of <i>importance</i> are not included in this online version,
	but could be incorporated into the comments.)
";

$qn = 100;

$D{'help'} = "Please rate the usability of $System.";

$section[1] = "1. Compatibility";
$q[1]='Is the control of cursor compatible with movement?';
$q[2]='Are the results of control entry compatible with user expectations?';
$q[3]='Is the control matched to user skill?';
$q[4]='Are the coding compatible with familiar conventions?';
$q[5]='Is the wording familiar?';

$section[6] = "2. Consistency";
$q[6]='Is the assignment of colour codes conventional?';
$q[7]='Is the coding consistent across displays, menu options?';
$q[8]='Is the cursor placement consistent?';
$q[9]='Is the display format consistent?';
$q[10]='Is the feedback consistent?';
$q[11]='Is the format within data fields consistent?';
$q[12]='Is the label format consistent?';
$q[13]='Is the label location consistent?';
$q[14]='Is the labelling itself consistent?';
$q[15]='Is the display orientation consistent? -- panning vs. scrolling.';
$q[16]='Are the user actions required consistent?';
$q[17]='Is the wording consistent across displays?';
$q[18]='Is the data display consistent with entry requirements?';
$q[19]='Is the data display consistent with user conventions?';
$q[20]='Are symbols for graphic data standard?';
$q[21]='Is the option wording consistent with command language?';
$q[22]='Is the wording consistent with user guidance?';

$section[23] = "3. Flexibility";

$q[23]='Does it have by-passing menu selection with command entry?';
$q[24]='Does it have direct manipulation capability?';
$q[25]='Is the design for data entry flexible?';
$q[26]='Can the display be controlled by user flexibly?';
$q[27]='Does it provide flexible sequence control?';
$q[28]='Does it provide flexible user guidance?';
$q[29]='Are the menu options dependent on context?';
$q[30]='Can user name displays and elements according to their needs?';
$q[31]='Does it provide good training for different users?';
$q[32]='Are users allowed to customize windows?';
$q[33]='Can users assign command names?';
$q[34]='Does it provide user selection of data for display?';
$q[35]='Does it handle user-specified windows?';
$q[36]='Does it provide zooming for display expansion?';

$section[37] = "4. Learnability";

$q[37]='Does it provide clarity of wording?';
$q[38]='Is the data grouping reasonable for easy learning?';
$q[39]='Is the command language layered?';
$q[40]='Is the grouping of menu options logical?';
$q[41]='Is the ordering of menu options logical?';
$q[42]='Are the command names meaningful?';
$q[43]='Does it provide no-penalty learning?';

$section[44] = "5. Minimal Action";

$q[44]='Does it provide combined entry of related data?';
$q[45]='Will the required data be entered only once?';
$q[46]='Does it provide default values?';
$q[47]='Is the shifting among windows easy?';
$q[48]='Does it provide function keys for frequent control entries?';
$q[49]='Does it provide global search and replace capability?';
$q[50]='Is the menu selection by pointing? -- primary means of sequence control.';
$q[51]='Is the menu selection by keyed entry? -- secondary means of control entry.';
$q[52]='Does it require minimal cursor positioning?';
$q[53]='Does it require minimal steps in sequential menu selection?';
$q[54]='Does it require minimal user control actions?';
$q[55]='Is the return to higher-level menus required only one simple key action?';
$q[56]='Is the return to general menu required only one simple key action?';

$section[57] = "6. Minimal Memory Load";

$q[57]='How are abbreviations and acronyms used?';
$q[58]='Does it provide aids for entering hierarchic data?';
$q[59]='Is the guidance information always available?';
$q[60]='Does it provide hierarchic menus for sequential selection?';
$q[61]='Are selected data highlighted?';
$q[62]='Does it provide index of commands?';
$q[63]='Does it provide index of data?';
$q[64]='Does it indicate current position in menu structure?';
$q[65]='Are data items kept short?';
$q[66]='Are the letter codes for menu selection designed carefully?';
$q[67]='Are long data items partitioned?';
$q[68]='Are prior answers recapitulated?';
$q[69]='Are upper and lower case equivalent?';
$q[70]='Does it use short codes rather than long ones?';
$q[71]='Does it provide supplementary verbal labels for icons?';

$section[72] = "7. Perceptual Limitation";

$q[72]='Does it provide coding by data category?';
$q[73]='Is the abbreviation distinctive?';
$q[74]='Is the cursor distinctive?';
$q[75]='Are display elements distinctive?';
$q[76]='Is the format for user guidance distinctive?';
$q[77]='Do the commands have distinctive meanings?';
$q[78]='Is the spelling distinctive for commands?';
$q[79]='Does it provide easily distinguished colours?';
$q[80]='Is the active window indicated?';
$q[81]='Are items paired for direct comparison?';
$q[82]='Is the number of spoken messages limited?';
$q[83]='Does it provide lists for related items?';
$q[84]='Are menus distinct from other displayed information?';
$q[85]='Is the colour coding redundant?';
$q[86]='Does it provide visually distinctive data fields?';
$q[87]='Are groups of information demarcated?';

$section[89] = "8. User Guidance";

$q[88]='Is the screen density reasonable?';
$q[89]='System feedback: How helpful is the error message?';
$q[90]='Does it provide CANCEL option?';
$q[91]='Are erroneous entries displayed?';
$q[92]='Does it provide explicit entry of corrections?';
$q[93]='Does it provide feedback for control entries?';
$q[94]='Is HELP provided?';
$q[95]='Is completion of processing indicated?';
$q[96]='Are repeated errors indicated?';
$q[97]='Are error messages non-disruptive/informative?';
$q[98]='Does it provide RESTART option?';
$q[99]='Does it provide UNDO to reverse control actions?';
$q[100]='Is the sequence control user initiated?';

1;
End of putq.pl
chmod +x putq.pl
if test -e phue.pl; then echo Overwriting phue.pl; else echo Extracting phue.pl; fi
cat > phue.pl << 'End of phue.pl'
$D{'title'} = "Practical Heuristics for Usability Evaluation";
$D{'sender'} = "PHUE";
$D{'lowlab'} = $Lang{'Bad'};
$D{'highlab'} = $Lang{'Good'};
$D{'positive'} = 5;
$D{'negative'} = 5;

$D{'ref'} = "Perlman, G. (1997)
	<a href=http://sigchi.org/chi97/proceedings/tutorial/gp.htm
	<i>Practical Usability Evaluation</i></a>.
	Based in part on Nielsen's 1993 Heuristics and Norman's 1990 Principles.
";

$qn = 13;

$D{'help'} = "Please rate $System using the heuristics.";

$section[1] = "Learning";
$q[1] = "Help and Documentation";
$qq[1] = "Design for use without documentation.
	Provide easy-to-use task-oriented help";
$q[2] = "Adopt the User's Viewpoint";
$qq[2] = "Speak the user's language (avoid jargon).
	Make use of existing knowledge (familiar mental models).";
$q[3] = "Simple and Natural Dialogue";
$qq[3] = "Avoid extraneous information, steps, actions.
	Information should be in a logical, natural order.";
$q[4] = "Design for Advancement";
$qq[4] = "Provide shortcuts (quick keys, customization).";

$section[5] = "Adapting to the User";
$q[5] = "Provide Maps and a Trail";
$qq[5] = "Give the user a way to preview where to go, what will happen.
	Give the user a way to review / return-to previous contexts.";
$q[6] = "Show the User What is (Not) Possible";
$qq[6] = "Provide affordances to indicate what can be done.";
$q[7] = "Intuitive Mappings";
$qq[7] = "Design good response compatibility between controls/actions.";
$q[8] = "Minimize Memory Load";
$qq[8] = "Remove the need to remember across dialogues.
	Provide multiple views for easy comparisons.";
$q[9] = "Consistency in the System and to Standards";
$qq[9] = "Make sure the same term/action has one meaning.
	When there is no better way, conform to a standard.";

$section[10] = "Feedback and Errors";
$q[10] = "Feedback";
$qq[10] = "Provide timely feedback about all processes, system status.";
$q[11] = "Prevent Errors";
$qq[11] = "Make it difficult to make errors.";
$q[12] = "Error Messages";
$qq[12] = "Diagnose the source and cause of a problem and suggest a solution.";
$q[13] = "Clearly Marked Exits and Error Recovery";
$qq[13] = "Make sure the user can get out of an undesirable state easily.
	Design assuming that people will make errors and need to recover previous states.";

for $q (1 .. $qn) {
	$q[$q] .= "\n<br><font size=-1>$qq[$q]</font>\n";
	# $q[$q] =~ s/\n\t/\n<br>/g;
	# $q[$q] =~ s/<br>/ * /;
}

1;
End of phue.pl
chmod +x phue.pl
if test -e nau.pl; then echo Overwriting nau.pl; else echo Extracting nau.pl; fi
cat > nau.pl << 'End of nau.pl'
$D{'title'} = "Nielsen's Attributes of Usability";
$D{'sender'} = "NAU";
$D{'lowlab'} = $Lang{'Bad'};
$D{'highlab'} = $Lang{'Good'};
$D{'positive'} = 0;
$D{'negative'} = 0;

$D{'ref'} = "Nielsen, J. (1993)
	<a href=http://www.useit.com/jakob/useengbook.html
		><i>Usability Engineering</i></a>.
	Academic Press. Chapter 2.2, p. 26.
";

$qn = 5;

if ($F{'language'} eq "fr") {

$D{'help'} = "Veuillez &eacute;valuer la facilit&eacute; d'utilisation
en utilisant des crit&egrave;res de Nielsen.";

$q[1] = "Facile &agrave; apprendre";
$q[2] = "Efficace pour utiliser";
$q[3] = "facile &agrave; se rappeler";
$q[4] = "Exempt d'erreurs (Pr&eacute;cis)";
$q[5] = "Subjectivement satisfaisant";

} else {

$D{'help'} = "Please rate $System according to Nielsen's attributes of usability.";

$q[1] = "Learnability";
$q[2] = "Efficiency";
$q[3] = "Memorability";
$q[4] = "Errors (Accuracy)";
$q[5] = "Subjective Satisfaction";

}

1;
End of nau.pl
chmod +x nau.pl
if test -e nhe.pl; then echo Overwriting nhe.pl; else echo Extracting nhe.pl; fi
cat > nhe.pl << 'End of nhe.pl'
$D{'title'} = "Nielsen's Heuristic Evaluation";
$D{'sender'} = "NHE";
$D{'lowlab'} = $Lang{'Bad'};
$D{'highlab'} = $Lang{'Good'};
$D{'positive'} = 0;
$D{'negative'} = 0;

$D{'ref'} = "Nielsen, J. (1993)
	<a href=http://www.useit.com/jakob/useengbook.html
		><i>Usability Engineering</i></a>.
	Academic Press. Chapter 5, p. 115.
";

$qn = 10;

$D{'help'} = "Please evaluate $System according to Nielsen's usability heuristics.";

$q[1] = "Simple and Natural Dialogue";
$q[2] = "Speak the Users' Language";
$q[3] = "Minimize User Memory Load";
$q[4] = "Consistency";
$q[5] = "Feedback";
$q[6] = "Clearly Marked Exits";
$q[7] = "Shortcuts";
$q[8] = "Good Error Messages";
$q[9] = "Prevent Errors";
$q[10] = "Help and Documentation";

1;
End of nhe.pl
chmod +x nhe.pl
if test -e questlang.pl; then echo Overwriting questlang.pl; else echo Extracting questlang.pl; fi
cat > questlang.pl << 'End of questlang.pl'
# This file contains the general language-localizing strings for question.cgi.
# Each condition corresponds to a language (e.g., "en" or "fr") and contains
# the same perl variables (stored in the Lang hashtable).  The "xx" language
# at the end of the file is a special language to test the software.
# To provide a translation, start with the English versions, which have more comments.
# Go to the corresponding names in the "target" language and chnage the text.
# For example:
#	$Lang{'Email'} = "Email to"; # label for email address field
#	$Lang{'Email'} = "Envoyer &aacute;"; # label for email address field
# Don't worry too much about the perl syntax; I can fix that later.
# I prefer to have mnemonic HTML entities, but &#nnn; is okay, as are Latin-1 chars.


if ($F{'language'} eq "en") { # English

	# BUTTON LABELS
	$Lang{'Addall'} = "Comment All"; # add comments to all questions
	$Lang{'Submit'} = "Mail Data";   # submit data
	
	# FEEDBACK
	$Lang{'Submitted'} = "Your data has been mailed.  Thank you."; # data was submitted
	$Lang{'NotSubmitted'} = "Your data was not mailed."; # data was not submitted
	$Lang{'AddedComment'} = "Added Comment Field to Item"; # comment field was added
		# item number will be appended to the end of this string
	$Lang{'NeedEmail'} = "You must supply a valid email address"; # missing/bad format
	
	# HELP
	$Lang{'Comment'} = "Comment";
	$Lang{'AddComment'} = "Add a comment about an item by clicking on its
		<img alt=\"Add a comment\" src=$NoteIcon> icon, or add comment fields for all items
		by clicking on <b>$Lang{'Addall'}</b>."; # help on adding comments
	$Lang{'CommentHelp'} = "Add a comment";
	$Lang{'RespondAll'} = "Try to respond to all the items."; # general help
	$Lang{'UseNA'} = "For items that are not applicable, use:"; # help for NA
	$Lang{'UseComment'} = "Optionally provide comments and your email address in the box.";
		# help for comment boxes, if they are present
	$Lang{'FillRequired'} = "Make sure these fields are filled in";
		# will be followed by "System" and "Email to"
	$Lang{'HowSubmit'} = "To mail in your results, click on:"; # help for sending data
	# instructions to list positive/negative aspects
	$Lang{'ListNegative'} = "List the most <b>negative</b> aspect(s)";
	$Lang{'ListPositive'} = "List the most <b>positive</b> aspect(s)";
	
	# OBJECT LABELS (will be followed by :)
	$Lang{'Email'} = "Email to";   # label for email address field
	$Lang{'BasedOn'} = "Based on"; # label for reference field
	$Lang{'NewNote'} = "Comments"; # label inside comment field
	
	# LINK LABELS
	$Lang{'FormTop'} = "Top of Form";  # link to get to top of form
	$Lang{'Abstract'} = "Abstract";    # link to fid abstract in HCIBIB
	$Lang{'About'} = "About";          # label before link to "About question.cgi"
	$Lang{'RETURN'} = "RETURN&nbsp;TO&nbsp;REFERRING&nbsp;PAGE";
		# label for link to return to page that got user to this form
	
	# MISC
	$Lang{'System'} = "System";                      # type of object being evaluated
	$Lang{'The'} = "The";                            # definite article for object
	$Lang{'This'} = "This";                          # specific article for object
	$Lang{'NA'} = "NA";                              # label for "Not Applicable" value
	$Lang{'StronglyDisagree'} = "strongly disagree"; # label for low end of scale
	$Lang{'StronglyAgree'} = "strongly agree";       # label for high end of scale
	$Lang{'Unlikely'} = "unlikely";                  # label for low end of scale
	$Lang{'Likely'} = "likely";                      # label for high end of scale
	$Lang{'Bad'} = "bad";                            # label for low end of scale
	$Lang{'Good'} = "good";                          # label for high end of scale

} elsif ($F{'language'} eq "fr") { # French

# BUTTON LABELS
$Lang{'Addall'} = "Commentaires"; # add comments to all questions
$Lang{'Submit'} = "Soumettre"; # submit data

# FEEDBACK
# data was submitted
$Lang{'Submitted'} = "Nous avons re&ccedil;u vos r&eacute;ponses. Merci.";
# data was not submitted
$Lang{'NotSubmitted'} = "Vos r&eacute;ponses n'ont pas &eacute;t&eacute; transmises.";
# comment field added to an item
$Lang{'AddedComment'} = " Un champ pour &eacute;crire vos commentaires
a &eacute;t&eacute; ajout&eacute; &agrave; l'&eacute;nonc&eacute;";
# email missing or bad format
$Lang{'NeedEmail'} = "Vous devez fournir une adresse &eacute;lectronique valide";

# HELP
# help on adding comments
$Lang{'Comment'} = "Commentaire";
$Lang{'AddComment'} = "Faites un commentaire sp&eacute;cifique
&agrave; un &eacute;nonc&eacute; en cliquant sur cet
<img alt=\"Commentaire\" src=$NoteIcon> icone, ou faites afficher une bo&icirc;te
de commentaires qui s&#146;appliquent &agrave; tous les
&eacute;nonc&eacute;s en cliquant sur le bouton <b>$Lang{'Addall'}</b>.";
$Lang{'CommentHelp'} = "Faites un commentaire sp&eacute;cifique"; # GP accessibility
# general help
$Lang{'RespondAll'} = "Essayez de r&eacute;pondre &agrave; tous les &eacute;nonc&eacute;s.";
# help for NA
$Lang{'UseNA'} = "Pour les &eacute;nonc&eacute;s qui ne s'appliquent pas, r&eacute;pondez :";
$Lang{'UseComment'} = "Vous &ecirc;tes invit&eacute;s &agrave; faire des commentaires
et &agrave; inscrire votre adresse &eacute;lectronique dans l'espace
r&eacute;serv&eacute; &agrave; cette fin.";

# help for comment boxes, if they are present
$Lang{'FillRequired'} = "Assurez-vous que les champs suivants sont remplis";
# will be followed by $Lang{'System'} and $Lang{'Email'}
# help for sending data
$Lang{'HowSubmit'} = "Pour soumettre vos r&eacute;ponses, cliquez sur :";
# instructions to list positive/negative aspects
$Lang{'ListNegative'} = "Inscrivez les principaux aspects
<b>n&eacute;gatifs</b>";
$Lang{'ListPositive'} = "Inscrivez les principaux aspects
<b>positifs</b>";

# OBJECT LABELS (will be followed by :)
# label for Email field
$Lang{'Email'} = "Envoyer &agrave;";
# label for questionnaire reference
$Lang{'BasedOn'} = "Inspir&eacute; de";
# default value for comment field
$Lang{'NewNote'} = "Commentaires";

# LINK LABELS
# Top of Form
$Lang{'FormTop'} = "Haut";
# Abstract (of article)
$Lang{'Abstract'} = "R&eacute;sum&eacute;";
# label for "About question.cgi"
$Lang{'About'} = "Au sujet du questionnaire";
# return to referrer
$Lang{'RETURN'} = "Retour au site";

# MISC
$Lang{'System'} = "Syst&egrave;me";
# the System
$Lang{'The'} = "Le";
# this System
$Lang{'This'} = "Ce";
$Lang{'StronglyDisagree'} = "D&eacute;saccord";
$Lang{'StronglyAgree'} = "Accord";
$Lang{'NA'} = "NA";
$Lang{'Unlikely'} = "Improbable";
$Lang{'Likely'} = "Probable";
$Lang{'Bad'} = "Mauvais";
$Lang{'Good'} = "Bien";

} else { # special language

	$F1 = "<font color=green><b>"; $F0 = "</b></font>";
	# BUTTON LABELS
	$Lang{'Addall'} = "ADDALL"; # add comments to all questions
	$Lang{'Submit'} = "SUBMIT"; # submit data
	
	# FEEDBACK
	$Lang{'Submitted'} = "$F1 SUBMITTED $F0"; # data was submitted
	$Lang{'NotSubmitted'} = "$F1 NOTSUBMITTED $F0"; # data was not submitted
	$Lang{'AddedComment'} = "$F1 ADDEDCOMMENT $F0"; # comment field was added
	$Lang{'NeedEmail'} = "$F1 NEED EMAIL $F0"; # missing or bad format email
	
	# HELP
	# help about adding comments -- using the variables
	$Lang{'Comment'} = "COMMENT";
	$Lang{'AddComment'} = "$F1 ADDCOMMENT<img src=$NoteIcon> $F0"; # help about adding comments
	$Lang{'CommentHelp'} = "$F1 COMMENT HERE $F0";
	$Lang{'RespondAll'} = "$F1 RESPOND TO ALL $F0.";
	$Lang{'UseNA'} = "$F1 FOR NA USE: $F0";
	$Lang{'UseComment'} = "$F1 USE COMMENT $F0";
	
	$Lang{'FillRequired'} = "$F1 FILL REQUIRED $F0";
	$Lang{'HowSubmit'} = "$F1 TO SUBMIT: $F0";
	# list instructions
	$Lang{'ListNegative'} = "$F1 LISTNEGATIVE $F0"; # list the bad aspects of ...
	$Lang{'ListPositive'} = "$F1 LISTPOSITIVE $F0"; # list the good aspects of ...
	
	# OBJECT LABELS (will be followed by :)
	$Lang{'Email'} = "$F1 EMAILTO $F0"; # form label for email address
	$Lang{'BasedOn'} = "$F1 BASED ON $F0"; # label before reference
	$Lang{'NewNote'} = "COMMENTS"; # default value for question comment
	
	# LINK LABELS
	$Lang{'FormTop'} = "$F1 TOP $F0"; # link label to jump to top of form
	$Lang{'Abstract'} = "$F1 ABSTRACT $F0"; # link label to search for ref abstract
	$Lang{'About'} = "$F1 ABOUT $F0"; # link label before script name
	$Lang{'RETURN'} = "$F1 RETURN $F0"; # link label to return to referring page
	
	# MISC
	$Lang{'System'} = "$F1 SYSTEM $F0";
	$Lang{'StronglyDisagree'} = "$F1 DISAGREE $F0";
	$Lang{'StronglyAgree'} = "$F1 AGREE $F0";
	$Lang{'NA'} = "$F1 NA $F0";
	$Lang{'Unlikely'} = "$F1 UNLIKELY $F0";
	$Lang{'Likely'} = "$F1 LIKELY $F0";
	$Lang{'Bad'} = "$F1 BAD $F0";
	$Lang{'Good'} = "$F1 GOOD $F0";
}

1;
End of questlang.pl
chmod +x questlang.pl
if test -e use.pl; then echo Overwriting use.pl; else echo Extracting use.pl; fi
cat > use.pl << 'End of use.pl'
$D{'title'} = "Questionnaire for User Interface Satisfaction";
$D{'sender'} = "USE Questionnaire";
$D{'lowval'} = 1;
$D{'highval'} = 7;
$D{'lowlab'} = $Lang{'StronglyDisagree'};
$D{'highlab'} = $Lang{'StronglyAgree'};
$D{'NAval'} = "-1";

$D{'ref'} = "Lund,&nbsp;A.M. (2001)
<i>Measuring Usability with the USE Questionnaire.</i>
STC Usability SIG Newsletter, 8:2.
<a href=http://www.hcibib.org/bs.cgi?query=U.lund.2001&searchtype=question>[Abstract]</a>
";

$qn = 30;

$D{'help'} = "Please rate your agreement with these statements.";

$section[1] = "Usefulness";
	$q[1] = "It helps me be more effective.";
	$q[2] = "It helps me be more productive.";
	$q[3] = "It is useful.";
	$q[4] = "It gives me more control over the activities in my life.";
	$q[5] = "It makes the things I want to accomplish easier to get done.";
	$q[6] = "It saves me time when I use it.";
	$q[7] = "It meets my needs."; # low weight
	$q[8] = "It does everything I would expect it to do.";
$section[9] = "Ease of Use";
	$q[9] = "It is easy to use.";
	$q[10] = "It is simple to use.";
	$q[11] = "It is user friendly.";
	$q[12] = "It requires the fewest steps possible to accomplish what I want to do with it.";
	$q[13] = "It is flexible."; # low weight
	$q[14] = "Using it is effortless."; # low weight
	$q[15] = "I can use it without written instructions."; # low weight
	$q[16] = "I don't notice any inconsistencies as I use it."; # low weight
	$q[17] = "Both occasional and regular users would like it."; # low weight
	$q[18] = "I can recover from mistakes quickly and easily."; # low weight
	$q[19] = "I can use it successfully every time."; # low weight
$section[20] = "Ease of Learning";
	$q[20] = "I learned to use it quickly.";
	$q[21] = "I easily remember how to use it.";
	$q[22] = "It is easy to learn to use it.";
	$q[23] = "I quickly became skillful with it."; # low weight
$section[24] = "Satisfaction";
	$q[24] = "I am satisfied with it.";
	$q[25] = "I would recommend it to a friend.";
	$q[26] = "It is fun to use.";
	$q[27] = "It works the way I want it to work.";
	$q[28] = "It is wonderful.";
	$q[29] = "I feel I need to have it.";
	$q[30] = "It is pleasant to use.";

1;
End of use.pl
chmod +x use.pl

