File:  [LON-CAPA] / doc / homework / homework5.html
Revision 1.23: download - view: text, annotated - select for diffs
Thu Apr 7 06:56:20 2005 UTC (19 years, 7 months ago) by albertel
Branches: MAIN
CVS tags: version_2_9_X, version_2_9_99_0, version_2_9_1, version_2_9_0, version_2_8_X, version_2_8_99_1, version_2_8_99_0, version_2_8_2, version_2_8_1, version_2_8_0, version_2_7_X, version_2_7_99_1, version_2_7_99_0, version_2_7_1, version_2_7_0, version_2_6_X, version_2_6_99_1, version_2_6_99_0, version_2_6_3, version_2_6_2, version_2_6_1, version_2_6_0, version_2_5_X, version_2_5_99_1, version_2_5_99_0, version_2_5_2, version_2_5_1, version_2_5_0, version_2_4_X, version_2_4_99_0, version_2_4_2, version_2_4_1, version_2_4_0, version_2_3_X, version_2_3_99_0, version_2_3_2, version_2_3_1, version_2_3_0, version_2_2_X, version_2_2_99_1, version_2_2_99_0, version_2_2_2, version_2_2_1, version_2_2_0, version_2_1_X, version_2_1_99_3, version_2_1_99_2, version_2_1_99_1, version_2_1_99_0, version_2_1_3, version_2_1_2, version_2_1_1, version_2_1_0, version_2_12_X, version_2_11_X, version_2_11_5_msu, version_2_11_5, version_2_11_4_uiuc, version_2_11_4_msu, version_2_11_4, version_2_11_3_uiuc, version_2_11_3_msu, version_2_11_3, version_2_11_2_uiuc, version_2_11_2_msu, version_2_11_2_educog, version_2_11_2, version_2_11_1, version_2_11_0_RC3, version_2_11_0_RC2, version_2_11_0_RC1, version_2_11_0, version_2_10_X, version_2_10_1, version_2_10_0_RC2, version_2_10_0_RC1, version_2_10_0, version_2_0_X, version_2_0_99_1, version_2_0_2, version_2_0_1, version_2_0_0, version_1_99_3, version_1_99_2, version_1_99_1_tmcc, version_1_99_1, version_1_99_0_tmcc, version_1_99_0, loncapaMITrelate_1, language_hyphenation_merge, language_hyphenation, bz6209-base, bz6209, HEAD, GCI_3, GCI_2, GCI_1, BZ4492-merge, BZ4492-feature_horizontal_radioresponse, BZ4492-feature_Support_horizontal_radioresponse, BZ4492-Support_horizontal_radioresponse
- ENV -> env

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>LON-CAPA Homework System</title>
  </head>

  <body bgcolor="white">
    <h1>LON-CAPA Homework System</h1>

    <h2>Tags</h2>
    <ul>
      <li>
	Response tags
	<p>
	  Arguments for all response tags
	</p>
	<ul>
	  <li>
	    <i>ID</i>, if this isn't set it will be set during
	    the publication step. It is used to assign parameters names
	    in a way that can be tracked if an instructor modifies
	    things by hand.
	  </li>
	  <li>
	    <i>name</i> optional, if set, it will be used by the
	    resource assembly tool when one is modifying parameters.
	    </li>
	</ul>
	<p>
	  Implemented response tags
	</p>
	<ul>
	  <li>
	    <b>&lt;responseparam&gt;</b> if it appears it should be
	    inside of a &lt;*response&gt; tag, defines an externally
	    adjustable parameter for this question. Arguments:
	    <ul>
	      <li>
		<i>default</i> required, specifies a default value for
		the parameter
	      </li>
	      <li>
		<i>name</i> required, specifies an internal name for
		the parameter
	      </li>
	      <li>
		<i>type</i> required specifies the type of parameter,
		one of "tolerance", "int", "float", "string", "date"
		(configuration of paramters is handled by
		lonparmset.pm and parameter.html)
	      </li>
	      <li>
		<i>description</i> a string describing the parameter,
		this is what is used to talk about a parameter outside
		of a problem
	      </li>
	    </ul>
	  </li>
	  <li>
	    <b>&lt;parameter&gt;</b> exactly the same as
	    &lt;responseparam&gt; currently, but should not appear
	    inside of a &lt;*response&gt;
	  </li>
	  <li>
	    <b>&lt;numericalresponse&gt;</b> implements a numerical
	    answer, it needs an internal <b>&lt;textline&gt;</b> for
	    the response to go in. It checks all styles of numerical
	    supported in CAPA. Possible args are:
	    <ul>
	      <li><i>answer</i> required, specifies the correct answer, may be either a perl list or scalar</li>
	      <li><i>units</i> optional, specifies unit of correct answer, CAPA style</li>
	    </ul>
	  </li>
	  <li>
	    <b>&lt;stringresponse&gt;</b> implements a string answer,
	    it needs an internal <b>&lt;textline&gt;</b> for the
	    response to go in. It can check the string for either case
	    or order.
	    <ul>
	      <li><i>answer</i> required, specifies the correct answer, may be either a perl list or scalar</li>
	      <li><i>type</i> optional, CAPA style str args, cs/ci/mc
		<ul>
		  <li>cs - case senesitive, order important</li>
		  <li>ci - case insenesitive, order important</li>
		  <li>mc - case insenesitive, order unimportant</li>
		</ul>
	      </li>
	    </ul>
	  <li>
	    <b>&lt;essayresponse&gt;</b> implements a ungraded large
	    text response, it need an internal <b>&lt;textfield&gt;</b>
	    for the response to go in.
	  </li>
	  <li>
	    <b>&lt;imageresponse&gt;</b> implements a image click
	    style image submission, uses the foil structure tags <a
	    href="#foil">below</a>. Additional tags that should appear
	    in a &lt;foil&gt; are:
	    <ul>
	      <li><b>&lt;image&gt;</b> required, the contained text
	      specifies a published graphical resource that is the
	      image used, should only appear once per foil</li>
	      <li><b>&lt;rectangle&gt;</b> required, the contained text
	      specifies a rectangular area that is correct, should
	      look like (1,2)-(3,4), at least 1 required</li>
	      <li><b>&lt;text&gt;</b> required, the contained text is
	      printed on top of the image.</li>
	    </ul>
	  </li>
	  <li>
	    <b>&lt;optionresponse&gt;</b> implements a "select from
	    these choices" style question, the choices are specified
	    by the instructor, it uses the foil structure tags <a
	    href="#foil">below</a> with this additional args: 
	    <ul>
	      <li>
		<b>&lt;foilgroup&gt;</b> is required to have
		<i>options</i> which should be a perl list of possible
		options for the student.
	      </li>
	    </ul>
	  </li>
	  <li>
	    <b>&lt;radiobuttonresponse&gt;</b> implements a true / false
	    style question with 1 correct answer.it uses the foil
	    structure tags <a href="#foil">below</a> but the
	    <i>value</i> of a &lt;foil&gt;can only be "true" or
	    "false" or "unused"
	  </li>
	  <li>
	    <b>&lt;dataresponse&gt;</b> implements a straight data
	    storage entry idea, needs and interveing input tag like
	    &lt;textline&gt; to work correctly.<br>
	    Arguments:
	    <ul>
	      <li>
		<i>name</i> internal name for the value, it will have
		the part id and respose id added on to it
	      </li>
	      <li>
		<i>type</i> type of data stored in this response
		field, should be one of the types supported by
		parameter.html
	      </li> 
	      <li>
		<i>display</i> a string that will be used to describe
		the field when interfacing with humans
	      </li>
	    </ul>
	  </li>
	  <li>
	    <p>
	      <b>&lt;externalresponse&gt;</b> implements the ability to have
	      an external program grade a response, expects either a
	      &lt;textline&gt; or &lt;textfield&gt; inside the tag. <br />
	    </p>
	    Arguments:
	    <ul>
	      <li>
		<i>url</i> the url to submit the answer and form to,
		does not need to be a LON-CAPA machine.
	      </li>
	      <li>
		<i>answer</i> a string or scalar variable that can
		encode something that should encode the correct
		answer, in some cases this may be nothing.
	      </li>
	      <li>
		<i>form</i> a hash variable name that will be
		submitted to the remote site as a HTTP form.
	      </li>
	    </ul>
	    <p>
	      The response of the remote server needs to be in XML as follows.
	    </p>
	    <pre>
&lt;loncapagrade&gt;
    &lt;awardetail&gt;
CORRECT
    &lt;/awardetail&gt;
    &lt;message&gt;
A message to be shown to the students
    &lt;/message&gt;
&lt;/loncapagrade&gt;
	    </pre>
	    <ul>
	      <li>
		<b>&lt;loncapagrade&gt;</b> no arguments but must
		surround the response.
	      </li>
	      <li>
		<b>&lt;awardetail&gt;</b> required inner tag, the
		response inside must be one of the detailed responses
		that appears in the data storage documentation
		(CVS:loncapa/doce/homework/datastorage)
	      </li>
	      <li>
		<b>&lt;message&gt;</b> optional message to have shown
		to the student
	      </li>
	    </ul>
	  </li>
	</ul>
	<li>
	<a name="foil">Foil Structure Tags</a>
	<p>
	  All tags that implement a foil structure have an optional
	  arg of <i>max</i> that controls the maximum number of total
	  foils to show.
	</p>
	<ul>
	  <li>
	    <b>&lt;foilgroup&gt;</b> required, must be the tag that
	    surrounds all foil definitions	    
	  </li>
	  <li>
	    <b>&lt;foil&gt;</b> required, all data inside is a possible foil
	  </li>
	  <li>
	    <b>&lt;conceptgroup&gt;</b> optional, surrounds a
	    collection of &lt;foil&gt;, when a problem is displayed
	    only one of the contained &lt;foil&gt;is selected for
	    display. It receives one required argument
	    <i>concept</i>.
	  </li>
	</ul>
      </li>
      <li>
	Hint structure
	<p>
	  All of these tags must appear inside a <b>&lt;*response&gt;</b> tag.
	</p>
	<ul>
	  <li>
	    <b>&lt;hintgroup&gt;</b> Tag that surrounds all of a hint.
	  </li>
	  <li>
	    <b>&lt;hintpart&gt;</b> required, Tag to implement
	    conditional hints. It has a required argument
	    <i>on</i>. When a &lt;*hint&gt; tag named the same as the
	    value the </i>on</i> attribute evaluates to be correct the
	    &lt;hintpart&gt; will show. If no other &lt;hintpart&gt;
	    are to show then all hintparts with a <i>on</i> of
	    "default" will show
	  </li>
	  <li>
	    <b>&lt;numericalhint&gt;</b> has all the arguments that
	    &lt;numericalresponse&gt;, does and the required attribute
	    <i>name</i> which should be set to the value of which
	    &lt;hintpart&gt; will be shown. 
	  </li>
	  <li>
	    <b>&lt;stringhint&gt;</b> has all the arguments that
	    &lt;stringresponse&gt;, does and the required attribute
	    <i>name</i> which should be set to the value of which
	    &lt;hintpart&gt; will be shown. 
	  </li>
	  <li>
	    <b>&lt;formulahint&gt;</b> has all the arguments that
	    &lt;formularesponse&gt;, does and the required attribute
	    <i>name</i> which should be set to the value of which
	    &lt;hintpart&gt; will be shown. 
	  </li>
	  <li>
	    <b>&lt;optionhint&gt;</b> required attribute <i>name</i>
	    which should be set to the value of which &lt;hintpart&gt;
	    will be shown.
	  </li>
	  <li>
	    <b>&lt;radiobuttonhint&gt;</b> has the required attribute
	    <i>name</i> which should be set to the value of which
	    &lt;hintpart&gt; will be shown, and <i>answer</i> which
	    should be a two element list, frist the type (foil or
	    concept) and then either the foil's name or the concept's
	    string
	  </li>
	</ul>
      </li>
      <li>
	Input Tags
	<p>
	  This group of tags implement a mechanism for getting data
	  for students, they will usually be used by a
	  &lt;*response&gt;.
	</p>
	<ul>
	  <li>
	    <b>&lt;textfield&gt;</b> creates a Large text input box, If
	    data appears between the start and end tags, the data will
	    appear in the textfield if the student has not yet made a
	    submission. Additionally it takes two arguments <i>rows</i>
	    and <i>cols</i> which control the height and width of the
	    area respectively. It defaults to 10 and 80.
	  </li>
	  <li>
	    <b>&lt;textline&gt;</b> creates a single line of input
	    element, it accepts 1 argument <i>size</i> which controls
	    the width on the textline, it defaults to 20.
	  </li>
	</ul>
      </li>
      <li>
	Output Tags
	<p>
	  This group of tags generate useful pieces of output.
	</p>
	<ul>
	  <li>
	    <b>&lt;standalone&gt;</b> everything in between the start
	    and end tag is shown only on the web, and only if the
	    resource is not part of a course.
	  </li>
	  <li>
	    <b>&lt;displayduedate&gt;</b> this will insert the current
	    duedate if one is set into the document. It is generated
	    to be inside a table of 1x1 elements
	  </li>
	  <li>
	    <b>&lt;displaytitle&gt;</b> this will insert the title of
	    the problem from the metadata of the problem
	  </li>
	  <li>
	    <b>&lt;window&gt;</b> the text in between is put in a
	    popup javascript window
	  </li>
	  <li>
	    <b>&lt;m&gt;</b> the inside text is LaTeX, and is
	    converted to HTML (or MathML) on the fly, if the argument
	    <i>eval</i> is set to "on" the intervening text will have
	    a perl var expansion done to it before being converted.
	  </li>
	  <li>
	    <b>&lt;randomlabel&gt;</b> shows a specified image with
	    images or text labels randomly assigned to a set of
	    specific locations, those locations may also have values
	    assigned to them. There is a hash generated conating the
	    mapping of labels to locations, labels to values, and
	    locations to values. Example:
	    <pre>
 &lt;randomlabel bgimg=&quot;URL&quot; width=&quot;12&quot; height=&quot;45&quot; texwidth=&quot;50&quot;&gt;
    &lt;labelgroup name=&quot;GroupOne&quot; type=&quot;image&quot;&gt;
      &lt;location x=&quot;123&quot; y=&quot;456&quot; value=&quot;10&quot; /&gt;
      &lt;location x=&quot;321&quot; y=&quot;654&quot; value=&quot;20&quot; /&gt;
      &lt;location x=&quot;213&quot; y=&quot;546&quot; value=&quot;13&quot; /&gt;
      &lt;label description=&quot;TEXT-1&quot;&gt;IMG-URL&lt;/label&gt;
      &lt;label description=&quot;TEXT-2&quot;&gt;IMG-URL&lt;/label&gt;
      &lt;label description=&quot;TEXT-3&quot;&gt;IMG-URL&lt;/label&gt;
    &lt;/labelgroup&gt;
    &lt;labelgroup name=&quot;GroupTwo&quot; type=&quot;text&quot;&gt;
      &lt;location x=&quot;12&quot; y=&quot;45&quot; /&gt;
      &lt;location x=&quot;32&quot; y=&quot;65&quot; /&gt;
      &lt;location x=&quot;21&quot; y=&quot;54&quot; /&gt;
      &lt;label&gt;TEXT-1&lt;/label&gt;
      &lt;label&gt;TEXT-2&lt;/label&gt;
      &lt;label&gt;TEXT-3&lt;/label&gt;
    &lt;/labelgroup&gt;
   &lt;/randomlabel&gt;
	    </pre>
	    Arguments:
	    <ul>
	      <li>
		<i>bgimg</i> either a fully qualified URL for an
		external image, or a loncapa resource, it supports
		relative references (../images/apicture.gif), the
		image must either be a GIF or JPEG
	      </li>
	      <li>
		<i>width</i> the width of the image in pixels
	      </li>
	      <li>
		<i>height</i> the height of the image in pixels
	      </li>
	      <li>
		<i>texwidth</i> the width of the image in millimeters
	      </li>
	    </ul>
	    Internal tags:
	    <ul>
	      <li>
		<b>&lt;labelgroup&gt;</b> 1 required, multiple
		allowed. Declares a group of locations and labels
		associated with them.  <br />Arguments:
		<ul>
		  <li>
		    <i>name</i> this is the name of the group, a hash
		    with this name will be generated holding the
		    mappings for later use in the problem. For each
		    location a value will be set for which label is
		    there, (EX. $hash{'1'}="TEXT-2"). For locations
		    with values the hash will contain 2 items, a
		    location to value mapping ($hash{'value_1'}=10),
		    and a label to value mapping
		    ($hash{'labelvalue_2'}=10). For all image style of
		    labels there will also be a label description to
		    label URL mapping ($hash{'image_2'}=IMG-URL). Also
		    the entry 'numlocations will be set to the total
		    number of locations that exist.
		    (Note that locations and labels start counting from 1.)
		  </li>
		  <li>
		    <i>type</i> the type of labels in this group,
		    either 'image' or 'text'
		  </li>
		</ul>
	      </li>
	      <li>
		<b>&lt;location&gt;</b> declares a location on the
		image that a label should appear at <br />Arguments:
		<ul>
		  <li>
		    <i>x</i> the x value of the location in pixels 
		  </li>
		  <li>
		    <i>y</i> the y value of the location in pixels 
		  </li>
		  <li>
		    <i>value</i> a scalar value to associate at this
		    location (optional)
		  </li>
		</ul>
	      </li>
	      <li>
		<b>&lt;label&gt;</b> declaration of a label, if this
		is a text type labelgroup the internal text should be
		the text of the label (HTML is not currently
		supported), if this is an image type of label the
		internal text must be a LON-CAPA resource
		specification, and the description filed must be set.
		<br />Arguments:
		<ul>
		  <li>
		    <i>description</i> a required field for image
		    labels, it will be used when setting values in the
		    hash.
		  </li>
		</ul>
	      </li>
	    </ul>
	  </li>
	</ul>
      </li>
      <li>
	Scripting
      <p>
	These tags allow the document to behave programatically
      </p>
      <ul>
	<li>
	    <b>&lt;display&gt;</b> the intervening perl script is
	    evaluated in the safe space and the return value of the
	    script replaces the entire tag
	  </li>
	  <li>
	    <b>&lt;import&gt;</b> causes the parse to read in the file
	    named in the body of the tag and parse it as if the entire
	    text of the file had existed at location of the tag
	  </li>
	  <li>
	    <b>&lt;parserlib&gt;</b> the enclosed filename contains
	    definitions for new tags
	  </li>
	  <li>
	    <b>&lt;script&gt;</b> if the argument <i>type</i> is set
	    to "loncapa/perl" the enclosed data is a perl script which
	    is evaluated inside the perl Safe space. The return value
	    of the script is ignored.
	  </li>
	  <li>
	    <b>&lt;scriptlib&gt;</b> the enclosed filename contains
	    perl code to run in the safe space
	  </li>
	  <li>
	    <b>&lt;block&gt;</b> has a required argument
	    <i>condition</i> that is evaluated, it the condition is
	    true everything inside the tag is evaluated, if it is false
	    everything inside the block tag is skipped
	  </li>
	  <li>
	    <b>&lt;notsolved&gt;</b> everything inside the tag is
	    skipped if the problem is "solved"
	  </li>
	  <li>
	    <b>&lt;postanswerdate&gt;</b> everything inside the tag is
	    skipped if the problem is before the answer date
	  </li>
	  <li>
	    <b>&lt;preduedate&gt;</b> everything inside the tag is
	    skipped if the problem is after the due date
	  </li>
	  <li>
	    <b>&lt;randomlist&gt;</b> the enclosed tags are parsed in
	    a stable random order, optional argument <i>show</i>
	    restricts the number of tags indie that are actually
	    parsed the no more than <i>show</i>.
	  </li>
	  <li>
	    <b>&lt;solved&gt;</b> everything inside the tag is
	    skipped if the problem is "not solved"
	  </li>
	  <li>
	    <b>&lt;while&gt;</b> implements a while loop, required
	    argument <i>condition</i> is a perl scriptlet that when
	    evaluated results in a true or false value, on true the
	    entirety of the text between the whiles is parsed. The
	    condition is tested again, etc. If false it goes to the
	    next node in the parse.
	  </li>
	</ul>
      </li>
      <li>
	Structure Tags
	<p>
	  These tags give the problem a structure and take care of the
	  recording of data and giving the student messages.
	</p>
	<ul>
	  <li>
	    <b>&lt;problem&gt;</b> must be the first tag in the file,
	    this tag sets up the header of the webpage and generates
	    the submit buttons, it also handles due dates properly
	  </li>
	  <li>
	    <b>&lt;part&gt;</b> must be below &lt;problem&gt; if it is
	    going to be used. It does many of the same tasks as
	    &lt;problem&gt; but allows multiple separate problems to
	    exist in a single file.
	  </li>
	  <li>
	    <b>&lt;startouttext&gt;</b><b>&lt;endouttext&gt;</b> these
	    tags are somewhat special, they must have no internal text
	    and occur in pairs. Their use is to mark up the problem so
	    the web editor knows what sections should be edited in a
	    plain text block on the web.
	  </li>
	  <li>
	    <b>&lt;comment&gt;</b> Allows one to comment out sections
	    of code in a balanced manner, or to provide a comment
	    description of how a problem works. Only shows up for the
	    edit target, stripped out for all other targets.
	  </li>
	</ul>
      </li>
    </ul>
    <h2>&lt;script&gt; Functions</h2>
    <p> 
      A list of functions that have been written that are available in 
      the Safe space scripting environment inside a problem. 
    </p>
    <ul>
      <li>sin(x), cos(x), tan(x)</li>
      <li>asin(x), acos(x), atan(x), atan2(y,x)</li>
      <li>log(x), log10(x)</li>
      <li>exp(), pow(x,y), sqrt(x)</li>
      <li>abs(x), sgn(x)</li>
      <li>erf(x), erfc(x)</li>
      <li>ceil(x), floor(x)</li>
      <li>min(...), max(...)</li>
      <li>factorial(n)</li>
      <li>N%M</li>
      <li>sinh(x), cosh(x), tanh(x)</li>
      <li>asinh(x), acosh(x), atanh(x)</li>
      <li>roundto(x,n)</li>
      <li>web("a","b","c") or web(a,b,c)</li>
      <li>html("a") or html(a)</li>
      <li>j0(x), j1(x), jn(n,x), jv(y,x)</li>
      <li>y0(x), y1(x), yn(n,x), yv(y,x)</li>
      <li>random</li>
      <li>choose</li>
      <li>tex("a","b") or tex(a,b)</li>
      <li>var_in_tex(a)</li>
      <li>to_string(x), to_string(x,y)</li>
      <li>class(), section()</li>
      <li>name(), student_number()</li>
      <li>open_date(), due_date(), answer_date()</li>
      <li>sub_string()</li>
      <li>array_moments(array)</li>
      <li>format(x,y),prettyprint(x,y)</li>
      <li>map(...)</li>
      <li>caparesponse_check</li>
      <li>caparesponse_check_list</li>
    </ul>
<!-- Table inserted by H. K. Ng 
    06/01/2001
    06/12/2001
-->
    <p> 
      Detailed descriptions of each function and comparison with CAPA.
    </p>

  <table border=1>
      <tr>
            <td valign="top"><b>CAPA Functions</b</td>
            <td valign="top"><b>LON-CAPA</b</td>
            <td valign="top"><b>Descriptions</b</td>
            <td valign="top"><b>Differences (if any)</b</td>
     </tr>

    <tr>
             <td valign="top">sin(x), cos(x), tan(x)</td>
             <td valign="top">&amp;sin($x), &amp;cos($x), &amp;tan($x)</td>
             <td valign="top">Trigonometric functions where x is in radians. $x
         can be a pure number, i.e., you can call &amp;sin(3.1415)</td>
              <td valign="top">&nbsp</td>
    </tr>

    <tr>
             <td valign="top">asin(x), acos(x), atan(x), atan2(y,x)</td>
             <td valign="top">&amp;asin($x), &amp;acos($x), &amp;atan($x), &amp;atan2($y,$x)</td>
             <td valign="top">Inverse trigonometric functions. Return value is
                 in radians. For asin and acos the value of x must be between -1 and 1.
                 The atan2 returns a value between -pi and pi the sign of which is determined
                 by y. $x and $y can be pure numbers</td>
             <td valign="top">&nbsp;</td>
    </tr>

    <tr>
             <td valign="top">log(x), log10(x)</td>
             <td valign="top">&amp;log($x), &amp;log10($x)</td>
             <td valign="top">Natural and base-10 logarithm. $x can be a pure number</td>
             <td valign="top">&nbsp;</td>
    </tr>

    <tr>
             <td valign="top">exp(x), pow(x,y), sqrt(x)</td>
             <td valign="top">&amp;exp($x), &amp;pow($x,$y), &amp;sqrt($x)</td>
             <td valign="top">Exponential, power and square root, i.e.,e<sup>x</sup>, x<sup>y</sup> and /x.                  $x and $y can be pure numbers</td>

             <td valign="top">&nbsp;</td>
    </tr>

    <tr>
             <td valign="top">abs(x), sgn(x)</td>
             <td valign="top">&amp;abs($x), &amp;sgn($x)</td>
             <td valign="top">Abs takes the absolute value of x while sgn(x) returns
                 1, 0 or -1 depending on the value of x. For x>0, sgn(x) = 1, for x=0, sgn(x)
                 = 0 and for x&lt;0, sgn(x) = -1. $x can be a pure number</td>
             <td valign="top">&nbsp;</td>
    </tr>

    <tr>
             <td valign="top">erf(x), erfc(x)</td>
             <td valign="top">&amp;erf($x), &amp;erfc($x)</td>
             <td valign="top">Error function.&nbsp; erf = 2/sqrt(pi) integral (0,x) e<sup>t-sq</sup> and <i>                 erfx(x)</i> = 1.0 - <i>erf(x)</i>.&nbsp; $x can be a pure number</td>
             <td valign="top">&nbsp;</td>
    </tr>

    <tr>
             <td valign="top">ceil(x), floor(x)</td>
             <td valign="top">&amp;ceil($x), &amp;floor($x)</td>
             <td valign="top">Ceil function returns an integer rounded up whereas
                 floor function returns and integer rounded down. If x is an integer than
                 it returns the value of the integer. $x can be a pure number</td>
             <td valign="top">&nbsp;</td>
    </tr>

    <tr>
             <td valign="top">min(...), max(...)</td>
             <td valign="top">&amp;min(...), &amp;max(...)</td>
             <td valign="top">Returns the minimum/ maximum value of a list of
                 arguments if the arguments are numbers. If the arguments are strings then
                 it returns a string sorted according to the ASCII codes</td>
             <td valign="top">&nbsp;</td>
    </tr>

    <tr>
             <td valign="top">factorial(n)</td>
             <td valign="top">&amp;factorial($n)</td>
             <td valign="top">Argument (n) must be an integer else it will round
                 down. The largest value for n is 170. $n can be a pure number</td>
             <td valign="top">&nbsp;</td>
    </tr>

    <tr>
             <td valign="top">N%M</td>
             <td valign="top">$N%$M</td>

             <td valign="top">N and M are integers and returns the remainder (in
                 integer) of N/M. $N and $M can be pure numbers</td>
             <td valign="top">&nbsp;</td>
    </tr>

    <tr>
             <td valign="top">sinh(x), cosh(x), tanh(x)</td>
             <td valign="top">&amp;sinh($x), &amp;cosh($x), &amp;tanh($x)</td>
             <td valign="top">Hyperbolic functions. $x can be a pure number</td>
             <td valign="top">&nbsp;</td>
    </tr>

    <tr>
             <td valign="top">asinh(x), acosh(x), atanh(x)</td>
             <td valign="top">&amp;asinh($x), &amp;acosh($x), &amp;atanh($x)</td>
             <td valign="top">Inverse hyperbolic functions. $x can be a pure number</td>
             <td valign="top">&nbsp;</td>
    </tr>

    <tr>
             <td valign="top">/DIS($x,"nn")</td>
             <td valign="top">&amp;format($x,"nn")</td>
             <td valign="top">Display or format $x as nn where nn is nF or nE and n is an integer. Also supports the first character being a $, it thjen will format the result with a call to &dollarformat() described below.</td>
             <td valign="top">&nbsp;The difference is obvious.</td>
    </tr>

    <tr>
             <td valign="top">Not in CAPA</td>
             <td valign="top">&amp;prettyprint($x,"nn")</td>
             <td valign="top">Display or format $x as nn where nn is nF or nE and n is an integer. Also supports the first character being a $, it then will format the result with a a call to &dollarformat() described below. In E mode it will attempt to generate a pretty x10^3 rather than a E3 following the number</td>
             <td valign="top">&nbsp;</td>
    </tr>

    <tr>
             <td valign="top">Not in CAPA</td>
             <td valign="top">&amp;dollarformat($x</td>
             <td valign="top">Reformats $x to have a $ (or \$ if in tex mode) and to have , grouping thousands.</td>
             <td valign="top">&nbsp;</td>
    </tr>
    <tr>
             <td valign="top">roundto(x,n)</td>
             <td valign="top">&amp;roundto($x,$n)</td>
             <td valign="top">Rounds a real number to n decimal points. $x and
                 $n can be pure numbers</td>
             <td valign="top">&nbsp;</td>
    </tr>

    <tr>
             <td valign="top">web("a","b","c") or web(a,b,c)</td>
             <td valign="top">&amp;web("a","b","c") or &amp;web($a,$b,$c)</td>
             <td valign="top">Returns either a, b or c depending on the output
                 medium. a is for plain ASCII, b for tex output and c for html output</td>
             <td valign="top">&nbsp</td>
    </tr>

    <tr>
             <td valign="top">html("a") or html(a)</td>
             <td valign="top">&amp;html("a") or &amp;html($a)</td>
             <td valign="top">Output only if the output mode chosen is in html
                 format</td>
             <td valign="top">&nbsp;</td>
    </tr>

    <tr>
             <td valign="top">jn(m,x)</td>
             <td valign="top">&amp;j0($x), &amp;j1($x), &amp;jn($m,$x), &amp;jv($y,$x)</td>
             <td valign="top">Bessel functions of the first kind with orders 0,
                 1 and m respectively. For jn(m,x), m must be an integer whereas for jv(y,x),
                 y is real. $x can be a pure number. $m must be an integer and can be a
                 pure integer number. $y can be a pure real number</td>
             <td valign="top">In CAPA, j0, j1 and jn are contained in one function,
                 jn(m,x) where m takes the value of 0, 1 or 2. jv(y,x) is new to LON-CAPA.</td>
    </tr>

    <tr>
             <td valign="top">yn(m,x)</td>
             <td valign="top">&amp;y0($x), &amp;y1($x), &amp;yn($m,$x), &amp;yv($y,$x)</td>
             <td valign="top">Bessel functions of the second kind with orders
                 0, 1 and m respectively. For yn(m,x), m must be an integer whereas for
                 yv(y,x), y is real. $x can be a pure number. $m must be an integer and
                 can be a pure integer number. $y can be a pure real number</td>
             <td valign="top">In CAPA, y0, y1 and yn are contained in one function,
                 yn(m,x) where m takes the value of 0, 1 or 2. yv(y,x) is new to LON-CAPA.</td>
    </tr>

    <tr>
             <td valign="top">random(l,u,d)</td>
             <td valign="top">&amp;random($l,$u,$d)</td>
             <td valign="top">Returns a uniformly distributed random number between
                 the lower bound, l and upper bound, u in steps of d. $l, $u and $d can
                 be pure numbers</td>
             <td valign="top">In CAPA, all the 3 arguments must be of the same
                 type. However, now you can mix the type</td>
    </tr>

    <tr>
             <td valign="top">choose(i,...)</td>
             <td valign="top">&amp;choose($i,...)</td>
             <td valign="top">Choose the ith item from the argument list. i must
                 be an integer greater than 0 and the value of i should not exceed the number
                 of items. $i can be a pure integer</td>
             <td valign="top">&nbsp;</td>
    </tr>

    <tr>
             <td valign="top">/MAP(seed;w,x,y,z;a,b,c,d)</td>
             <td valign="top">Option 1 - &amp;map($seed,[\$w,\$x,\$y,\$z],[$a,$b,$c,$d]) or <br> 
                  Option 2 - &amp;map($seed,\@mappedArray,[$a,$b,$c,$d]) <br>
                  Option 3 - @mappedArray = &amp;map($seed,[$a,$b,$c,$d]) <br>
                  Option 4 - ($w,$x,$y,$z) = &amp;map($seed,\@a) <br>
                  where $a='A'<br>
                        $b='B'<br>
                        $c='B'<br>
                        $d='B'<br>
                        $w, $x, $y, and $z are variables</td>
             <td valign="top">Assigns to the variables $w, $x, $y and $z the values of the
                  $a, $b, $c and $c (A, B, C and D). The precise value for $w .. depends
                  on the seed. (Option 1 of calling map). 
                  In option 2, the values of $a, $b .. are mapped into the array, @mappedArray. The two
                  options illustrate the different grouping. Options 3 and 4 give a consistent 
                  way (with other functions) of mapping the items. For each option, the group can
                  be passed as an array, for example, [$a,$b,$c,$d] => \@a.</td>
             <td valign="top">In CAPA, the arguments are divided into three groups separated
                  by a semicolon ;. In LON-CAPA, the separation is done by using [] brackets or
                  using an array @a. Note the backslash (\) before the arguments in the
                  second and third groups.</td>
    </tr>


    <tr>
             <td valign="top">rmap(seed;a,b,c,d;w,x,y,z)</td>
             <td valign="top">Option 1 - &amp;rmap($seed,[\$w,\$x,\$y,\$z],[$a,$b,$c,$d]) or <br> 
                  Option 2 - &amp;rmap($seed,\@rmappedArray,[$a,$b,$c,$d]) <br>
                  Option 3 - @rmapped_array = &amp;rmap($seed,[$a,$b,$c,$d]) <br>
                  Option 4 - ($w,$x,$y,$z) = &amp;rmap($seed,\@a) <br>
                  where $a='A'<br>
                        $b='B'<br>
                        $c='B'<br>
                        $d='B'<br>
                        $w, $x, $y, and $z are variables</td>
             <td valign="top">The rmap functions does the reverse action of map if the same seed
                  is used in calling map and rmap. </td>
             <td valign="top">In CAPA, the arguments are divided into
             three groups separated by a semicolon ;. In LON-CAPA, the
             separation is done by using [] brackets (with create an
             unamed vector reference) or using an array @a. Note the
             backslash (\) before the arguments in the second and
             third groups (Which cause Perl to send to variable
             locations rather than the variable values, similar to a C
             pointer).</td>
    </tr>
      
     <tr>
             <td valign="top">NOT IMPLEMENTED IN CAPA</td>
             <td valign="top">$a=&amp;xmlparse($string) </td>
             <td valign="top">Runs the internal parser over the
	  argument parsing for display. <b>Warning</b> This will
	  result in different strings in different targets. Don't use
	  the results of this function as an answer.</td>
             <td valign="top">New to LON-CAPA</td>
    </tr>

    <tr>
             <td valign="top">tex(a,b), tex("a","b")</td>
             <td valign="top">&amp;tex($a,$b), &amp;tex("a","b")</td>
             <td valign="top">Returns a if the output mode is in tex otherwise
                  returns b</td>
             <td valign="top">&nbsp;</td>
    </tr>

    <tr>
             <td valign="top">var_in_tex(a)</td>
             <td valign="top">&amp;var_in_tex($a)</td>
             <td valign="top">Equivalent to tex("a","")</td>
             <td valign="top">&nbsp;</td>
    </tr>

    <tr>
             <td valign="top">to_string(x), to_string(x,y)</td>
             <td valign="top">&amp;to_string($x), &amp;to_string($x,$y)</td>
             <td valign="top">If x is an integer, returns a string. If x is real
                than the output is a string with format given by y. For example, if x =
                12.3456, &amp;to_string(x,".3F") = 12.345 and &amp;to_string(x,".3E") =
                1.234E+01.</td>
             <td valign="top">&nbsp;</td>
    </tr>

    <tr>
             <td valign="top">capa_id(), class(), section(), set(), problem()</td>
             <td valign="top">&amp;class(), &amp;section()</td>
             <td valign="top">Returns null string, class descriptive name, section
                    number, set number and null string.</td>
             <td valign="top">capa_id(), set() and problem() are no longer used.
                    Currently, they return a null value.</td>
    </tr>

    <tr>
             <td valign="top">name(), student_number()</td>
             <td valign="top">&amp;name(), &amp;student_number()</td>
             <td valign="top">Return the full name in the following format: lastname,
                    firstname initial. Student_number returns the student 9-alphanumeric string.
                    If undefined, the functions return null.</td>
             <td valign="top">&nbsp;</td>
    </tr>

    <tr>
             <td valign="top">open_date(), due_date(), answer_date()</td>
             <td valign="top">&amp;open_date(), &amp;due_date(), &amp;answer_date()</td>
             <td valign="top">Problem open date, due date and answer date. The
                    time is also included in 24-hr format.</td>
             <td valign="top">Output format for time is changed slightly. If pass
                    noon, it displays ..pm else it displays ..am. So 23:59 is displayed as
                    11:59 pm.</td>
    </tr>

    <tr>
             <td valign="top">get_seed(), set_seed()</td>
             <td valign="top">Not implemented</td>
             <td valign="top">Get and set the random seed.</td>
             <td valign="top">&nbsp;</td>
    </tr>

    <tr>
             <td valign="top">sub_string(a,b,c)</td>
             <td valign="top">&amp;sub_string($a,$b,$c) <br>perl&nbsp; substr function. 
                 However, note the differences</td>
             <td valign="top">Retrieve a portion of string a starting from b and
                    length c. For example,&nbsp; $a = "Welcome to LON-CAPA"; 
                    $result=&amp;sub_string($a,4,4); then $result is "come"</td>
             <td valign="top">Perl intrinsic function, substr(string,b,c) starts
                    counting from 0 (as opposed to 1). In the example to the left, substr($a,4,4)
                    returns "ome ".</td>
    </tr>

    <tr>
             <td valign="top">array[xx]</td>
             <td valign="top">@arrayname <br>Array is intrinsic in perl. 
                 To access a specific element use $arrayname[$n] where $n 
                 is the $n+1 element since the array count starts from 0</td>
             <td valign="top">"xx" can be a variable or a calculation.</td>
             <td valign="top">In LON-CAPA, an array is defined by @arrayname.
                  It is not necessary to specify the dimension of the array.&nbsp;</td>
    </tr>

    <tr>
             <td valign="top">array_moments(B,A)</td>
             <td valign="top">@B=&amp;array_moments(@A)</td>
             <td valign="top">Evaluates the moments of an array A and place the
                  result in array B[i] where i = 0 to 4. The contents of B are as follows:
                  B[0] = number of elements, B[1] = mean, B[2] = variance, B[3] = skewness
                  and B[4] = kurtosis.</td>
             <td valign="top">In CAPA, the moments are passed as an array in the first argument whereas
                  in LON-CAPA, the array containing the moments are set equal to the function.</td>
    </tr>

    <tr>
             <td valign="top">array_max(Name), array_min(Name)</td>
             <td valign="top">&amp;min(@Name), &amp;max(@Name)</td>
             <td valign="top">In LON-CAPA to find the maximum value of an array, use
                   &amp;max(@arrayname)&nbsp; and to find the minimum value of an array, use
                   &amp;min(@arrayname)</td>
             <td valign="top">Combined with the min and max functions defined
                earlier.</td>
    </tr>

    <tr>
             <td valign="top">init_array(Name)</td>
             <td valign="top">undef @name</td>
             <td valign="top">To destroy the contents of an array, use</td>
             <td valign="top">Use perl intrinsic undef function.</td>
    </tr>
     <tr>
             <td valign="top">random_normal (return_array,item_cnt,seed,av,std_dev)</td>
             <td valign="top">@return_array=&random_normal ($item_cnt,$seed,$av,$std_dev)</td>
             <td valign="top">Generate $item_cnt deviates of normal distribution of average $av and
                        standard deviation $std_dev. The distribution is generated from seed $seed</td>
             <td valign="top">In CAPA the results are passed as the first argument whereas in LON-CAPA 
                        the results are set equal to the function.</td>
    </tr>
     <tr>
             <td valign="top">random_beta (return_array,item_cnt,seed,aa,bb)</td>
             <td valign="top">@return_array=&random_beta ($item_cnt,$seed,$aa,$bb) <br>
                        NOTE: Both $aa and $bb MUST be greater than 1.0E-37.</td>
             <td valign="top">Generate $item_cnt deviates of beta distribution. 
                        The density of beta is:
                        X^($aa-1) *(1-X)^($bb-1) /B($aa,$bb) for 0&lt;X&lt;1.</td>
             <td valign="top">In CAPA the results are passed as the first argument whereas in LON-CAPA 
                        the results are set equal to the function.</td>
    </tr>
     <tr>
             <td valign="top">random_gamma (return_array,item_cnt,seed,a,r)</td>
             <td valign="top">@return_array=&random_gamma ($item_cnt,$seed,$a,$r) <br>
                        NOTE: Both $a and $r MUST be positive.</td>
             <td valign="top">Generate $item_cnt deviates of gamma distribution. 
                        The density of gamma is:
                        ($a**$r)/gamma($r) * X**($r-1) * exp(-$a*X).</td>
             <td valign="top">In CAPA the results are passed as the first argument whereas in LON-CAPA 
                        the results are set equal to the function.</td>
    </tr>
     <tr>
             <td valign="top">random_exponential (return_array,item_cnt,seed,av)</td>
             <td valign="top">@return_array=&random_exponential ($item_cnt,$seed,$av) <br>
                        NOTE: $av MUST be non-negative.</td>
             <td valign="top">Generate $item_cnt deviates of exponential distribution. </td>
             <td valign="top">In CAPA the results are passed as the first argument whereas in LON-CAPA 
                        the results are set equal to the function.</td>
    </tr>
     <tr>
             <td valign="top">random_poisson (return_array,item_cnt,seed,mu)</td>
             <td valign="top">@return_array=&random_poisson ($item_cnt,$seed,$mu) <br>
                        NOTE: $mu MUST be non-negative.</td>
             <td valign="top">Generate $item_cnt deviates of poisson distribution. </td>
             <td valign="top">In CAPA the results are passed as the first argument whereas in LON-CAPA 
                        the results are set equal to the function.</td>
    </tr>
     <tr>
             <td valign="top">random_chi (return_array,item_cnt,seed,df)</td>
             <td valign="top">@return_array=&random_chi ($item_cnt,$seed,$df) <br>
                        NOTE: $df MUST be positive.</td>
             <td valign="top">Generate $item_cnt deviates of chi_square distribution with $df 
                        degrees of freedom. </td>
             <td valign="top">In CAPA the results are passed as the first argument whereas in LON-CAPA 
                        the results are set equal to the function.</td>
    </tr>
     <tr>
             <td valign="top">random_noncentral_chi (return_array,item_cnt,seed,df,nonc)</td>
             <td valign="top">@return_array=&random_noncentral_chi ($item_cnt,$seed,$df,$nonc) <br>
                        NOTE: $df MUST be at least 1 and $nonc MUST be non-negative.</td>
             <td valign="top">Generate $item_cnt deviates of noncentral_chi_square 
                        distribution with $df 
                        degrees of freedom and noncentrality parameter $nonc. </td>
             <td valign="top">In CAPA the results are passed as the first argument whereas in LON-CAPA 
                        the results are set equal to the function.</td>
    </tr>
     <tr>
             <td valign="top">NOT IMPLEMENTED IN CAPA</td>
             <td valign="top">@return_array=&random_f ($item_cnt,$seed,$dfn,$dfd) <br>
                        NOTE: Both $dfn and $dfd MUST be positive.</td>
             <td valign="top">Generate $item_cnt deviates of F (variance ratio) distribution with  
                        degrees of freedom $dfn (numerator) and $dfd (denominator). </td>
             <td valign="top">New to LON-CAPA</td>
    </tr>
     <tr>
             <td valign="top">NOT IMPLEMENTED IN CAPA</td>
             <td valign="top">@return_array=&random_noncentral_f ($item_cnt,$seed,$dfn,$dfd,$nonc) <br>
                        NOTE: $dfn must be at least 1, $dfd MUST be positive, and $nonc must
                        be non-negative.</td>
             <td valign="top">Generate $item_cnt deviates of noncentral F (variance ratio) 
                        distribution with degrees of freedom $dfn (numerator) and $dfd (denominator).
                        $nonc is the noncentrality parameter. </td>
             <td valign="top">New to LON-CAPA</td>
    </tr>
     <tr>
             <td valign="top">NOT DOCUMENTED IN CAPA</td>
             <td valign="top">@return_array=&random_multivariate_normal ($item_cnt,$seed,\@mean,\@covar) <br>
                        NOTE: @mean should be of length p array of real numbers. @covar should be a length
                        p array of references to length p arrays of real numbers (i.e. a p by p matrix.</td>
             <td valign="top">Generate $item_cnt deviates of multivariate_normal distribution with  
                        mean vector @mean and variance-covariance matrix. </td>
             <td valign="top">Note the backslash before the @mean and @covar arrays.</td>
    </tr>
     <tr>
             <td valign="top">NOT IMPLEMENTED IN CAPA</td>
             <td valign="top">@return_array=&random_multinomial ($item_cnt,$seed,@p) <br>
                        NOTE: $item_cnt is rounded with int() and the result must be non-negative. 
                        The number of elements in @p must be at least 2.</td>
             <td valign="top">Returns single observation from multinomial distribution with  
                        $item_cnt events classified into as many categories as the length of @p.
                        The probability of an event being classified into category i is given by 
                        ith element of @p. The observation is an array with length equal to @p, so
                        when called in a scalar context it returns the length of @p. The sum of the
                        elements of the obervation is equal to $item_cnt.</td>
             <td valign="top">New to LON-CAPA</td>
    </tr>
     <tr>
             <td valign="top">NOT IMPLEMENTED IN CAPA</td>
             <td valign="top">@return_array=&random_permutation ($seed,@array) </td>
             <td valign="top">Returns @array randomly permuted.</td>
             <td valign="top">New to LON-CAPA</td>
    </tr>
     <tr>
             <td valign="top">NOT IMPLEMENTED IN CAPA</td>
             <td valign="top">@return_array=&random_uniform ($item_cnt,$seed,$low,$high) <br>
                        NOTE: $low must be less than or equal to $high.</td>
             <td valign="top">Generate $item_cnt deviates from a uniform distribution. </td>
             <td valign="top">New to LON-CAPA</td>
    </tr>
     <tr>
             <td valign="top">NOT IMPLEMENTED IN CAPA</td>
             <td valign="top">@return_array=&random_uniform_integer ($item_cnt,$seed,$low,$high) <br>
                        NOTE: $low and $high are both passed through int().
                              $low must be less than or equal to $high.</td>
             <td valign="top">Generate $item_cnt deviates from a uniform distribution in integers. </td>
             <td valign="top">New to LON-CAPA</td>
    </tr>
     <tr>
             <td valign="top">NOT IMPLEMENTED IN CAPA</td>
             <td valign="top">@return_array=&random_binomial ($item_cnt,$seed,$nt,$p) <br>
                        NOTE: $nt is rounded using int() and the result must be non-negative. 
                              $p must be between 0 and 1 inclusive.</td>
             <td valign="top">Generate $item_cnt deviates from the binomial distribution with
                        $nt trials and the probabilty of an event in each trial is $p. </td>
             <td valign="top">New to LON-CAPA</td>
    </tr>
     <tr>
             <td valign="top">NOT IMPLEMENTED IN CAPA</td>
             <td valign="top">@return_array=&random_negative_binomial ($item_cnt,$seed,$ne,$p) <br>
                        NOTE: $ne is rounded using int() and the result must be positive. 
                              $p must be between 0 and 1 exclusive.</td>
             <td valign="top">Generate an array of $item_cnt outcomes generated from 
                        negative binomial distribution with
                        $ne events and the probabilty of an event in each trial is $p. </td>
             <td valign="top">New to LON-CAPA</td>
    </tr>
 </table>
    <p>
      We also support these functions from Math::Cephes
<pre>
 bdtr:  Binomial distribution
 bdtrc:  Complemented binomial distribution
 bdtri:  Inverse binomial distribution
 btdtr:  Beta distribution
 chdtr:  Chi-square distribution
 chdtrc:  Complemented Chi-square distribution
 chdtri:  Inverse of complemented Chi-square distribution
 fdtr:  F distribution
 fdtrc:  Complemented F distribution
 fdtri:  Inverse of complemented F distribution
 gdtr:  Gamma distribution function
 gdtrc:  Complemented gamma distribution function
 nbdtr:  Negative binomial distribution
 nbdtrc:  Complemented negative binomial distribution
 nbdtri:  Functional inverse of negative binomial distribution
 ndtr:  Normal distribution function
 ndtri:  Inverse of Normal distribution function
 pdtr:  Poisson distribution
 pdtrc:  Complemented poisson distribution
 pdtri:  Inverse Poisson distribution
 stdtr:  Student's t distribution
 stdtri:  Functional inverse of Student's t distribution
</pre>
Plase see <a href="http://search.cpan.org/author/RKOBES/Math-Cephes-0.36/lib/Math/Cephes.pod">Math::Cephes</a> for more information

    </p>
<!-- insertion ends -->

    <h2>&lt;script&gt; Variables</h2>
    <ul>
      <li>
	$external::target - set to the current target the xml parser
	is parsing for
      </li>
      <li>
	$external::part - set to the <i>id</i> of the current problem
	&lt;part&gt;; zero if there are no &lt;part&gt;
      </li>
      <li>
	$external::gradestatus - set to the value of the current
	resource.partid.solved value
      </li>
      <li>
	$external::datestatus - set to the current status of the clock
	either CLOSED, CAN_ANSWER, CANNOT_ANSWER, SHOW_ANSWER, or UNCHECKEDOUT
      </li>
      <li>
	$external::randomseed - set to the number that was used to
	seed the random number generator
      </li>
      <li>$pi - set to PI </li>
      <li>$rad2deg - converts radians to degrees </li>
      <li>$deg2rad - converts degrees to radians </li>
    </ul>

    <h2> Form internals </h2>
    <p> Form elements used for homework editing/response </p>
    <p> the form is named lonhomework </p>
    <h3> Viewing a problem (either CSTR or RES space)</h3>
    <ul>
      <li>
	grade_target, grade_username, grade_domain, grade_symb - the
	vaules take precedence over the the normal env settings of
	these, use &Apache::lonxml::whichuser() to get back the
	correct vaues of the items
      </li>
      <li>
	HWVAL_response:number - the name of the input elements for each response. The response is the response's ID, and the :number part exists only for response with multiple foils, and is a unique number in order of the submission
      </li>
      <li>
	changerandseed - the 'Change' button, only exists right after
	the Change button is clicked
      </li>
      <li>
	problemmode - in CSTR, it is either 'View','Edit','EditXML' or
	'Analyze' depending on the desired view
      </li>
      <li>
	rndseed - the currently requested random seed
      </li>
      <li>
	showallfoils - if it exists, and we are in CSTR space, the
	problem should ignore &lt;conceptgroup&gt; and the response's
	max setting and show all possible foils
      </li>
      <li>
	submit - the name of the Submit button
      </li>
      <li>
	submitted - a hidden form parameter that can be used to tell
	if the student has submitted answers or not, if it is set,
	there should be answers to grade.
      </li>
    </ul>
    <h3> Editing a problem (Edit mode)</h3>
    <p> tagdepth referes to the current value of the xmlparsers tagdepth couter ($Apache::lonxml::currentdepth)</p>
<p> Note: the file edit.pm has many helper functions for creating the standard elements for editing a tag and it's attributes, all of those functions follow these conventions </p>
    <ul>
      <li>
	tagdepth_argname - I.E. 1_3.max, a parameter editing value,
	max is the name of the parameter and it is for the third tag
	inside the first tag
      </li>
      <li>
	delete_tagdepth - if set to yes, delete tag tagdepth and all
	tags inside of it
      </li>
      <li>
	homework_edit_tagdepth - used by both &Apache::edit::editline
	and &Apache::edit::editfield for the &lt;textarea&gt; and
	&lt;input&gt; form elements they create
      </li>
      <li>
	insert_tagdepth - used to request an tag insert, it is set to
	the id number of the requested tag in the
	%Apache::lonxml::insertlist
    </ul>
    <hr>
    <address><a href="mailto:albertel@marvin.lite.msu.edu">Guy Albertelli</a></address>
<!-- Created: Thu May 17 15:05:35 EDT 2001 -->
<!-- hhmts start -->
Last modified: Wed Nov 13 17:33:43 EST 2002
<!-- hhmts end -->
  </body>
</html>

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>