websh/quickref/context_handling.html (344 lines of code) (raw):

<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Context handling</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.1"><link rel="home" href="index.html" title="Websh Reference 3.6.0b5"><link rel="up" href="index.html" title="Websh Reference 3.6.0b5"><link rel="prev" href="logging.html" title="Logging"><link rel="next" href="file_handling_and_file_IO.html" title="File handling and file I/O"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Context handling</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="logging.html">Prev</a>�</td><th width="60%" align="center">�</th><td width="20%" align="right">�<a accesskey="n" href="file_handling_and_file_IO.html">Next</a></td></tr></table><hr></div><div class="section" title="Context handling"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="context_handling"></a>Context handling</h2></div></div></div><div class="section" title="web::context"><div class="titlepage"><div><div><h3 class="title"><a name="web::context"></a><span style="font-family:monospace"><span class="command"><strong>web::context</strong></span></span></h3></div></div></div><p style="width:90%"> Creation </p><div class="cmdsynopsis"><span style="background:#bbbbff"><span style="font-weight:bold"><code class="command">web::context</code></span> <em class="replaceable"><code>name</code></em></span></div><p style="width:90%"> Creates a namespace <tt>name</tt> with the following commands: </p><div class="cmdsynopsis"><span style="background:#bbbbff"><span style="font-weight:bold"><code class="command"><em class="replaceable"><code>name</code></em>::subcommand</code></span> <em class="replaceable"><code>args</code></em></span></div><p style="width:90%"> Subcommands are: <tt>cset</tt>, <tt>cappend</tt>, <tt>clappend</tt>, <tt>cget</tt>, <tt>cexists</tt>, <tt>cunset</tt>, <tt>carray</tt>, <tt>cnames</tt>, <tt>delete</tt>, and <tt>dump</tt>. Manages data of the context. The subcommands behave like the Tcl commands with similar names. </p><div class="variablelist"><dl><dt><span style="background:#bbbbff"><span class="term"><span style="font-family:monospace"><span class="command"><strong><em class="replaceable"><code>name</code></em>::cset</strong></span></span> <tt><em class="replaceable"><code>key</code></em></tt> <tt><em class="replaceable"><code>value</code></em></tt></span></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:6"> Set <tt>key</tt> to <tt>value</tt>. </div></div></dd><dt><span style="background:#bbbbff"><span class="term"><span style="font-family:monospace"><span class="command"><strong><em class="replaceable"><code>name</code></em>::cappend</strong></span></span> <tt><em class="replaceable"><code>key</code></em></tt> <tt><em class="replaceable"><code>value</code></em></tt> ?<span class="optional"><tt><em class="replaceable"><code>value</code></em></tt></span>? ?<span class="optional"><tt><em class="replaceable"><code>...</code></em></tt></span>?</span></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:6"> Appends <tt>value</tt> to existing value for <tt>key</tt>. </div></div></dd><dt><span style="background:#bbbbff"><span class="term"><span style="font-family:monospace"><span class="command"><strong><em class="replaceable"><code>name</code></em>::clappend</strong></span></span> <tt><em class="replaceable"><code>key</code></em></tt> <tt><em class="replaceable"><code>value</code></em></tt> ?<span class="optional"><tt><em class="replaceable"><code>value</code></em></tt></span>? ?<span class="optional"><tt><em class="replaceable"><code>...</code></em></tt></span>?</span></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:6"> Appends <tt>value</tt> to existing list of values for <tt>key</tt>. </div></div></dd><dt><span style="background:#bbbbff"><span class="term"><span style="font-family:monospace"><span class="command"><strong><em class="replaceable"><code>name</code></em>::cget</strong></span></span> <tt><em class="replaceable"><code>key</code></em></tt> ?<span class="optional"><tt><em class="replaceable"><code>default</code></em></tt></span>?</span></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:6"> Accesses the value for key <tt>key</tt>, or returns <tt>default</tt> if <tt>key</tt> does not exist in the context. If <tt>default</tt> is omitted, an empty string is returned if <tt>key</tt> is unknown. </div></div></dd><dt><span style="background:#bbbbff"><span class="term"><span style="font-family:monospace"><span class="command"><strong><em class="replaceable"><code>name</code></em>::cexists</strong></span></span> <tt><em class="replaceable"><code>key</code></em></tt></span></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:6"> Returns true (1) if <tt>key</tt> exists in context, false (0) otherwise. </div></div></dd><dt><span style="background:#bbbbff"><span class="term"><span style="font-family:monospace"><span class="command"><strong><em class="replaceable"><code>name</code></em>::cunset</strong></span></span> <tt><em class="replaceable"><code>key</code></em></tt></span></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:6"> Removes <tt>key</tt> from context. </div></div></dd><dt><span style="background:#bbbbff"><span class="term"><span style="font-family:monospace"><span class="command"><strong><em class="replaceable"><code>name</code></em>::carray</strong></span></span> <tt><em class="replaceable"><code>option</code></em></tt> <tt><em class="replaceable"><code>key</code></em></tt> <tt><em class="replaceable"><code>arg</code></em></tt></span></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:6"> Array manipulation as known from the Tcl command <span class="emphasis"><em>array</em></span>. </div></div></dd><dt><span style="background:#bbbbff"><span class="term"><span style="font-family:monospace"><span class="command"><strong><em class="replaceable"><code>name</code></em>::cnames</strong></span></span> ?<span class="optional"><tt><em class="replaceable"><code>pattern</code></em></tt></span>?</span></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:6"> Lists existing keys of context matching <tt>pattern</tt>. </div></div></dd><dt><span style="background:#bbbbff"><span class="term"><span style="font-family:monospace"><span class="command"><strong><em class="replaceable"><code>name</code></em>::delete</strong></span></span></span></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:6"> Deletes the context (same as <span style="font-family:monospace"><span class="command"><strong>namespace delete <em class="replaceable"><code>name</code></em></strong></span></span>) </div></div></dd><dt><span style="background:#bbbbff"><span class="term"><span style="font-family:monospace"><span class="command"><strong><em class="replaceable"><code>name</code></em>::dump</strong></span></span></span></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:6"> Serializes context in a "source"-able format. </div></div></dd></dl></div><p style="width:90%"> </p><div class="example"><a name="id2739577"></a><p class="title"><b>Example�12.�<span style="font-family:monospace"><span class="command">web::context</span></span></b></p><div class="example-contents"><pre style="background:#bbffbb ; width:75%" class="programlisting"> % web::context sc % sc::cset lang FR FR % # ... some code ... % set lang [sc::cget lang EN] FR % </pre></div></div><p style="width:90%"><br class="example-break"> </p></div><div class="section" title="web::filecontext"><div class="titlepage"><div><div><h3 class="title"><a name="web::filecontext"></a><span style="font-family:monospace"><span class="command"><strong>web::filecontext</strong></span></span></h3></div></div></div><p style="width:90%"> Creation: </p><div class="cmdsynopsis"><span style="background:#bbbbff"><span style="font-weight:bold"><code class="command">web::filecontext</code></span> <em class="replaceable"><code>name</code></em> ?<em class="replaceable"><code>options</code></em>?</span></div><p style="width:90%"> Options are: <tt>-perm</tt>, <tt>-path</tt>, <tt>-crypt</tt>, <tt>-idgen</tt>, and <tt>-attachto</tt>. Creates a namespace <tt>name</tt> to manage file-based context data: </p><div class="cmdsynopsis"><span style="background:#bbbbff"><span style="font-weight:bold"><code class="command"><em class="replaceable"><code>name</code></em>::subcommand</code></span> <em class="replaceable"><code>args</code></em></span></div><p style="width:90%"> Subcommands are: <tt>cset</tt>, <tt>cappend</tt>, <tt>clappend</tt>, <tt>cget</tt>, <tt>cexists</tt>, <tt>cunset</tt>, <tt>carray</tt>, <tt>cnames</tt>, <tt>init</tt>, <tt>new</tt>, <tt>commit</tt>, <tt>invalidate</tt>, and <tt>id</tt>. Manages file-based context data. The subcommands have their familiar behaviour of the Tcl commands with similar names. Please refer to the section <a class="link" href="context_handling.html" title="Context handling">context management</a> for a description of the commands <tt>cset</tt>, <tt>cappend</tt>, <tt>clappend</tt>, <tt>cget</tt>, <tt>cexists</tt>, <tt>cunset</tt>, <tt>carray</tt>, and <tt>cnames</tt>. </p><div class="variablelist"><dl><dt><span style="background:#bbbbff"><span class="term"> <span style="font-family:monospace"><span class="command"><strong><em class="replaceable"><code>name</code></em>::init</strong></span></span> ?<span class="optional"><tt><em class="replaceable"><code>id</code></em></tt></span>? </span></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:6"> Loads an existing session context with id <tt>id</tt>, or creates a new one, if possible. Automation depends on the settings of the actual context manager settings, see below.</div><div style="margin-bottom:6"> If you specify an <tt>id</tt>, you must decide when to create a new file and when to use the old one, if any, by yourself. </div></div></dd><dt><span style="background:#bbbbff"><span class="term"><span style="font-family:monospace"><span class="command"><strong><em class="replaceable"><code>name</code></em>::new</strong></span></span> ?<span class="optional"><tt><em class="replaceable"><code>id</code></em></tt></span>?</span></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:6"> Creates a new session context. Automation depends on the settings of the actual context manager settings, see below. </div></div></dd><dt><span style="background:#bbbbff"><span class="term"><span style="font-family:monospace"><span class="command"><strong><em class="replaceable"><code>name</code></em>::commit</strong></span></span></span></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:6"> Makes session context persistent. </div></div></dd><dt><span style="background:#bbbbff"><span class="term"><span style="font-family:monospace"><span class="command"><strong><em class="replaceable"><code>name</code></em>::id</strong></span></span></span></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:6"> Returns id of session. </div></div></dd><dt><span style="background:#bbbbff"><span class="term"><span style="font-family:monospace"><span class="command"><strong><em class="replaceable"><code>name</code></em>::invalidate</strong></span></span></span></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:6"> Deletes session in memory and on file system. </div></div></dd></dl></div><p style="width:90%"> Options: </p><div class="cmdsynopsis"><span style="background:#bbbbff"><span style="font-weight:bold"><code class="command">web::filecontext</code></span> <em class="replaceable"><code>name</code></em> -perm <em class="replaceable"><code>perm</code></em></span></div><p style="width:90%"> Sets the file permissions of the session context files <tt>perm</tt> is an unix-like octal value like 0644. If not specified, files are created with the permissions defined in <span style="font-family:monospace"><span class="command"><strong>web::config filepermissions</strong></span></span>, which again defaults to 0644. </p><div class="variablelist"><dl><dt><span style="background:#bbbbff"><span class="term"><span style="font-family:monospace"><span class="command"><strong>web::filecontext</strong></span></span> <tt><em class="replaceable"><code>name</code></em></tt> <tt>-path</tt> <tt><em class="replaceable"><code>path</code></em></tt> </span></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:6"> Specifies where to store session context files and how to name them. Suppose that the session id is 99. <span class="emphasis"><em>-path [file join .. data s%d.dat]</em></span> would then cause filecontext to save the session context as <code class="literal">../data/s99.dat</code>. </div></div></dd><dt><span style="background:#bbbbff"><span class="term"><span style="font-family:monospace"><span class="command"><strong>web::filecontext</strong></span></span> <tt><em class="replaceable"><code>name</code></em></tt> <tt>-crypt</tt> <tt>boolean</tt></span></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:6"> Sets crypting of session context on or off. Default: on. </div></div></dd><dt><span style="background:#bbbbff"><span class="term"><span style="font-family:monospace"><span class="command"><strong>web::filecontext</strong></span></span> <tt><em class="replaceable"><code>name</code></em></tt> <tt>-idgen</tt> <tt><em class="replaceable"><code>idgen</code></em></tt></span></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:6"> Sets command <tt>idgen</tt> to find a new session id. See doc of <span style="font-family:monospace"><span class="command"><strong>web::filecounter</strong></span></span> below for an implementation provided by Websh. </div><div style="margin-bottom:6"> <tt>idgen</tt> is used in case that no <tt>id</tt> argument has been passed to <tt>init</tt> or <tt>new</tt>. </div></div></dd><dt><span style="background:#bbbbff"><span class="term"><span style="font-family:monospace"><span class="command"><strong>web::filecontext</strong></span></span> <tt><em class="replaceable"><code>name</code></em></tt> <tt>-attachto</tt> <tt><em class="replaceable"><code>idparam</code></em></tt> </span></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:6"> Causes <span style="font-family:monospace"><span class="command"><strong><em class="replaceable"><code>name</code></em>::init</strong></span></span> to initialize with the id given in the querystring parameter <tt>idparam</tt>. (This is one important reason why the querystring should be encrypted). After <span style="font-family:monospace"><span class="command"><strong>web::dispatch</strong></span></span> has parsed the querystring, <span style="font-family:monospace"><span class="command"><strong>web::param</strong></span></span> will report the current session id in <tt>idparam</tt>, if any. <span class="emphasis"><em>Note</em></span> that you can maintain several sessions in parallel, and attach every session to its own <tt>idparam</tt>. </div><div style="margin-bottom:6"> Using <span class="emphasis"><em><span style="font-family:monospace"><span class="command"><strong>web::dispatch -track</strong></span></span></em></span> further automates the passing of session ids from request to request. </div></div></dd></dl></div><p style="width:90%"> <span class="emphasis"><em>Note:</em></span> Whenever you create a new file-based context, the context is initialized and you loose whatever information that you might have stored in the context before you initialized it as a file-based session context. </p></div><div class="section" title="web::cookiecontext"><div class="titlepage"><div><div><h3 class="title"><a name="web::cookiecontext"></a><span style="font-family:monospace"><span class="command"><strong>web::cookiecontext</strong></span></span></h3></div></div></div><p style="width:90%"> Creation: </p><div class="cmdsynopsis"><span style="background:#bbbbff"><span style="font-weight:bold"><code class="command">web::cookiecontext</code></span> <em class="replaceable"><code>name</code></em> ?<em class="replaceable"><code>options</code></em>?</span></div><p style="width:90%"> Options are: <tt>-expires</tt>, <tt>-path</tt>, <tt>-domain</tt>, <tt>-secure</tt>, <tt>-crypt</tt>, and <tt>-channel</tt>. Creates a namespace <tt>name</tt> to manage cookie-based context data: </p><div class="variablelist"><dl><dt><span style="background:#bbbbff"><span class="term"><span style="font-family:monospace"><span class="command"><strong><em class="replaceable"><code>name</code></em>::subcommand</strong></span></span> <tt><em class="replaceable"><code>args</code></em></tt></span></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:6"> Subcommands are: <tt>cset</tt>, <tt>cappend</tt>, <tt>clappend</tt>, <tt>cget</tt>, <tt>cexists</tt>, <tt>cunset</tt>, <tt>carray</tt>, <tt>cnames</tt>, <tt>init</tt>, <tt>new</tt>, <tt>commit</tt>, <tt>invalidate</tt>, and <tt>id</tt>. </div></div></dd></dl></div><p style="width:90%"> </p><div class="variablelist"><dl><dt><span style="background:#bbbbff"><span class="term"><span style="font-family:monospace"><span class="command"><strong><em class="replaceable"><code>name</code></em>::init</strong></span></span> ?<span class="optional"><tt><em class="replaceable"><code>id</code></em></tt></span>?</span></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:6"> Loads an existing session context (cookie must have been sent by the client). </div></div></dd><dt><span style="background:#bbbbff"><span class="term"><span style="font-family:monospace"><span class="command"><strong><em class="replaceable"><code>name</code></em>::new</strong></span></span> ?<span class="optional"><tt><em class="replaceable"><code>id</code></em></tt></span>?</span></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:6"> Creates a new session context. </div></div></dd><dt><span style="background:#bbbbff"><span class="term"><span style="font-family:monospace"><span class="command"><strong><em class="replaceable"><code>name</code></em>::commit</strong></span></span></span></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:6"> Sends a cookie (if no output to the page has been sent yet). </div></div></dd><dt><span style="background:#bbbbff"><span class="term"><span style="font-family:monospace"><span class="command"><strong><em class="replaceable"><code>name</code></em>::id</strong></span></span></span></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:6"> Returns id of session. </div></div></dd><dt><span style="background:#bbbbff"><span class="term"><span style="font-family:monospace"><span class="command"><strong><em class="replaceable"><code>name</code></em>::invalidate</strong></span></span></span></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:6"> Deletes session in memory and on client side. </div></div></dd></dl></div><p style="width:90%"> Options: </p><div class="variablelist"><dl><dt><span style="background:#bbbbff"><span class="term"><span style="font-family:monospace"><span class="command"><strong>web::cookiecontext</strong></span></span> <tt><em class="replaceable"><code>name</code></em></tt> <tt>-expires</tt> <tt><em class="replaceable"><code>time</code></em></tt></span></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:6"> Sets the expiration date of the cookie. Possible values for <tt>time</tt> are <span class="emphasis"><em>seconds</em></span> (time in seconds since 1970-01-01) or <span class="emphasis"><em>date-string</em></span> (any time string that Tcl can scan. Note that therefore many relative times, such as <span class="emphasis"><em>24 hours</em></span>, <span class="emphasis"><em>week</em></span>, <span class="emphasis"><em>2 weeks</em></span>, <span class="emphasis"><em>tomorrow</em></span>, etc. are possible. Default is <span class="emphasis"><em>now + 24 hours</em></span> (i.e. cookie expires in 24 hours. (Please note that the behavior of some of these relative time specifiers changed from Tcl8.4 to Tcl8.5.) Use <span class="emphasis"><em>-expires ""</em></span> to send a cookie without an expires parameter. </div></div></dd><dt><span style="background:#bbbbff"><span class="term"><span style="font-family:monospace"><span class="command"><strong>web::cookiecontext</strong></span></span> <tt><em class="replaceable"><code>name</code></em></tt> <tt>-path</tt> <tt><em class="replaceable"><code>path</code></em></tt></span></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:6"> Sets the <tt>path</tt> property of the cookie. </div></div></dd><dt><span style="background:#bbbbff"><span class="term"><span style="font-family:monospace"><span class="command"><strong>web::cookiecontext</strong></span></span> <tt><em class="replaceable"><code>name</code></em></tt> <tt>-domain</tt> <tt><em class="replaceable"><code>domain</code></em></tt></span></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:6"> Sets the <tt>domain</tt> property of the cookie. </div></div></dd><dt><span style="background:#bbbbff"><span class="term"><span style="font-family:monospace"><span class="command"><strong>web::cookiecontext</strong></span></span> <tt><em class="replaceable"><code>name</code></em></tt> <tt>-secure</tt> <tt>boolean</tt></span></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:6"> Sets the <tt>secure</tt> property of the cookie. </div></div></dd><dt><span style="background:#bbbbff"><span class="term"><span style="font-family:monospace"><span class="command"><strong>web::cookiecontext</strong></span></span> <tt><em class="replaceable"><code>name</code></em></tt> <tt>-crypt</tt> <tt>boolean</tt></span></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:6"> Sets crypting of cookie context on or off. Default: on. </div></div></dd><dt><span style="background:#bbbbff"><span class="term"><span style="font-family:monospace"><span class="command"><strong>web::cookiecontext</strong></span></span> <tt><em class="replaceable"><code>name</code></em></tt> <tt>-channel</tt> <tt><em class="replaceable"><code>channelName</code></em></tt></span></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:6"> Sets the response object to send the cookie to (see also <span style="font-family:monospace"><span class="command"><strong>web::response</strong></span></span>). </div></div></dd></dl></div><p style="width:90%"> Because cookies are client-based, in principle no id is needed. Websh uses <tt>id</tt> to name the cookie, however, and the <span style="font-family:monospace"><span class="command"><strong>new</strong></span></span>, <span style="font-family:monospace"><span class="command"><strong>init</strong></span></span>, and <span style="font-family:monospace"><span class="command"><strong>load</strong></span></span> commands still require the <tt>id</tt> argument. (fixme: any changes?) Please note that property settings of a cookie context can only be changed <span class="emphasis"><em>before</em></span> anything is output on the respective channel. </p></div><div class="section" title="web::filecounter"><div class="titlepage"><div><div><h3 class="title"><a name="web::filecounter"></a><span style="font-family:monospace"><span class="command"><strong>web::filecounter</strong></span></span></h3></div></div></div><p style="width:90%"> This is a numeric sequence-number generator which stores its state in a file. Basic usage: </p><div class="variablelist"><dl><dt><span style="background:#bbbbff"><span class="term">Creation:</span></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:6"> <span style="font-family:monospace"><span class="command"><strong>web::filecounter</strong></span></span> <tt><em class="replaceable"><code>name</code></em></tt> <tt>-filename</tt> <tt><em class="replaceable"><code>fname</code></em></tt> ?<span class="optional"><tt><em class="replaceable"><code>options</code></em></tt></span>? </div><div style="margin-bottom:6"> Options are: <tt>-min</tt>, <tt>-max</tt>, <tt>-seed</tt>, <tt>-incr</tt>, <tt>-mask</tt>, <tt>-wrap</tt> </div></div></dd><dt><span style="background:#bbbbff"><span class="term"><tt>-filename</tt> <tt><em class="replaceable"><code>filename</code></em></tt></span></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:6"> Uses <tt>filename</tt> to store the current value (no default). </div></div></dd><dt><span style="background:#bbbbff"><span class="term"><tt>-min</tt> <tt><em class="replaceable"><code>value</code></em></tt></span></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:6"> Uses this value as a minimum at start and after wrap, if wrap is true. Default: 0. </div></div></dd><dt><span style="background:#bbbbff"><span class="term"><tt>-max</tt> <tt><em class="replaceable"><code>value</code></em></tt></span></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:6"> Uses this value as a maximum, if wrap is true. Default: 2147483647. </div></div></dd><dt><span style="background:#bbbbff"><span class="term"><tt>-seed</tt> <tt><em class="replaceable"><code>value</code></em></tt></span></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:6"> Usea this value as a starting point if persistent file does not exist yet. Default: 0. </div></div></dd><dt><span style="background:#bbbbff"><span class="term"><tt>-incr</tt> <tt><em class="replaceable"><code>value</code></em></tt></span></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:6"> Uses this value as an increment for each 'nextval'. Default: 1. </div></div></dd><dt><span style="background:#bbbbff"><span class="term"><tt>-perms</tt> <tt><em class="replaceable"><code>value</code></em></tt></span></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:6"> Sets the permissions on the newly created files. Default is configured in <span style="font-family:monospace"><span class="command"><strong>web::config filepermissions</strong></span></span>, which defaults to 0644. </div></div></dd><dt><span style="background:#bbbbff"><span class="term"><tt>-wrap</tt> <tt>boolean</tt></span></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:6"> Indicates whether this counter should wrap around its values (back to min from max). Default: false. </div></div></dd></dl></div><p style="width:90%"> After creation, a new command <tt>name</tt> is registered with the following subcommands: </p><div class="variablelist"><dl><dt><span style="background:#bbbbff"><span class="term"><tt><em class="replaceable"><code>name</code></em></tt> config</span></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:6"> Returns a flat list of key value pairs with the filecounter's configuration. </div></div></dd><dt><span style="background:#bbbbff"><span class="term"><tt><em class="replaceable"><code>name</code></em></tt> nextval</span></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:6"> Returns the next value. </div></div></dd><dt><span style="background:#bbbbff"><span class="term"><tt><em class="replaceable"><code>name</code></em></tt> curval</span></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:6"> Returns the current value, that is, the value that the last call to "nextval" or "getval" reported (as opposed to the current value in the file). </div></div></dd><dt><span style="background:#bbbbff"><span class="term"><tt><em class="replaceable"><code>name</code></em></tt> getval</span></span></dt><dd><div style="padding:4 ; margin-top:3 ; margin-bottom:3 ; width:75%"><div style="margin-bottom:6"> Returns the current value in the file. (Does not increment file as in "nextval".) </div></div></dd></dl></div><p style="width:90%"> </p><div class="example"><a name="id2741137"></a><p class="title"><b>Example�13.�<span style="font-family:monospace"><span class="command">web::filecounter</span></span></b></p><div class="example-contents"><pre style="background:#bbffbb ; width:75%" class="programlisting"> % web::filecounter fc1 -filename test.dat fc1 % fc1 config file test.dat handle fc1 seed 0 min 0 max 2147483647 incr 1 perms 0644 wrap false curr {not valid} % fc1 curval web::filecounter: no current value available % fc1 nextval 0 % fc1 config file test.dat handle fc1 seed 0 min 0 max 2147483647 incr 1 perms 0644 wrap false curr 0 % fc1 nextval 1 % web::filecounter fc2 -filename test.dat fc2 % fc2 curval web::filecounter: no current value available % fc2 getval 1 % fc2 nextval 2 % fc2 curval 2 % fc1 curval 1 % fc1 nextval 3 % fc2 getval 3 % web::filecounter fc3 -filename othertest.dat -min 1 -max 10 -seed 1 -incr 2 -wrap 1 fc3 % fc3 config file othertest.dat handle fc3 seed 1 min 1 max 10 incr 2 perms 0644 wrap true curr {not valid} % fc3 nextval 1 % fc3 nextval 3 % </pre></div></div><br class="example-break"></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="logging.html">Prev</a>�</td><td width="20%" align="center">�</td><td width="40%" align="right">�<a accesskey="n" href="file_handling_and_file_IO.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Logging�</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">�File handling and file I/O</td></tr></table></div></body></html>