autodoc.git / traditional_manual / chapter_21.html

version» Context lines:

autodoc.git/traditional_manual/chapter_21.html:6:   <dd class='body--doc'><p>Pike has a builtin C-style preprocessor. It works similar to the    ANSI-C preprocessor but has a few extra features. These and the    default set of preprocessor macros are described here.</p>   <p> The preprocessor is usually accessed via    <code>MasterObject-&gt;compile_file()</code> or <code>MasterObject-&gt;compile_string()</code>,    but may be accessed directly by calling <code>cpp()</code>.</p>   </dd>   <dt class='head--doc'>See also</dt>   <dd class='body--doc'><p><code>compile()</code>, <code>cpp()</code>, <code>CompilerEnvironment.CPP</code></p>   </dd></dl></dd></dl><dl><dt><h2 class='header'>Namespace <b class='ms datatype'>predef::</b></h2> - </dt><dd> + </dt><dd><dl class='group--doc'> + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>This is the default namespace and contains lots of global symbols.</p> + </dd></dl>      <hr />   <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Constant</span>   <span class='homogen--name'><b>FUSE_MAJOR_VERSION</b></span><br>   <span class='homogen--type'>Constant</span>   <span class='homogen--name'><b>FUSE_MINOR_VERSION</b></span><br>   </dt>   <dd><p><code><code class='datatype'>constant</code> <code class='constant'>FUSE_MAJOR_VERSION</code></code><br>   <code><code class='datatype'>constant</code> <code class='constant'>FUSE_MINOR_VERSION</code></code></p></dd>
autodoc.git/traditional_manual/chapter_21.html:589:    compiled programs.</p>   </dd>   <dt class='head--doc'>See also</dt>   <dd class='body--doc'><p><code>all_constants()</code></p>   </dd></dl>         <hr />   <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>add_include_path</b></span> + </dt> + <dd><p><code><code class='datatype'>void</code> <b><span class='method'>add_include_path</span>(</b><code class='datatype'>string</code> <code class='argument'>tmp</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Add a directory to search for include files.</p> + <p> This is the same as the command line option <tt>-I</tt>.</p> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p>Note that the added directory will only be searched when using +  &lt; &gt; to quote the included file.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>remove_include_path()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>add_module_path</b></span> + </dt> + <dd><p><code><code class='datatype'>void</code> <b><span class='method'>add_module_path</span>(</b><code class='datatype'>string</code> <code class='argument'>path</code>, <code class='datatype'>string</code>|<code class='datatype'>void</code> <code class='argument'>subpath</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Add a directory to search for modules.</p> + <p> This is the same as the command line option <tt>-M</tt>.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>remove_module_path()</code></p> + </dd> + <dt class='head--doc'><span id='p-path'></span>Parameter <code class='parameter'>path</code></dt> + <dd></dd><dd class='body--doc'><p>a string containing a path to search for Pike modules. May be a +  directory, or a path to a ZIP archive. If a ZIP archive path is +  provided, modules will be loaded from a directory, "modules" within +  the ZIP archive (see the subpath argument).</p> + </dd> + <dt class='head--doc'><span id='p-subpath'></span>Parameter <code class='parameter'>subpath</code></dt> + <dd></dd><dd class='body--doc'><p>if path is a ZIP archive, this argument will determine the path within +  the archive to be searched.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>add_program_path</b></span> + </dt> + <dd><p><code><code class='datatype'>void</code> <b><span class='method'>add_program_path</span>(</b><code class='datatype'>string</code> <code class='argument'>tmp</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Add a directory to search for programs.</p> + <p> This is the same as the command line option <tt>-P</tt>.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>remove_program_path()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span>   <span class='homogen--name'><b>aggregate</b></span>   </dt>   <dd><p><code><code class='datatype'>array</code> <b><span class='method'>aggregate</span>(</b><code class='datatype'>mixed</code> ... <code class='argument'>elements</code><b>)</b></code></p></dd>      <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>Construct an array with the arguments as indices.</p>   <p> This function could be written in Pike as:</p>   <pre><code><span class='type'>array</span> aggregate<span class='delim'>(</span><span class='type'>mixed</span> ... elems<span class='delim'>)</span> <span class='delim'>{</span> <span class='lang'>return</span> elems<span class='delim'>;</span> <span class='delim'>}</span>   </code></pre>   </dd>
autodoc.git/traditional_manual/chapter_21.html:997:   </dd>   <dt class='head--doc'>See also</dt>   <dd class='body--doc'><p><code>compile_string()</code>, <code>compile_file()</code>, <code>cpp()</code>, <code>master()</code>,    <code>CompilationHandler</code>, <code>DefaultCompilerEnvironment</code></p>   </dd></dl>         <hr />   <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>compile</b></span> + </dt> + <dd><p><code><code class='modifier'>protected</code> <code class='datatype'>program</code> <b><span class='method'>compile</span>(</b><code class='datatype'>string</code> <code class='argument'>source</code>, <code class='datatype'>object</code>|<code class='datatype'>void</code> <code class='argument'>handler</code>, <code class='datatype'>int</code>|<code class='datatype'>void</code> <code class='argument'>major</code>, <code class='datatype'>int</code>|<code class='datatype'>void</code> <code class='argument'>minor</code>, <code class='datatype'>program</code>|<code class='datatype'>void</code> <code class='argument'>target</code>, <code class='datatype'>object</code>|<code class='datatype'>void</code> <code class='argument'>placeholder</code><b>)</b></code></p></dd> + </dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>compile_file</b></span> + </dt> + <dd><p><code><code class='datatype'>program</code> <b><span class='method'>compile_file</span>(</b><code class='datatype'>string</code> <code class='argument'>filename</code>, <code class='datatype'>object</code>|<code class='datatype'>void</code> <code class='argument'>handler</code>, <code class='datatype'>void</code>|<code class='datatype'>program</code> <code class='argument'>p</code>, <code class='datatype'>void</code>|<code class='datatype'>object</code> <code class='argument'>o</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Compile the Pike code contained in the file <code>filename</code> into a program.</p> + <p> This function will compile the file <code>filename</code> to a Pike program that can +  later be instantiated. It is the same as doing +  <code class='expr'><code>compile_string</code>(<code>Stdio.read_file</code>(<code>filename</code>),&nbsp;<code>filename</code>)</code>.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>compile()</code>, <code>compile_string()</code>, <code>cpp()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>compile_string</b></span> + </dt> + <dd><p><code><code class='datatype'>program</code> <b><span class='method'>compile_string</span>(</b><code class='datatype'>string</code> <code class='argument'>source</code>, <code class='datatype'>void</code>|<code class='datatype'>string</code> <code class='argument'>filename</code>, <code class='datatype'>object</code>|<code class='datatype'>void</code> <code class='argument'>handler</code>, <code class='datatype'>void</code>|<code class='datatype'>program</code> <code class='argument'>p</code>, <code class='datatype'>void</code>|<code class='datatype'>object</code> <code class='argument'>o</code>, <code class='datatype'>void</code>|<code class='datatype'>int</code> <code class='argument'>_show_if_constant_errors</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Compile the Pike code in the string <code>source</code> into a program. +  If <code>filename</code> is not specified, it will default to <code class='expr'>"-"</code>.</p> + <p> Functionally equal to <code class='expr'><code>compile</code>(<code>cpp</code>(<code>source</code>,&nbsp;<code>filename</code>))</code>.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>compile()</code>, <code>cpp()</code>, <code>compile_file()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span>   <span class='homogen--name'><b>copy_value</b></span>   </dt>   <dd><p><code><code class='datatype'>mixed</code> <b><span class='method'>copy_value</span>(</b><code class='datatype'>mixed</code> <code class='argument'>value</code><b>)</b></code></p></dd>      <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>Copy a value recursively.</p>   <p> If the result value is changed destructively (only possible for    multisets, arrays and mappings) the copied value will not be changed.</p>   <p> The resulting value will always be equal to the copied (as tested with    the function <code>equal()</code>), but they may not the the same value (as tested
autodoc.git/traditional_manual/chapter_21.html:1094:   </table>   </dd>   <dt class='head--doc'>See also</dt>   <dd class='body--doc'><p><code>compile()</code></p>   </dd></dl>         <hr />   <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>cpp</b></span> + </dt> + <dd><p><code><code class='modifier'>protected</code> <code class='datatype'>string</code> <b><span class='method'>cpp</span>(</b><code class='datatype'>string</code> <code class='argument'>data</code>, <code class='datatype'>mapping</code>|<code class='datatype'>string</code>|<code class='datatype'>void</code> <code class='argument'>current_file</code>, <code class='datatype'>int</code>|<code class='datatype'>string</code>|<code class='datatype'>void</code> <code class='argument'>charset</code>, <code class='datatype'>object</code>|<code class='datatype'>void</code> <code class='argument'>handler</code>, <code class='datatype'>void</code>|<code class='datatype'>int</code> <code class='argument'>compat_major</code>, <code class='datatype'>void</code>|<code class='datatype'>int</code> <code class='argument'>compat_minor</code>, <code class='datatype'>void</code>|<code class='datatype'>int</code> <code class='argument'>picky_cpp</code><b>)</b></code></p></dd> + </dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span>   <span class='homogen--name'><b>ctime</b></span>   </dt>   <dd><p><code><code class='datatype'>string</code> <b><span class='method'>ctime</span>(</b><code class='datatype'>int</code> <code class='argument'>timestamp</code><b>)</b></code></p></dd>      <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>Convert the output from a previous call to <code>time()</code> into a readable    string containing the current year, month, day and time.</p>   <p> Like <code>localtime</code>, this function might throw an error if the    ctime(2) call failed on the system. It's platform dependent what    time ranges that function can handle, e.g. Windows doesn't handle
autodoc.git/traditional_manual/chapter_21.html:1166:   <dd><p><code><code class='datatype'>int(0..)</code> <b><span class='method'>depth</span>(</b><b>)</b></code></p></dd>      <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>Calculate the depth of the tree.</p>   </dd></dl>         <hr />   <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>describe_backtrace</b></span> + </dt> + <dd><p><code><code class='datatype'>string</code> <b><span class='method'>describe_backtrace</span>(</b><code class='datatype'>mixed</code> <code class='argument'>trace</code>, <code class='datatype'>void</code>|<code class='datatype'>int</code> <code class='argument'>linewidth</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Return a readable message that describes where the backtrace +  <code>trace</code> was made (by <code>backtrace</code>).</p> + <p> It may also be an error object or array (typically caught by a +  <code>catch</code>), in which case the error message also is included in the +  description.</p> + <p> Pass <code>linewidth</code> -1 to disable wrapping of the output.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>backtrace()</code>, <code>describe_error()</code>, <code>catch()</code>, <code>throw()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>describe_error</b></span> + </dt> + <dd><p><code><code class='datatype'>string</code> <b><span class='method'>describe_error</span>(</b><code class='datatype'>mixed</code> <code class='argument'>err</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Return the error message from an error object or array (typically +  caught by a <code>catch</code>). The type of the error is checked, hence +  <code>err</code> is declared as <code class='expr'>mixed</code> and not <code class='expr'>object|array</code>.</p> + <p> If an error message couldn't be obtained, a fallback message +  describing the failure is returned. No errors due to incorrectness +  in <code>err</code> are thrown.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>describe_backtrace()</code>, <code>get_backtrace</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span>   <span class='homogen--name'><b>destruct</b></span>   </dt>   <dd><p><code><code class='datatype'>bool</code> <b><span class='method'>destruct</span>(</b><code class='datatype'>void</code>|<code class='datatype'>object</code> <code class='argument'>o</code><b>)</b></code></p></dd>      <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>Mark an object as destructed.</p>   <p> Calls <code class='expr'>o-&gt;_destruct()</code>, and then clears all variables in the    object. If no argument is given, the current object is destructed.</p>   <p> All pointers and function pointers to this object will become zero.    The destructed object will be freed from memory as soon as possible.</p>
autodoc.git/traditional_manual/chapter_21.html:1314:   </td></tr>   </table>   </dd>   <dt class='head--doc'>See also</dt>   <dd class='body--doc'><p><code>copy_value()</code>, <code>`==()</code></p>   </dd></dl>         <hr />   <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>error</b></span> + </dt> + <dd><p><code><code class='datatype'>void</code> <b><span class='method'>error</span>(</b><code class='object unresolved'>sprintf_format</code> <code class='argument'>f</code>, <code class='object unresolved'>sprintf_args</code> ... <code class='argument'>args</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Throws an error. A more readable version of the code +  <code class='expr'>throw(&nbsp;({&nbsp;sprintf(f,&nbsp;@args),&nbsp;backtrace()&nbsp;})&nbsp;)</code>.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Constant</span>   <span class='homogen--name'><b>is_gssapi_error</b></span><br>   <span class='homogen--type'>Constant</span>   <span class='homogen--name'><b>error_type</b></span><br>   </dt>   <dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> <code class='constant'>is_gssapi_error</code></code><br>   <code><code class='datatype'>constant</code> <code class='datatype'>string</code> <code class='constant'>error_type</code></code></p></dd>      <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>Object recognition constants.</p>
autodoc.git/traditional_manual/chapter_21.html:1572:    which can cause more things to be freed or allocated.</p>   </dd>   <dt class='head--doc'>See also</dt>   <dd class='body--doc'><p><code>Pike.gc_parameters</code>, <code>Debug.gc_status</code></p>   </dd></dl>         <hr />   <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>get_active_compilation_handler</b></span> + </dt> + <dd><p><code><code class='object unresolved'>CompilationHandler</code> <b><span class='method'>get_active_compilation_handler</span>(</b><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Returns the currently active compilation compatibility handler, or +  <tt>0</tt> (zero) if none is active.</p> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p>This function should only be used during a call of <code>compile()</code>.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>get_active_error_handler()</code>, <code>compile()</code>, +  <code>master()-&gt;get_compilation_handler()</code>, <code>CompilationHandler</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span>   <span class='homogen--name'><b>get_active_compiler</b></span>   </dt>   <dd><p><code><code class='object unresolved'>CompilerEnvironment.PikeCompiler</code> <b><span class='method'>get_active_compiler</span>(</b><b>)</b></code></p></dd>      <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>Returns the most recent of the currently active pike compilers,    or <code>UNDEFINED</code> if none is active.</p>   </dd>   <dt class='head--doc'>Note</dt>   <dd class='body--doc'><p>This function should only be used during a call of <code>compile()</code>.</p>   </dd>   <dt class='head--doc'>See also</dt>   <dd class='body--doc'><p><code>get_active_error_handler()</code>, <code>compile()</code>,    <code>master()-&gt;get_compilation_handler()</code>, <code>CompilationHandler</code></p>   </dd></dl>         <hr />   <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Method</span> -  + <span class='homogen--name'><b>get_active_error_handler</b></span> + </dt> + <dd><p><code><code class='object unresolved'>CompilationHandler</code> <b><span class='method'>get_active_error_handler</span>(</b><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Returns the currently active compilation error handler +  (second argument to <code>compile()</code>), or <tt>0</tt> (zero) if none +  is active.</p> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p>This function should only be used during a call of <code>compile()</code>.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>get_active_compilation_handler()</code>, <code>compile()</code>, <code>CompilationHandler</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span>   <span class='homogen--name'><b>get_all_groups</b></span>   </dt>   <dd><p><code><code class='datatype'>array</code>(<code class='datatype'>array</code>(<code class='datatype'>int</code>|<code class='datatype'>string</code>|<code class='datatype'>array</code>(<code class='datatype'>string</code>))) <b><span class='method'>get_all_groups</span>(</b><b>)</b></code></p></dd>      <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>Returns an array of arrays with all groups in the system groups source.    Each element in the returned array has the same structure as in    <code>getgrent</code> function.</p>   </dd>   <dt class='head--doc'>Note</dt>
autodoc.git/traditional_manual/chapter_21.html:1639:   <dt class='head--doc'>See also</dt>   <dd class='body--doc'><p><code>getpwent()</code>    <code>getpwnam()</code>    <code>getpwuid()</code></p>   </dd></dl>         <hr />   <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>get_backtrace</b></span> + </dt> + <dd><p><code><code class='datatype'>array</code> <b><span class='method'>get_backtrace</span>(</b><code class='datatype'>object</code>|<code class='datatype'>array</code> <code class='argument'>err</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Return the backtrace array from an error object or array +  (typically caught by a <code>catch</code>), or zero if there is none. Errors +  are thrown on if there are problems retrieving the backtrace.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>describe_backtrace()</code>, <code>describe_error()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span>   <span class='homogen--name'><b>get_groups_for_user</b></span>   </dt>   <dd><p><code><code class='datatype'>array</code>(<code class='datatype'>int</code>) <b><span class='method'>get_groups_for_user</span>(</b><code class='datatype'>int</code>|<code class='datatype'>string</code> <code class='argument'>user</code><b>)</b></code></p></dd>      <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>Gets all groups which a given user is a member of.</p>   </dd>   <dt class='head--doc'><span id='p-user'></span>Parameter <code class='parameter'>user</code></dt>   <dd></dd><dd class='body--doc'><p>UID or loginname of the user</p>   </dd>
autodoc.git/traditional_manual/chapter_21.html:1707:    object.</p>   </dd>   <dt class='head--doc'>See also</dt>   <dd class='body--doc'><p><code>Iterator</code>, <code>lfun::_get_iterator</code></p>   </dd></dl>         <hr />   <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>getenv</b></span> + </dt> + <dd><p><code><code class='datatype'>mapping</code>(<code class='datatype'>string</code>:<code class='datatype'>string</code>) <b><span class='method'>getenv</span>(</b><code class='datatype'>void</code>|<code class='datatype'>int</code> <code class='argument'>force_update</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Queries the environment variables.</p> + </dd> + <dt class='head--doc'><span id='p-force_update'></span>Parameter <code class='parameter'>force_update</code></dt> + <dd></dd><dd class='body--doc'><p>A cached copy of the real environment is kept to make this +  function quicker. If the optional flag <code>force_update</code> is nonzero +  then the real environment is queried and the cache is updated from +  it. That can be necessary if the environment changes through other +  means than <code>putenv</code>, typically from a C-level library.</p> + </dd> + <dt class='head--doc'>Returns</dt> + <dd class='body--doc'><p>Returns the whole environment as a mapping. Destructive +  operations on the mapping will not affect the internal +  environment representation.</p> + <p> Variable names and values cannot be wide strings nor contain +  <code class='expr'>'\0'</code> characters. Variable names also cannot contain +  <code class='expr'>'='</code> characters.</p> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p>On NT the environment variable name is case insensitive.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>putenv()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>getenv</b></span> + </dt> + <dd><p><code><code class='datatype'>string</code> <b><span class='method'>getenv</span>(</b><code class='datatype'>string</code> <code class='argument'>varname</code>, <code class='datatype'>void</code>|<code class='datatype'>int</code> <code class='argument'>force_update</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Query the value of a specific environment variable.</p> + </dd> + <dt class='head--doc'><span id='p-varname'></span>Parameter <code class='parameter'>varname</code></dt> + <dd></dd><dd class='body--doc'><p>Environment variable to query.</p> + </dd> + <dt class='head--doc'><span id='p-force_update'></span>Parameter <code class='parameter'>force_update</code></dt> + <dd></dd><dd class='body--doc'><p>A cached copy of the real environment is kept to make this +  function quicker. If the optional flag <code>force_update</code> is nonzero +  then the real environment is queried and the cache is updated from +  it. That can be necessary if the environment changes through other +  means than <code>putenv</code>, typically from a C-level library.</p> + </dd> + <dt class='head--doc'>Returns</dt> + <dd class='body--doc'><p>Returns the value of the environment variable <code>varname</code> +  if it exists, and <code class='expr'>0</code> (zero) otherwise.</p> + <p> Variable names and values cannot be wide strings nor contain +  <code class='expr'>'\0'</code> characters. Variable names also cannot contain +  <code class='expr'>'='</code> characters.</p> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p>On NT the environment variable name is case insensitive.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>putenv()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span>   <span class='homogen--name'><b>getgrgid</b></span>   </dt>   <dd><p><code><code class='datatype'>array</code>(<code class='datatype'>int</code>|<code class='datatype'>string</code>|<code class='datatype'>array</code>(<code class='datatype'>string</code>)) <b><span class='method'>getgrgid</span>(</b><code class='datatype'>int</code> <code class='argument'>gid</code><b>)</b></code></p></dd>      <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>Get the group entry for the group with the id <code>gid</code> using the systemfunction    <tt>getgrid(3)</tt>.</p>   </dd>   <dt class='head--doc'><span id='p-gid'></span>Parameter <code class='parameter'>gid</code></dt>   <dd></dd><dd class='body--doc'><p>The id of the group</p>
autodoc.git/traditional_manual/chapter_21.html:2260:   <dt class='head--doc'>Note</dt>   <dd class='body--doc'><p>This is the hashing method used by mappings.</p>   </dd>   <dt class='head--doc'>See also</dt>   <dd class='body--doc'><p><code>lfun::__hash()</code></p>   </dd></dl>         <hr />   <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>is_absolute_path</b></span> + </dt> + <dd><p><code><code class='datatype'>int</code> <b><span class='method'>is_absolute_path</span>(</b><code class='datatype'>string</code> <code class='argument'>p</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Check if a path <code>p</code> is fully qualified (ie not relative).</p> + </dd> + <dt class='head--doc'>Returns</dt> + <dd class='body--doc'><p>Returns 1 if the path is absolute, 0 otherwise.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Constant</span>   <span class='homogen--name'><b>is_sql_null</b></span>   </dt>   <dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> <code class='constant'>is_sql_null</code></code></p></dd>      <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>SQL Null marker.</p>   </dd>   <dt class='head--doc'>Deprecated</dt>   <dd class='body--doc'><p>Replaced by <code>is_val_null</code>.</p>
autodoc.git/traditional_manual/chapter_21.html:2804:    and into the future).</p>   </dd>   <dt class='head--doc'>See also</dt>   <dd class='body--doc'><p><code>time()</code>, <code>ctime()</code>, <code>localtime()</code>, <code>gmtime()</code>, <code>strftime()</code></p>   </dd></dl>         <hr />   <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>normalize_path</b></span> + </dt> + <dd><p><code><code class='datatype'>string</code> <b><span class='method'>normalize_path</span>(</b><code class='datatype'>string</code> <code class='argument'>path</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Replaces "\" with "/" if runing on MS Windows. It is +  adviced to use <code>System.normalize_path</code> instead.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span>   <span class='homogen--name'><b>nth</b></span>   </dt>   <dd><p><code><code class='datatype'>mixed</code> <b><span class='method'>nth</span>(</b><code class='datatype'>int(0..)</code> <code class='argument'>n</code><b>)</b></code></p></dd>      <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>Get the <code class='expr'>n</code>th entry in order.</p>   </dd>   <dt class='head--doc'>Returns</dt>   <dd class='body--doc'><p>An array <code class='expr'>({&nbsp;key,&nbsp;value&nbsp;})</code>.</p>   </dd></dl>
autodoc.git/traditional_manual/chapter_21.html:2874:    <code>x</code> as argument.</p>   </dd>   <dt class='head--doc'>See also</dt>   <dd class='body--doc'><p><code>exp()</code>, <code>log()</code></p>   </dd></dl>         <hr />   <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>putenv</b></span> + </dt> + <dd><p><code><code class='datatype'>void</code> <b><span class='method'>putenv</span>(</b><code class='datatype'>string</code> <code class='argument'>varname</code>, <code class='datatype'>void</code>|<code class='datatype'>string</code> <code class='argument'>value</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Sets the environment variable <code>varname</code> to <code>value</code>.</p> + <p> If <code>value</code> is omitted or zero, the environment variable +  <code>varname</code> is removed.</p> + <p> <code>varname</code> and <code>value</code> cannot be wide strings nor contain +  <code class='expr'>'\0'</code> characters. <code>varname</code> also cannot contain +  <code class='expr'>'='</code> characters.</p> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p>On NT the environment variable name is case insensitive.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>getenv()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span>   <span class='homogen--name'><b>query_num_arg</b></span>   </dt>   <dd><p><code><code class='datatype'>int</code> <b><span class='method'>query_num_arg</span>(</b><b>)</b></code></p></dd>      <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>Returns the number of arguments given when the previous function was    called.</p>   <p> This is useful for functions that take a variable number of arguments.</p>   </dd>   <dt class='head--doc'>See also</dt>   <dd class='body--doc'><p><code>call_function()</code></p>   </dd></dl>         <hr />   <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Method</span> -  + <span class='homogen--name'><b>random</b></span> + </dt> + <dd><p><code><code class='datatype'>array</code> <b><span class='method'>random</span>(</b><code class='datatype'>mapping</code> <code class='argument'>m</code><b>)</b></code><br> + <code><code class='datatype'>float</code> <b><span class='method'>random</span>(</b><code class='datatype'>float</code> <code class='argument'>max</code><b>)</b></code><br> + <code><code class='datatype'>int</code> <b><span class='method'>random</span>(</b><code class='datatype'>int</code> <code class='argument'>max</code><b>)</b></code><br> + <code><code class='datatype'>mixed</code> <b><span class='method'>random</span>(</b><code class='datatype'>object</code> <code class='argument'>o</code><b>)</b></code><br> + <code><code class='datatype'>mixed</code> <b><span class='method'>random</span>(</b><code class='datatype'>array</code>|<code class='datatype'>multiset</code> <code class='argument'>x</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Get a random value generated by the default <code>RandomSystem</code>.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>RandomSystem()-&gt;random()</code>, <code>random_string()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span>   <span class='homogen--name'><b>random_seed</b></span>   </dt>   <dd><p><code><code class='datatype'>void</code> <b><span class='method'>random_seed</span>(</b><code class='datatype'>int</code> <code class='argument'>seed</code><b>)</b></code></p></dd>      <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>This function sets the initial value for the random generator.</p>   </dd>   <dt class='head--doc'>See also</dt>   <dd class='body--doc'><p><code>random()</code></p>   </dd>   <dt class='head--doc'>Deprecated</dt>   <dd class='body--doc'><p><code>Random.Deterministic</code></p>   </dd></dl>         <hr />   <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Method</span> -  + <span class='homogen--name'><b>random_string</b></span> + </dt> + <dd><p><code><code class='datatype'>string</code> <b><span class='method'>random_string</span>(</b><code class='datatype'>int</code> <code class='argument'>len</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Get a string of random characters <code class='expr'>0..255</code> with the length <code>len</code> +  from the default <code>RandomSystem</code>.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>RandomSystem()-&gt;random_string()</code>, <code>random()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>remove_include_path</b></span> + </dt> + <dd><p><code><code class='datatype'>void</code> <b><span class='method'>remove_include_path</span>(</b><code class='datatype'>string</code> <code class='argument'>tmp</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Remove a directory to search for include files.</p> + <p> This function performs the reverse operation of <code>add_include_path()</code>.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>add_include_path()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>remove_module_path</b></span> + </dt> + <dd><p><code><code class='datatype'>void</code> <b><span class='method'>remove_module_path</span>(</b><code class='datatype'>string</code> <code class='argument'>tmp</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Remove a directory to search for modules.</p> + <p> This function performs the reverse operation of <code>add_module_path()</code>.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>add_module_path()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>remove_program_path</b></span> + </dt> + <dd><p><code><code class='datatype'>void</code> <b><span class='method'>remove_program_path</span>(</b><code class='datatype'>string</code> <code class='argument'>tmp</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Remove a directory to search for programs.</p> + <p> This function performs the reverse operation of <code>add_program_path()</code>.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>add_program_path()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span>   <span class='homogen--name'><b>removexattr</b></span>   </dt>   <dd><p><code><code class='datatype'>void</code> <b><span class='method'>removexattr</span>(</b><code class='datatype'>string</code> <code class='argument'>file</code>, <code class='datatype'>string</code> <code class='argument'>attr</code>, <code class='datatype'>void</code>|<code class='datatype'>bool</code> <code class='argument'>symlink</code><b>)</b></code></p></dd>      <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>Remove the specified extended attribute.</p>   </dd></dl>         <hr />
autodoc.git/traditional_manual/chapter_21.html:4640:   <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>Report the version of Pike. Does the same as</p>   <pre><code>sprintf<span class='delim'>(</span><span class='string'>"Pike v%d.%d release %d"</span><span class='delim'>,</span> <span class='const'>__REAL_VERSION__</span><span class='delim'>,</span>    <span class='const'>__REAL_MINOR__</span><span class='delim'>,</span> <span class='const'>__REAL_BUILD__</span><span class='delim'>)</span><span class='delim'>;</span>   </code></pre>   </dd>   <dt class='head--doc'>See also</dt>   <dd class='body--doc'><p><code>__VERSION__</code>, <code>__MINOR__</code>, <code>__BUILD__</code>,    <code>__REAL_VERSION__</code>, <code>__REAL_MINOR__</code>, <code>__REAL_BUILD__</code>,</p>   </dd></dl> - <dl><dt><h2 class='header'>Class <b class='ms datatype'>Codec</b></h2> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>werror</b></span> + </dt> + <dd><p><code><code class='datatype'>int</code> <b><span class='method'>werror</span>(</b><code class='datatype'>string</code> <code class='argument'>fmt</code>, <code class='datatype'>mixed</code> ... <code class='argument'>args</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Writes a string on stderr. Works just like <code>Stdio.File.write</code> +  on <code>Stdio.stderr</code>.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>write</b></span> + </dt> + <dd><p><code><code class='datatype'>int</code> <b><span class='method'>write</span>(</b><code class='datatype'>string</code> <code class='argument'>fmt</code>, <code class='datatype'>mixed</code> ... <code class='argument'>args</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Writes a string on stdout. Works just like <code>Stdio.File.write</code> +  on <code>Stdio.stdout</code>.</p> + </dd></dl> + <dl><dt><h2 class='header'>Enum <b class='ms datatype'>bool</b></h2>   </dt><dd><dl class='group--doc'>   <dt class='head--doc'>Description</dt> -  + <dd class='body--doc'><p>Boolean datatype.</p> + </dd></dl> +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Constant</span> + <span class='homogen--name'><b>false</b></span><br> + <span class='homogen--type'>Constant</span> + <span class='homogen--name'><b>true</b></span><br> + </dt> + <dd><p><code><code class='datatype'>constant</code> <code class='constant'>false</code></code><br> + <code><code class='datatype'>constant</code> <code class='constant'>true</code></code></p></dd> + </dl> + </dd></dl><dl><dt><h2 class='header'>Class <b class='ms datatype'>Codec</b></h2> + </dt><dd><dl class='group--doc'> + <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>An <code>Encoder</code> and a <code>Decoder</code> lumped into a single instance which    can be used for both encoding and decoding.</p>   </dd></dl>      <hr />   <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Inherit</span>   <span class='homogen--name'><b>Decoder</b></span>   </dt>   <dd><p><code><span class='datatype'>inherit Decoder</span> : <span class='inherit'>Decoder</span></code></p></dd>
autodoc.git/traditional_manual/chapter_21.html:4888:   </dd>   <dt class='head--doc'>Returns</dt>   <dd class='body--doc'><p>Returns the resolved value, or <code>UNDEFINED</code> on failure.</p>   </dd>   <dt class='head--doc'>See also</dt>   <dd class='body--doc'><p><code>get_predefines()</code></p>   </dd></dl>   </dd></dl><dl><dt><h2 class='header'>Class <b class='ms datatype'>CompilerEnvironment</b></h2>   </dt><dd><dl class='group--doc'>   <dt class='head--doc'>Description</dt> - <dd class='body--doc'><p>The compiler environment.</p> + <dd class='body--doc'><p><code>predef::CompilerEnvironment</code> that supports handlers.</p> + <p>The compiler environment.</p>   <p> By inheriting this class and overloading the functions,    it is possible to make a custom Pike compiler.</p>   </dd>   <dt class='head--doc'>Note</dt>   <dd class='body--doc'><p>Prior to Pike 7.8 this sort of customization has to be done    either via custom master objects, or via <code>CompilationHandler</code>s.</p>   </dd>   <dt class='head--doc'>See also</dt>   <dd class='body--doc'><p><code>CompilationHandler</code>, <code>MasterObject</code>, <code>master()</code>, <code>replace_master()</code></p>   </dd></dl>      <hr />   <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Method</span>   <span class='homogen--name'><b>compile</b></span>   </dt> -  + <dd><p><code><code class='datatype'>program</code> <b><span class='method'>compile</span>(</b><code class='datatype'>string</code> <code class='argument'>source</code>, <code class='datatype'>object</code>|<code class='datatype'>void</code> <code class='argument'>handler</code>, <code class='datatype'>int</code>|<code class='datatype'>void</code> <code class='argument'>major</code>, <code class='datatype'>int</code>|<code class='datatype'>void</code> <code class='argument'>minor</code>, <code class='datatype'>program</code>|<code class='datatype'>void</code> <code class='argument'>target</code>, <code class='datatype'>object</code>|<code class='datatype'>void</code> <code class='argument'>placeholder</code><b>)</b></code></p></dd> + </dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>compile</b></span> + </dt>   <dd><p><code><code class='datatype'>program</code> <b><span class='method'>compile</span>(</b><code class='datatype'>string</code> <code class='argument'>source</code>, <code class='object unresolved'>CompilationHandler</code>|<code class='datatype'>void</code> <code class='argument'>handler</code>, <code class='datatype'>int</code>|<code class='datatype'>void</code> <code class='argument'>major</code>, <code class='datatype'>int</code>|<code class='datatype'>void</code> <code class='argument'>minor</code>, <code class='datatype'>program</code>|<code class='datatype'>void</code> <code class='argument'>target</code>, <code class='datatype'>object</code>|<code class='datatype'>void</code> <code class='argument'>placeholder</code><b>)</b></code></p></dd>      <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>Compile a string to a program.</p>   <p> This function takes a piece of Pike code as a string and    compiles it into a clonable program.</p>   <p> The optional argument <code>handler</code> is used to specify an alternative    error handler. If it is not specified the current master object will    be used.</p>   <p> The optional arguments <code>major</code> and <code>minor</code> are used to tell the
autodoc.git/traditional_manual/chapter_21.html:4941:   </dd>   <dt class='head--doc'>See also</dt>   <dd class='body--doc'><p><code>compile_string()</code>, <code>compile_file()</code>, <code>cpp()</code>, <code>master()</code>,    <code>CompilationHandler</code></p>   </dd></dl>         <hr />   <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>compile_exception</b></span> + </dt> + <dd><p><code><code class='datatype'>int</code> <b><span class='method'>compile_exception</span>(</b><code class='datatype'>mixed</code> <code class='argument'>err</code><b>)</b></code></p></dd> + </dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>format_exception</b></span> + </dt> + <dd><p><code><code class='datatype'>string</code> <b><span class='method'>format_exception</span>(</b><code class='datatype'>mixed</code> <code class='argument'>err</code><b>)</b></code></p></dd> + </dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span>   <span class='homogen--name'><b>get_compilation_handler</b></span>   </dt>   <dd><p><code><code class='datatype'>object</code> <b><span class='method'>get_compilation_handler</span>(</b><code class='datatype'>int</code> <code class='argument'>major</code>, <code class='datatype'>int</code> <code class='argument'>minor</code><b>)</b></code></p></dd>      <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>Get compatibility handler for Pike <code>major</code>.<code>minor</code>.</p>   <p> The default implementation calls the corresponding    function in the master object.</p>   </dd>   <dt class='head--doc'>Note</dt>
autodoc.git/traditional_manual/chapter_21.html:5008:    in the master object.</p>   </dd>   <dt class='head--doc'>See also</dt>   <dd class='body--doc'><p><code>MasterObject()-&gt;handle_import()</code>.</p>   </dd></dl>         <hr />   <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>handle_import</b></span> + </dt> + <dd><p><code><code class='datatype'>program</code> <b><span class='method'>handle_import</span>(</b><code class='datatype'>string</code> <code class='argument'>module</code>, <code class='datatype'>string</code> <code class='argument'>current_file</code>, <code class='datatype'>object</code>|<code class='datatype'>void</code> <code class='argument'>handler</code>, <code class='datatype'>object</code>|<code class='datatype'>void</code> <code class='argument'>compat_handler</code><b>)</b></code></p></dd> + </dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span>   <span class='homogen--name'><b>handle_inherit</b></span>   </dt>   <dd><p><code><code class='datatype'>program</code> <b><span class='method'>handle_inherit</span>(</b><code class='datatype'>string</code> <code class='argument'>inh</code>, <code class='datatype'>string</code> <code class='argument'>current_file</code>, <code class='datatype'>object</code>|<code class='datatype'>void</code> <code class='argument'>handler</code><b>)</b></code></p></dd>      <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>Look up an inherit <code>inh</code>.</p>   <p> The default implementation calls the corresponding function    in the master object.</p>   </dd>   <dt class='head--doc'>See also</dt>   <dd class='body--doc'><p><code>MasterObject()-&gt;handle_inherit()</code>.</p>   </dd></dl>         <hr />   <dl class='group--doc'> -  + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>handle_inherit</b></span> + </dt> + <dd><p><code><code class='datatype'>program</code> <b><span class='method'>handle_inherit</span>(</b><code class='datatype'>string</code> <code class='argument'>inh</code>, <code class='datatype'>string</code> <code class='argument'>current_file</code>, <code class='datatype'>object</code>|<code class='datatype'>void</code> <code class='argument'>handler</code>, <code class='datatype'>object</code>|<code class='datatype'>void</code> <code class='argument'>compat_handler</code><b>)</b></code></p></dd> + </dl> +  +  + <hr /> + <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Inherit</span> -  + <span class='homogen--name'><b>OrigCompilerEnvironment</b></span> + </dt> + <dd><p><code><span class='datatype'>inherit predef::CompilerEnvironment</span> : <span class='inherit'>OrigCompilerEnvironment</span></code></p></dd> + </dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Inherit</span>   <span class='homogen--name'><b>Reporter</b></span>   </dt>   <dd><p><code><span class='datatype'>inherit Reporter</span> : <span class='inherit'>Reporter</span></code></p></dd>      <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>Implements the <code>Reporter</code> API.</p>   </dd>   <dt class='head--doc'>See also</dt>   <dd class='body--doc'><p><code>Reporter()-&gt;report()</code>, <code>Reporter()-&gt;SeverityLevel</code></p>   </dd></dl>         <hr />   <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Method</span>   <span class='homogen--name'><b>resolv</b></span>   </dt>   <dd><p><code><code class='datatype'>mixed</code> <b><span class='method'>resolv</span>(</b><code class='datatype'>string</code> <code class='argument'>identifier</code>, <code class='datatype'>string</code> <code class='argument'>filename</code>, <code class='datatype'>object</code>|<code class='datatype'>void</code> <code class='argument'>handler</code>, <code class='datatype'>object</code>|<code class='datatype'>void</code> <code class='argument'>compat_handler</code><b>)</b></code></p></dd> -  + </dl>    -  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>resolv</b></span> + </dt> + <dd><p><code><code class='datatype'>mixed</code> <b><span class='method'>resolv</span>(</b><code class='datatype'>string</code> <code class='argument'>identifier</code>, <code class='datatype'>string</code> <code class='argument'>filename</code>, <code class='datatype'>object</code>|<code class='datatype'>void</code> <code class='argument'>handler</code>, <code class='datatype'>object</code>|<code class='datatype'>void</code> <code class='argument'>compat_handler</code><b>)</b></code></p></dd> +    <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>Look up <code>identifier</code> in the current context.</p>   <p> The default implementation calls the corresponding    function in the handlers (if any), falling back to    the master object.</p>   </dd>   <dt class='head--doc'>Returns</dt>   <dd class='body--doc'><p>Returns the value of the <code>identifier</code> if found, and    <code>UNDEFINED</code> if not.</p>   </dd></dl>
autodoc.git/traditional_manual/chapter_21.html:5066:   <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>The state for an instance of the preprocessor.</p>   </dd>   <dt class='head--doc'>See also</dt>   <dd class='body--doc'><p><code>predef::cpp()</code></p>   </dd></dl>      <hr />   <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>apply_handler</b></span> + </dt> + <dd><p><code><code class='modifier'>protected</code> <code class='datatype'>mixed</code> <b><span class='method'>apply_handler</span>(</b><code class='datatype'>string</code> <code class='argument'>fun</code>, <code class='datatype'>mixed</code> ... <code class='argument'>args</code><b>)</b></code></p></dd> + </dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span>   <span class='homogen--name'><b>change_cpp_compatibility</b></span>   </dt>   <dd><p><code><code class='datatype'>void</code> <b><span class='method'>change_cpp_compatibility</span>(</b><code class='datatype'>int</code> <code class='argument'>major</code>, <code class='datatype'>int</code> <code class='argument'>minor</code><b>)</b></code></p></dd> -  + </dl>    -  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>change_cpp_compatibility</b></span> + </dt> + <dd><p><code><code class='datatype'>void</code> <b><span class='method'>change_cpp_compatibility</span>(</b><code class='datatype'>int</code> <code class='argument'>major</code>, <code class='datatype'>int</code> <code class='argument'>minor</code><b>)</b></code></p></dd> +    <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>Change the pike compatibility level for this preprocessor    to the specified version of Pike.</p>   </dd>   <dt class='head--doc'><span id='p-major'></span>Parameter <code class='parameter'>major</code></dt>   <dd></dd><dd class='body--doc'><p>Major version of Pike to attempt to be compatible with.    Specifying a major version of <code class='expr'>-1</code> is a short hand    for specifying <code>__REAL_MAJOR__</code> and <code>__REAL_MINOR__</code>.</p>   </dd>   <dt class='head--doc'><span id='p-minor'></span>Parameter <code class='parameter'>minor</code></dt>
autodoc.git/traditional_manual/chapter_21.html:5109:   <p> It is recomended to call this function when the <code>CPP</code> object    is no longer to be used.</p>   </dd>   <dt class='head--doc'>See also</dt>   <dd class='body--doc'><p><code>define_macro()</code></p>   </dd></dl>         <hr />   <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Variable</span> + <span class='homogen--name'><b>handler</b></span><br> + <span class='homogen--type'>Variable</span> + <span class='homogen--name'><b>compat_handler</b></span><br> + </dt> + <dd><p><code><code class='datatype'>object</code> CompilerEnvironment.CPP.<b><span class='variable'>handler</span></b></code><br> + <code><code class='datatype'>object</code> CompilerEnvironment.CPP.<b><span class='variable'>compat_handler</span></b></code></p></dd> + </dl> +  +  + <hr /> + <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Method</span> -  + <span class='homogen--name'><b>compile_exception</b></span> + </dt> + <dd><p><code><code class='datatype'>int</code> <b><span class='method'>compile_exception</span>(</b><code class='datatype'>mixed</code> <code class='argument'>err</code><b>)</b></code></p></dd> + </dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span>   <span class='homogen--name'><b>cpp_error</b></span>   </dt>   <dd><p><code><code class='datatype'>void</code> <b><span class='method'>cpp_error</span>(</b><code class='object unresolved'>sprintf_format</code> <code class='argument'>msg</code>, <code class='object unresolved'>sprintf_args</code> ... <code class='argument'>arguments</code><b>)</b></code></p></dd>      <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>Convenience function for reporting a cpp error at    the current position.</p>   <p> This function calls <code>report()</code> with the same arguments,    but prefixed with suitable defaults.</p>   </dd>
autodoc.git/traditional_manual/chapter_21.html:5159:   <tr><td><code><code class='key'>"compat_minor"</code> : <code class='datatype'>int</code></code></td><td><p>Sets the minor pike version used for compat handling.</p>   </td></tr>   <tr><td><code><code class='key'>"picky_cpp"</code> : <code class='datatype'>int</code></code></td><td><p>Generate more warnings.</p>   </td></tr>   <tr><td><code><code class='key'>"keep_comments"</code> : <code class='datatype'>int</code></code></td><td><p>This option keeps <code>cpp()</code> from removing comments.    Useful in combination with the prefix feature below.</p>   </td></tr>   <tr><td><code><code class='key'>"prefix"</code> : <code class='datatype'>string</code></code></td><td><p>If a prefix is given, only prefixed directives will be    processed. For example, if the prefix is <code class='expr'>"foo"</code>, then    <code class='expr'>#foo_ifdef&nbsp;COND</code> and <code class='expr'>foo___LINE__</code> would be +  processed, <code class='expr'>#ifdef&nbsp;COND</code> and <code class='expr'>__LINE__</code> +  would not.</p> + </td></tr> + </table> + </dd> + <dt class='head--doc'><span id='p-current_file'></span>Parameter <code class='parameter'>current_file</code></dt> + <dd></dd><dd class='body--doc'><p>If the <code>current_file</code> argument has not been specified, +  it will default to <code class='expr'>"-"</code>.</p> + </dd> + <dt class='head--doc'><span id='p-charset'></span>Parameter <code class='parameter'>charset</code></dt> + <dd></dd><dd class='body--doc'><p>Turn on automatic character set detection if <code class='expr'>1</code>, otherwise +  specifies the character set used by the input. +  Defaults to <code class='expr'>"ISO-10646"</code>.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>compile()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>create</b></span> + </dt> + <dd><p><code><span class='object'>CompilerEnvironment.CPP</span> <span class='class'>CompilerEnvironment.CPP</span><b>(</b><code class='datatype'>string</code>|<code class='datatype'>void</code> <code class='argument'>current_file</code>, <code class='datatype'>int</code>|<code class='datatype'>string</code>|<code class='datatype'>void</code> <code class='argument'>charset</code>, <code class='datatype'>object</code>|<code class='datatype'>void</code> <code class='argument'>handler</code>, <code class='datatype'>void</code>|<code class='datatype'>int</code> <code class='argument'>compat_major</code>, <code class='datatype'>void</code>|<code class='datatype'>int</code> <code class='argument'>compat_minor</code>, <code class='datatype'>void</code>|<code class='datatype'>int</code> <code class='argument'>picky_cpp</code><b>)</b></code><br> + <code><span class='object'>CompilerEnvironment.CPP</span> <span class='class'>CompilerEnvironment.CPP</span><b>(</b><code class='datatype'>mapping</code>(<code class='datatype'>string</code>:<code class='datatype'>mixed</code>) <code class='argument'>options</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Initialize the preprocessor.</p> + </dd> + <dt class='head--doc'><span id='p-options'></span>Parameter <code class='parameter'>options</code></dt> + <dd></dd><dd class='body--doc'><p>If the first argument is a mapping, no other arguments may follow. +  Instead, they have to be given as members of the mapping (if wanted). +  The following members are then recognized:</p> + <table class='box'><tr><td><code><code class='key'>"current_file"</code> : <code class='datatype'>string</code></code></td><td><p>Name of the current file. It is used for generating +  #line directives and for locating include files.</p> + </td></tr> + <tr><td><code><code class='key'>"charset"</code> : <code class='datatype'>int</code>|<code class='datatype'>string</code></code></td><td><p>Charset to use when processing <code class='expr'>data</code>.</p> + </td></tr> + <tr><td><code><code class='key'>"handler"</code> : <code class='datatype'>object</code></code></td><td><p>Compilation handler.</p> + </td></tr> + <tr><td><code><code class='key'>"compat_major"</code> : <code class='datatype'>int</code></code></td><td><p>Sets the major pike version used for compat handling.</p> + </td></tr> + <tr><td><code><code class='key'>"compat_minor"</code> : <code class='datatype'>int</code></code></td><td><p>Sets the minor pike version used for compat handling.</p> + </td></tr> + <tr><td><code><code class='key'>"picky_cpp"</code> : <code class='datatype'>int</code></code></td><td><p>Generate more warnings.</p> + </td></tr> + <tr><td><code><code class='key'>"keep_comments"</code> : <code class='datatype'>int</code></code></td><td><p>This option keeps <code>cpp()</code> from removing comments. +  Useful in combination with the prefix feature below.</p> + </td></tr> + <tr><td><code><code class='key'>"prefix"</code> : <code class='datatype'>string</code></code></td><td><p>If a prefix is given, only prefixed directives will be +  processed. For example, if the prefix is <code class='expr'>"foo"</code>, then +  <code class='expr'>#foo_ifdef&nbsp;COND</code> and <code class='expr'>foo___LINE__</code> would be    processed, <code class='expr'>#ifdef&nbsp;COND</code> and <code class='expr'>__LINE__</code> would not.</p>   </td></tr>   <tr><td><code><code class='key'>"predefines"</code> : <code class='datatype'>mapping</code>(<code class='datatype'>string</code>:<code class='datatype'>mixed</code>)</code></td><td><p>Mapping of predefined macros in addition to those    returned by <code>CPP()-&gt;get_predefines()</code>.</p>   </td></tr>   </table>   </dd>   <dt class='head--doc'><span id='p-current_file'></span>Parameter <code class='parameter'>current_file</code></dt>   <dd></dd><dd class='body--doc'><p>If the <code>current_file</code> argument has not been specified,    it will default to <code class='expr'>"-"</code>.</p>
autodoc.git/traditional_manual/chapter_21.html:5274:   <dd class='body--doc'><p><code>define_macro()</code>, <code>define_ansi_macros()</code></p>   </dd></dl>         <hr />   <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Method</span>   <span class='homogen--name'><b>format_exception</b></span>   </dt>   <dd><p><code><code class='datatype'>string</code> <b><span class='method'>format_exception</span>(</b><code class='datatype'>mixed</code> <code class='argument'>err</code><b>)</b></code></p></dd> + </dl>    -  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>format_exception</b></span> + </dt> + <dd><p><code><code class='datatype'>string</code> <b><span class='method'>format_exception</span>(</b><code class='datatype'>mixed</code> <code class='argument'>err</code><b>)</b></code></p></dd> +    <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>Format an exception caught by cpp as a    suitable cpp error message.</p>   </dd>   <dt class='head--doc'><span id='p-err'></span>Parameter <code class='parameter'>err</code></dt>   <dd></dd><dd class='body--doc'><p>Caught value.</p>   </dd>   <dt class='head--doc'>Returns</dt>   <dd class='body--doc'><p>Returns one of:</p>   <table class='box'><tr><td><code><code class='datatype'>zero</code></code></td><td><p>Generate a cpp error using the default format (ie call
autodoc.git/traditional_manual/chapter_21.html:5298:   <tr><td><code><code class='datatype'>string</code></code></td><td><p>Cpp error message to <code>report()</code>. The empty string    supresses the cpp error.</p>   </td></tr>   </table><p>The default implementation just returns <code class='expr'>0</code>.</p>   </dd></dl>         <hr />   <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>get_compilation_handler</b></span> + </dt> + <dd><p><code><code class='datatype'>object</code> <b><span class='method'>get_compilation_handler</span>(</b><code class='datatype'>int</code> <code class='argument'>major</code>, <code class='datatype'>int</code> <code class='argument'>minor</code><b>)</b></code></p></dd> + </dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span>   <span class='homogen--name'><b>get_predefines</b></span>   </dt>   <dd><p><code><code class='datatype'>mapping</code>(<code class='datatype'>string</code>:<code class='datatype'>string</code>|<code class='datatype'>function</code>(:<code class='datatype void'>void</code>)|<code class='datatype'>object</code>) <b><span class='method'>get_predefines</span>(</b><b>)</b></code></p></dd> -  + </dl>    -  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>get_predefines</b></span> + </dt> + <dd><p><code><code class='datatype'>mapping</code>(<code class='datatype'>string</code>:<code class='datatype'>string</code>|<code class='datatype'>function</code>(:<code class='datatype void'>void</code>)|<code class='datatype'>object</code>) <b><span class='method'>get_predefines</span>(</b><b>)</b></code></p></dd> +    <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>Get the predefined macros for this preprocessor.</p>   <p> This function is called by <code>init_pike_cpp()</code> to    retrieve the set of macros to define at initialization.</p>   <p> The default implementation returns the internal set of    predefined macros unless <code>_take_over_initial_predefines()</code>    has been called, in which case it instead calls the    corresponding function in the master.</p>   </dd>   <dt class='head--doc'>Note</dt>
autodoc.git/traditional_manual/chapter_21.html:5324:   </dd>   <dt class='head--doc'>See also</dt>   <dd class='body--doc'><p><code>init_pike_cpp()</code>, <code>define_multiple_macros()</code>,    <code>_take_over_initial_predefines()</code></p>   </dd></dl>         <hr />   <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>handle_include</b></span> + </dt> + <dd><p><code><code class='datatype'>string</code> <b><span class='method'>handle_include</span>(</b><code class='datatype'>string</code> <code class='argument'>header_file</code>, <code class='datatype'>string</code> <code class='argument'>current_file</code>, <code class='datatype'>bool</code> <code class='argument'>is_local_ref</code><b>)</b></code></p></dd> + </dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Inherit</span> + <span class='homogen--name'><b>this_program</b></span> + </dt> + <dd><p><code><span class='datatype'>inherit ::this_program</span> : <span class='inherit'>this_program</span></code></p></dd> + </dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span>   <span class='homogen--name'><b>init_pike_cpp</b></span>   </dt>   <dd><p><code><code class='datatype'>void</code> <b><span class='method'>init_pike_cpp</span>(</b><b>)</b></code></p></dd>      <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>Convenience function for initializing the preprocessor    to Pike defaults.</p>   <p> The default implementation is essentially:</p>   <pre><code><span class='delim'>{</span>    define_ansi_macros<span class='delim'>(</span><span class='delim'>)</span><span class='delim'>;</span>    define_pike_macros<span class='delim'>(</span><span class='delim'>)</span><span class='delim'>;</span>    define_multiple_macros<span class='delim'>(</span>get_predefines<span class='delim'>(</span><span class='delim'>)</span><span class='delim'>)</span><span class='delim'>;</span>    <span class='delim'>}</span>   </code></pre></dd></dl>         <hr />   <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Method</span> -  + <span class='homogen--name'><b>read_include</b></span> + </dt> + <dd><p><code><code class='datatype'>string</code> <b><span class='method'>read_include</span>(</b><code class='datatype'>string</code> <code class='argument'>filename</code><b>)</b></code></p></dd> + </dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span>   <span class='homogen--name'><b>report</b></span>   </dt> -  + <dd><p><code><code class='datatype'>void</code> <b><span class='method'>report</span>(</b><code class='object unresolved'>SeverityLevel</code> <code class='argument'>severity</code>, <code class='datatype'>string</code> <code class='argument'>filename</code>, <code class='datatype'>int(1..)</code> <code class='argument'>linenumber</code>, <code class='datatype'>string</code> <code class='argument'>subsystem</code>, <code class='object unresolved'>sprintf_format</code> <code class='argument'>message</code>, <code class='object unresolved'>sprintf_args</code> ... <code class='argument'>extra_args</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Report a diagnostic from the preprocessor.</p> + </dd> + <dt class='head--doc'><span id='p-severity'></span>Parameter <code class='parameter'>severity</code></dt> + <dd></dd><dd class='body--doc'><p>The severity of the diagnostic.</p> + </dd> + <dt class='head--doc'><span id='p-filename'></span>Parameter <code class='parameter'>filename</code></dt> + <dd></dd> + <dt class='head--doc'><span id='p-linenumber'></span>Parameter <code class='parameter'>linenumber</code></dt> + <dd></dd><dd class='body--doc'><p>Location which triggered the diagnostic.</p> + </dd> + <dt class='head--doc'><span id='p-subsystem'></span>Parameter <code class='parameter'>subsystem</code></dt> + <dd></dd><dd class='body--doc'><p>Typically <code class='expr'>"cpp"</code>.</p> + </dd> + <dt class='head--doc'><span id='p-message'></span>Parameter <code class='parameter'>message</code></dt> + <dd></dd><dd class='body--doc'><p>String with the diagnostic message, with optional +  <code>sprintf()</code>-style formatting (if any <code>extra_args</code>).</p> + </dd> + <dt class='head--doc'><span id='p-extra_args'></span>Parameter <code class='parameter'>extra_args</code></dt> + <dd></dd><dd class='body--doc'><p>Extra arguments to <code>sprintf()</code>.</p> + <p> The default implementation does the following:</p> + <ul> + <li><p>If there's a handler which implements <code>Reporter()-&gt;report()</code>, +  call it with the same arguments.</p> + </li><li><p>Otherwise if there's a handler which implements +  <code>compile_warning()</code> or <code>compile_error()</code> that matches +  <code>severity</code>, call it with suitable arguments.</p> + </li><li><p>Otherwise if there's a compat handler, use it in the same +  manner as the handler.</p> + </li><li><p>Otherwise fall back to calling <code>::report()</code> with the +  same arguments.</p> + </li></ul> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p>In Pike 8.0 and earlier <code>MasterObject()-&gt;report()</code> was not called.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>Reporter()-&gt;report()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>report</b></span> + </dt>   <dd><p><code><code class='datatype'>void</code> <b><span class='method'>report</span>(</b><code class='object unresolved'>SeverityLevel</code> <code class='argument'>severity</code>, <code class='datatype'>string</code> <code class='argument'>filename</code>, <code class='datatype'>int(1..)</code> <code class='argument'>linenumber</code>, <code class='datatype'>string</code> <code class='argument'>subsystem</code>, <code class='datatype'>string</code> <code class='argument'>message</code>, <code class='datatype'>mixed</code> ... <code class='argument'>extra_args</code><b>)</b></code></p></dd>      <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>Report a diagnostic from the preprocessor.</p>   </dd>   <dt class='head--doc'><span id='p-severity'></span>Parameter <code class='parameter'>severity</code></dt>   <dd></dd><dd class='body--doc'><p>The severity of the diagnostic.</p>   </dd>   <dt class='head--doc'><span id='p-filename'></span>Parameter <code class='parameter'>filename</code></dt>   <dd></dd>
autodoc.git/traditional_manual/chapter_21.html:5382:   <dd class='body--doc'><p><code>Reporter()-&gt;report()</code>, <code>cpp_error()</code></p>   </dd></dl>         <hr />   <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Method</span>   <span class='homogen--name'><b>resolv</b></span>   </dt>   <dd><p><code><code class='datatype'>mixed</code> <b><span class='method'>resolv</span>(</b><code class='datatype'>string</code> <code class='argument'>sym</code><b>)</b></code></p></dd> + </dl>    -  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>resolv</b></span> + </dt> + <dd><p><code><code class='datatype'>mixed</code> <b><span class='method'>resolv</span>(</b><code class='datatype'>string</code> <code class='argument'>sym</code><b>)</b></code></p></dd> +    <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>Attempt to resolve a symbol.</p>   <p> The default implementation calls <code>CompilerEnvironment()-&gt;resolv()</code>    in the parent object, with the remaining arguments taken from the    current <code>CPP</code> context.</p>   </dd>   <dt class='head--doc'>Returns</dt>   <dd class='body--doc'><p>Returns the value of <code>sym</code> if found, and <code>UNDEFINED</code> if not.</p>   </dd></dl>   </dd></dl><dl><dt><h2 class='header'>Class <b class='ms datatype'>CompilerEnvironment.PikeCompiler</b></h2>
autodoc.git/traditional_manual/chapter_21.html:5443:   <p> Returns <tt>UNDEFINED</tt> otherwise (this is not an error indication).</p>   </dd>   <dt class='head--doc'>See also</dt>   <dd class='body--doc'><p><code>pop_type_attribute()</code>, <code>push_type_attribute()</code></p>   </dd></dl>         <hr />   <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>apply_handler</b></span> + </dt> + <dd><p><code><code class='modifier'>protected</code> <code class='datatype'>mixed</code> <b><span class='method'>apply_handler</span>(</b><code class='datatype'>string</code> <code class='argument'>fun</code>, <code class='datatype'>mixed</code> ... <code class='argument'>args</code><b>)</b></code></p></dd> + </dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span>   <span class='homogen--name'><b>apply_type_attribute</b></span>   </dt>   <dd><p><code><code class='datatype'>bool</code> <b><span class='method'>apply_type_attribute</span>(</b><code class='datatype'>string</code> <code class='argument'>attribute</code>, <code class='type'>type</code> <code class='argument'>a</code>, <code class='type'>type</code>|<code class='datatype'>void</code> <code class='argument'>b</code><b>)</b></code></p></dd>      <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>Type attribute handler.</p>   </dd>   <dt class='head--doc'><span id='p-attribute'></span>Parameter <code class='parameter'>attribute</code></dt>   <dd></dd><dd class='body--doc'><p>Attribute that <code>a</code> had.</p>   </dd>
autodoc.git/traditional_manual/chapter_21.html:5482:   <dd class='body--doc'><p><code>pop_type_attribute()</code>, <code>push_type_attribute()</code></p>   </dd></dl>         <hr />   <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Method</span>   <span class='homogen--name'><b>change_compiler_compatibility</b></span>   </dt>   <dd><p><code><code class='datatype'>void</code> <b><span class='method'>change_compiler_compatibility</span>(</b><code class='datatype'>int</code> <code class='argument'>major</code>, <code class='datatype'>int</code> <code class='argument'>minor</code><b>)</b></code></p></dd> + </dl>    -  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>change_compiler_compatibility</b></span> + </dt> + <dd><p><code><code class='datatype'>void</code> <b><span class='method'>change_compiler_compatibility</span>(</b><code class='datatype'>int</code> <code class='argument'>major</code>, <code class='datatype'>int</code> <code class='argument'>minor</code><b>)</b></code></p></dd> +    <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>Change compiler to attempt to be compatible with Pike <code>major</code>.<code>minor</code>.</p>   </dd></dl>         <hr />   <dl class='group--doc'> -  + <dt class='head--type'><span class='homogen--type'>Variable</span> + <span class='homogen--name'><b>handler</b></span><br> + <span class='homogen--type'>Variable</span> + <span class='homogen--name'><b>compat_handler</b></span><br> + </dt> + <dd><p><code><code class='datatype'>object</code> CompilerEnvironment.PikeCompiler.<b><span class='variable'>handler</span></b></code><br> + <code><code class='datatype'>object</code> CompilerEnvironment.PikeCompiler.<b><span class='variable'>compat_handler</span></b></code></p></dd> + </dl> +  +  + <hr /> + <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Method</span>   <span class='homogen--name'><b>compile</b></span>   </dt>   <dd><p><code><code class='datatype'>program</code> <b><span class='method'>compile</span>(</b><b>)</b></code></p></dd>      <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>Compile the current source into a program.</p>   <p> This function compiles the current Pike source code    into a clonable program.</p>   </dd>
autodoc.git/traditional_manual/chapter_21.html:5563:    object will be destructed.</p>   </dd>   <dt class='head--doc'>See also</dt>   <dd class='body--doc'><p><code>compile_string()</code>, <code>compile_file()</code>, <code>cpp()</code>, <code>master()</code>,    <code>CompilationHandler</code></p>   </dd></dl>         <hr />   <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>create</b></span> + </dt> + <dd><p><code><span class='object'>CompilerEnvironment.PikeCompiler</span> <span class='class'>CompilerEnvironment.PikeCompiler</span><b>(</b><code class='datatype'>string</code>|<code class='datatype'>void</code> <code class='argument'>source</code>, <code class='datatype'>object</code>|<code class='datatype'>void</code> <code class='argument'>handler</code>, <code class='datatype'>int</code>|<code class='datatype'>void</code> <code class='argument'>major</code>, <code class='datatype'>int</code>|<code class='datatype'>void</code> <code class='argument'>minor</code>, <code class='datatype'>program</code>|<code class='datatype'>void</code> <code class='argument'>target</code>, <code class='datatype'>object</code>|<code class='datatype'>void</code> <code class='argument'>placeholder</code><b>)</b></code></p></dd> + </dl> +  +  + <hr /> + <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Variable</span>   <span class='homogen--name'><b>current_file</b></span>   </dt>   <dd><p><code><code class='datatype'>string</code> CompilerEnvironment.PikeCompiler.<b><span class='variable'>current_file</span></b></code></p></dd>      <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>The name of the file currently being compiled (during an active    compilation).</p>   </dd></dl>   
autodoc.git/traditional_manual/chapter_21.html:5592:   <dd class='body--doc'><p>The current line number (during an active compilation).</p>   </dd></dl>         <hr />   <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Method</span>   <span class='homogen--name'><b>get_compilation_handler</b></span>   </dt>   <dd><p><code><code class='datatype'>object</code> <b><span class='method'>get_compilation_handler</span>(</b><code class='datatype'>int</code> <code class='argument'>major</code>, <code class='datatype'>int</code> <code class='argument'>minor</code><b>)</b></code></p></dd> + </dl>    -  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>get_compilation_handler</b></span> + </dt> + <dd><p><code><code class='datatype'>object</code> <b><span class='method'>get_compilation_handler</span>(</b><code class='datatype'>int</code> <code class='argument'>major</code>, <code class='datatype'>int</code> <code class='argument'>minor</code><b>)</b></code></p></dd> +    <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>Get compatibility handler for Pike <code>major</code>.<code>minor</code>.</p>   </dd>   <dt class='head--doc'>Note</dt>   <dd class='body--doc'><p>This function is called by <code>change_compiler_compatibility()</code>.</p>   </dd></dl>         <hr />   <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Method</span>   <span class='homogen--name'><b>get_default_module</b></span>   </dt>   <dd><p><code><code class='datatype'>mapping</code>(<code class='datatype'>string</code>:<code class='datatype'>mixed</code>)|<code class='datatype'>object</code> <b><span class='method'>get_default_module</span>(</b><b>)</b></code></p></dd> -  + </dl>    -  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>get_default_module</b></span> + </dt> + <dd><p><code><code class='datatype'>mapping</code>(<code class='datatype'>string</code>:<code class='datatype'>mixed</code>)|<code class='datatype'>object</code> <b><span class='method'>get_default_module</span>(</b><b>)</b></code></p></dd> +    <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>Get the default module for the current compatibility level    (ie typically the value returned by <code>predef::all_constants()</code>).</p>   <p> The default implementation calls the corresponding function    in the current handler, the current compatibility handler    or in the parent <code>CompilerEnvironment</code> in that order.</p>   </dd>   <dt class='head--doc'>Returns</dt>   <dd class='body--doc'><table class='box'><tr><td><code><code class='datatype'>mapping</code>(<code class='datatype'>string</code>:<code class='datatype'>mixed</code>)|<code class='datatype'>object</code></code></td><td><p>Constant table to use.</p>   </td></tr>
autodoc.git/traditional_manual/chapter_21.html:5633:   <dd class='body--doc'><p>This function is called by <code>change_compiler_compatibility()</code>.</p>   </dd></dl>         <hr />   <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Method</span>   <span class='homogen--name'><b>handle_import</b></span>   </dt>   <dd><p><code><code class='datatype'>program</code> <b><span class='method'>handle_import</span>(</b><code class='datatype'>string</code> <code class='argument'>module</code><b>)</b></code></p></dd> + </dl>    -  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>handle_import</b></span> + </dt> + <dd><p><code><code class='datatype'>program</code> <b><span class='method'>handle_import</span>(</b><code class='datatype'>string</code> <code class='argument'>module</code><b>)</b></code></p></dd> +    <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>Look up an import <code>module</code>.</p>   </dd></dl>         <hr />   <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Method</span>   <span class='homogen--name'><b>handle_inherit</b></span>   </dt>   <dd><p><code><code class='datatype'>program</code> <b><span class='method'>handle_inherit</span>(</b><code class='datatype'>string</code> <code class='argument'>inh</code><b>)</b></code></p></dd> -  + </dl>    -  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>handle_inherit</b></span> + </dt> + <dd><p><code><code class='datatype'>program</code> <b><span class='method'>handle_inherit</span>(</b><code class='datatype'>string</code> <code class='argument'>inh</code><b>)</b></code></p></dd> +    <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>Look up an inherit <code>inh</code> in the current program.</p>   </dd></dl>         <hr />   <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Method</span>   <span class='homogen--name'><b>index_type_attribute</b></span>   </dt>
autodoc.git/traditional_manual/chapter_21.html:5678:    (ie <code class='expr'>__attribute__(attribute,&nbsp;a)[i]</code>), and    <code class='expr'>0</code> (zero) otherwise.</p>   </dd>   <dt class='head--doc'>See also</dt>   <dd class='body--doc'><p><code>pop_type_attribute()</code>, <code>push_type_attribute()</code></p>   </dd></dl>         <hr />   <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Inherit</span> + <span class='homogen--name'><b>this_program</b></span> + </dt> + <dd><p><code><span class='datatype'>inherit ::this_program</span> : <span class='inherit'>this_program</span></code></p></dd> + </dl> +  +  + <hr /> + <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Method</span>   <span class='homogen--name'><b>pop_type_attribute</b></span>   </dt>   <dd><p><code><code class='datatype'>bool</code> <b><span class='method'>pop_type_attribute</span>(</b><code class='datatype'>string</code> <code class='argument'>attribute</code>, <code class='type'>type</code> <code class='argument'>a</code>, <code class='type'>type</code> <code class='argument'>b</code><b>)</b></code></p></dd>      <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>Type attribute handler.</p>   <p> Called during type checking when <code class='expr'>a&nbsp;&lt;=&nbsp;b</code> and    <code>a</code> had the type attribute <code>attribute</code> before the    comparison.</p>
autodoc.git/traditional_manual/chapter_21.html:5732:   <dd class='body--doc'><p><code>pop_type_attribute()</code>, <code>index_type_attribute()</code></p>   </dd></dl>         <hr />   <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Method</span>   <span class='homogen--name'><b>report</b></span>   </dt>   <dd><p><code><code class='datatype'>void</code> <b><span class='method'>report</span>(</b><code class='object unresolved'>SeverityLevel</code> <code class='argument'>severity</code>, <code class='datatype'>string</code> <code class='argument'>filename</code>, <code class='datatype'>int</code> <code class='argument'>linenumber</code>, <code class='datatype'>string</code> <code class='argument'>subsystem</code>, <code class='datatype'>string</code> <code class='argument'>message</code>, <code class='datatype'>mixed</code> ... <code class='argument'>extra_args</code><b>)</b></code></p></dd> + </dl>    -  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>report</b></span> + </dt> + <dd><p><code><code class='datatype'>void</code> <b><span class='method'>report</span>(</b><code class='object unresolved'>SeverityLevel</code> <code class='argument'>severity</code>, <code class='datatype'>string</code> <code class='argument'>filename</code>, <code class='datatype'>int</code> <code class='argument'>linenumber</code>, <code class='datatype'>string</code> <code class='argument'>subsystem</code>, <code class='datatype'>string</code> <code class='argument'>message</code>, <code class='datatype'>mixed</code> ... <code class='argument'>extra_args</code><b>)</b></code></p></dd> +    <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>Report a diagnostic from the compiler.</p>   <p> The default implementation attempts to call the first    corresponding function in the active handlers in priority order:</p>   <ol>   <li><p>Call handler-&gt;report().</p>   </li><li><p>Call handler-&gt;compile_warning() or handler-&gt;compile_error()    depending on <code>severity</code>.</p>   </li><li><p>Call compat-&gt;report().</p>   </li><li><p>Call compat-&gt;compile_warning() or compat-&gt;compile_error()
autodoc.git/traditional_manual/chapter_21.html:5777:   <dd class='body--doc'><p><code>CompilerEnvironment()-&gt;report()</code></p>   </dd></dl>         <hr />   <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Method</span>   <span class='homogen--name'><b>resolv</b></span>   </dt>   <dd><p><code><code class='datatype'>mixed</code> <b><span class='method'>resolv</span>(</b><code class='datatype'>string</code> <code class='argument'>identifier</code><b>)</b></code></p></dd> + </dl>    -  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>resolv</b></span> + </dt> + <dd><p><code><code class='datatype'>mixed</code> <b><span class='method'>resolv</span>(</b><code class='datatype'>string</code> <code class='argument'>identifier</code><b>)</b></code></p></dd> +    <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>Resolve the symbol <code>identifier</code>.</p>   <p> The default implementation calls <code>CompilerEnvironment()-&gt;resolv()</code>    in the parent object, with the remaining arguments taken from the    current <code>PikeCompiler</code> context.</p>   </dd>   <dt class='head--doc'>Returns</dt>   <dd class='body--doc'><p>Returns the value of <code>sym</code> if found, and <code>UNDEFINED</code> if not.</p>   </dd></dl>   
autodoc.git/traditional_manual/chapter_21.html:6239:   <dt class='head--type'><span class='homogen--type'>Method</span>   <span class='homogen--name'><b>value</b></span>   </dt>   <dd><p><code><code class='datatype'>mixed</code> <b><span class='method'>value</span>(</b><b>)</b></code></p></dd>      <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>Returns the current value, or <code>UNDEFINED</code> if the iterator    doesn't point to any item.</p>   </dd></dl>   </dd></dl><dl><dt><h2 class='header'>Class <b class='ms datatype'>MasterObject</b></h2> - </dt><dd> + </dt><dd><dl class='group--doc'> + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Master control program for Pike.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>predef::master()</code>, <code>predef::replace_master()</code></p> + </dd></dl>      <hr />   <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Variable</span>   <span class='homogen--name'><b>Decoder</b></span>   </dt>   <dd><p><code><code class='datatype'>program</code> MasterObject.<b><span class='variable'>Decoder</span></b></code></p></dd>      <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>This program in the master is cloned and used as codec by
autodoc.git/traditional_manual/chapter_21.html:6282:    function.</p>   </dd>   <dt class='head--doc'>See also</dt>   <dd class='body--doc'><p><code>Encoder</code>, <code>Pike.Encoder</code></p>   </dd></dl>         <hr />   <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>_main</b></span> + </dt> + <dd><p><code><code class='datatype'>void</code> <b><span class='method'>_main</span>(</b><code class='datatype'>array</code>(<code class='datatype'>string(8bit)</code>) <code class='argument'>orig_argv</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>This function is called when all the driver is done with all setup +  of modules, efuns, tables etc. etc. and is ready to start executing +  _real_ programs. It receives the arguments not meant for the driver.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Variable</span> + <span class='homogen--name'><b>_pike_file_name</b></span><br> + <span class='homogen--type'>Variable</span> + <span class='homogen--name'><b>_master_file_name</b></span><br> + </dt> + <dd><p><code><code class='datatype'>string</code> MasterObject.<b><span class='variable'>_pike_file_name</span></b></code><br> + <code><code class='datatype'>string</code> MasterObject.<b><span class='variable'>_master_file_name</span></b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>These are useful if you want to start other Pike processes +  with the same options as this one was started with.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>add_filesystem_handler</b></span> + </dt> + <dd><p><code><code class='datatype'>mixed</code> <b><span class='method'>add_filesystem_handler</span>(</b><code class='datatype'>string</code> <code class='argument'>mountpoint</code>, <code class='datatype'>object</code> <code class='argument'>filesystem</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>mount a filesystem handler to be used by the resolver. on its own does noting, +  but may be used with <code>add_module_path</code> and friends to enable modules to be loaded +  from Filesystem objects.</p> + </dd> + <dt class='head--doc'><span id='p-mountpoint'></span>Parameter <code class='parameter'>mountpoint</code></dt> + <dd></dd><dd class='body--doc'><p>the location in the filesystem to mount the handler</p> + </dd> + <dt class='head--doc'><span id='p-filesystem'></span>Parameter <code class='parameter'>filesystem</code></dt> + <dd></dd><dd class='body--doc'><p>a filesystem object that will handle requests for the given mountpoint.</p> + </dd> + <dt class='head--doc'>Example</dt> + <dd class='example'><pre><p>master()-&gt;add_filesystem_handler("/foo/bar.zip", Filesystem.Zip("/foo/bar.zip")); +  master()-&gt;add_module_path("/foo/bar.zip/lib");</p> + </pre></dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>find_handler_for_path()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>asyncp</b></span> + </dt> + <dd><p><code><code class='datatype'>bool</code> <b><span class='method'>asyncp</span>(</b><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Returns 1 if we're in async-mode, e.g. if the main method has +  returned a negative number.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>backend_thread</b></span> + </dt> + <dd><p><code><code class='datatype'>object</code> <b><span class='method'>backend_thread</span>(</b><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>The backend_thread() function is useful to determine if you are +  the backend thread - important when doing async/sync protocols. +  This method is only available if thread_create is present.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Constant</span> + <span class='homogen--name'><b>bt_max_string_len</b></span> + </dt> + <dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> MasterObject.<code class='constant'>bt_max_string_len</code></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>This constant contains the maximum length of a function entry in a +  backtrace. Defaults to 200 if no BT_MAX_STRING_LEN define has been +  given.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span>   <span class='homogen--name'><b>cast_to_object</b></span>   </dt> -  + <dd><p><code><code class='datatype'>object</code> <b><span class='method'>cast_to_object</span>(</b><code class='datatype'>string</code> <code class='argument'>oname</code>, <code class='datatype'>string</code> <code class='argument'>current_file</code>, <code class='datatype'>object</code>|<code class='datatype'>void</code> <code class='argument'>current_handler</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>This function is called when the drivers wants to cast a string +  to an object because of an implict or explicit cast. This function +  may also receive more arguments in the future.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>cast_to_object</b></span> + </dt>   <dd><p><code><code class='datatype'>object</code> <b><span class='method'>cast_to_object</span>(</b><code class='datatype'>string</code> <code class='argument'>str</code>, <code class='datatype'>string</code>|<code class='datatype'>void</code> <code class='argument'>current_file</code><b>)</b></code></p></dd>      <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>Called by the Pike runtime to cast strings to objects.</p>   </dd>   <dt class='head--doc'><span id='p-str'></span>Parameter <code class='parameter'>str</code></dt>   <dd></dd><dd class='body--doc'><p>String to cast to object.</p>   </dd>   <dt class='head--doc'><span id='p-current_file'></span>Parameter <code class='parameter'>current_file</code></dt>   <dd></dd><dd class='body--doc'><p>Filename of the file that attempts to perform the cast.</p>
autodoc.git/traditional_manual/chapter_21.html:6308:   <dt class='head--doc'>See also</dt>   <dd class='body--doc'><p><code>cast_to_program()</code></p>   </dd></dl>         <hr />   <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Method</span>   <span class='homogen--name'><b>cast_to_program</b></span>   </dt> + <dd><p><code><code class='datatype'>program</code> <b><span class='method'>cast_to_program</span>(</b><code class='datatype'>string</code> <code class='argument'>pname</code>, <code class='datatype'>string</code> <code class='argument'>current_file</code>, <code class='datatype'>object</code>|<code class='datatype'>void</code> <code class='argument'>handler</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>This function is called when the driver wants to cast a string +  to a program, this might be because of an explicit cast, an inherit +  or a implict cast. In the future it might receive more arguments, +  to aid the master finding the right program.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>cast_to_program</b></span> + </dt>   <dd><p><code><code class='datatype'>program</code> <b><span class='method'>cast_to_program</span>(</b><code class='datatype'>string</code> <code class='argument'>str</code>, <code class='datatype'>string</code>|<code class='datatype'>void</code> <code class='argument'>current_file</code><b>)</b></code></p></dd>      <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>Called by the Pike runtime to cast strings to programs.</p>   </dd>   <dt class='head--doc'><span id='p-str'></span>Parameter <code class='parameter'>str</code></dt>   <dd></dd><dd class='body--doc'><p>String to cast to object.</p>   </dd>   <dt class='head--doc'><span id='p-current_file'></span>Parameter <code class='parameter'>current_file</code></dt>   <dd></dd><dd class='body--doc'><p>Filename of the file that attempts to perform the cast.</p>
autodoc.git/traditional_manual/chapter_21.html:6329:   <dt class='head--doc'>Returns</dt>   <dd class='body--doc'><p>Returns the resulting program.</p>   </dd>   <dt class='head--doc'>See also</dt>   <dd class='body--doc'><p><code>cast_to_object()</code></p>   </dd></dl>         <hr />   <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Variable</span> + <span class='homogen--name'><b>cflags</b></span> + </dt> + <dd><p><code><code class='datatype'>string</code> MasterObject.<b><span class='variable'>cflags</span></b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Flags suitable for use when compiling Pike C modules</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Variable</span> + <span class='homogen--name'><b>compat_major</b></span> + </dt> + <dd><p><code><code class='datatype'>int</code> MasterObject.<b><span class='variable'>compat_major</span></b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Major pike version to emulate.</p> + <p> This is typically set via the option <code class='expr'>"-V"</code>.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>compat_minor</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Variable</span> + <span class='homogen--name'><b>compat_minor</b></span> + </dt> + <dd><p><code><code class='datatype'>int</code> MasterObject.<b><span class='variable'>compat_minor</span></b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Minor pike version to emulate.</p> + <p> This is typically set via the option <code class='expr'>"-V"</code>.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>compat_major</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Method</span> -  + <span class='homogen--name'><b>compile_error</b></span> + </dt> + <dd><p><code><code class='datatype'>void</code> <b><span class='method'>compile_error</span>(</b><code class='datatype'>string</code> <code class='argument'>file</code>, <code class='datatype'>int</code> <code class='argument'>line</code>, <code class='datatype'>string</code> <code class='argument'>err</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>This function is called whenever a compile error occurs. <code>line</code> +  is zero for errors that aren't associated with any specific line. +  <code>err</code> is not newline terminated.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>compile_warning()</code>, <code>compile_exception()</code>, +  <code>get_inhibit_compile_errors()</code>, <code>set_inhibit_compile_errors()</code>,</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>compile_exception</b></span> + </dt> + <dd><p><code><code class='datatype'>int</code> <b><span class='method'>compile_exception</span>(</b><code class='datatype'>array</code>|<code class='datatype'>object</code> <code class='argument'>trace</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>This function is called when an exception is caught during +  compilation. Its message is also reported to <code>compile_error</code> if +  this function returns zero.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>compile_error()</code>, <code>compile_warning()</code>, +  <code>get_inhibit_compile_errors()</code>, <code>set_inhibit_compile_errors()</code>,</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>compile_warning</b></span> + </dt> + <dd><p><code><code class='datatype'>void</code> <b><span class='method'>compile_warning</span>(</b><code class='datatype'>string</code> <code class='argument'>file</code>, <code class='datatype'>int</code> <code class='argument'>line</code>, <code class='datatype'>string</code> <code class='argument'>err</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>This function is called whenever a compile warning occurs. <code>line</code> +  is zero for warnings that aren't associated with any specific +  line. <code>err</code> is not newline terminated.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>compile_error()</code>, <code>compile_exception()</code>, +  <code>get_inhibit_compile_errors()</code>, <code>set_inhibit_compile_errors()</code>,</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Variable</span> + <span class='homogen--name'><b>currentversion</b></span> + </dt> + <dd><p><code><code class='object unresolved'>Version</code> MasterObject.<b><span class='variable'>currentversion</span></b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Version information about the current Pike version.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span>   <span class='homogen--name'><b>decode_charset</b></span>   </dt> -  + <dd><p><code><code class='datatype'>string</code> <b><span class='method'>decode_charset</span>(</b><code class='datatype'>string</code> <code class='argument'>data</code>, <code class='datatype'>string</code> <code class='argument'>charset</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>This function is called by cpp() when it wants to do +  character code conversion.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>decode_charset</b></span> + </dt>   <dd><p><code><code class='datatype'>string</code> <b><span class='method'>decode_charset</span>(</b><code class='datatype'>string</code> <code class='argument'>raw</code>, <code class='datatype'>string</code> <code class='argument'>charset</code><b>)</b></code></p></dd>      <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>Convert <code>raw</code> from encoding <code>charset</code> to UNICODE.</p>   <p> This function is called by <code>cpp()</code> when it encounters    <code class='expr'>#charset</code> directives.</p>   </dd>   <dt class='head--doc'><span id='p-raw'></span>Parameter <code class='parameter'>raw</code></dt>   <dd></dd><dd class='body--doc'><p>String to convert.</p>   </dd>
autodoc.git/traditional_manual/chapter_21.html:6389:    with <code>add_constant()</code>.</p>   </dd>   <dt class='head--doc'>See also</dt>   <dd class='body--doc'><p><code>predef::describe_backtrace()</code></p>   </dd></dl>         <hr />   <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>describe_function</b></span> + </dt> + <dd><p><code><code class='datatype'>string</code> <b><span class='method'>describe_function</span>(</b><code class='datatype'>function</code>(:<code class='datatype void'>void</code>) <code class='argument'>f</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Function called by <code>describe_backtrace()</code> to describe +  functions in the backtrace.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>describe_module</b></span> + </dt> + <dd><p><code><code class='datatype'>string</code> <b><span class='method'>describe_module</span>(</b><code class='datatype'>object</code>|<code class='datatype'>program</code> <code class='argument'>mod</code>, <code class='datatype'>array</code>(<code class='datatype'>object</code>)|<code class='datatype'>void</code> <code class='argument'>ret_obj</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Describe the path to the module <code>mod</code>.</p> + </dd> + <dt class='head--doc'><span id='p-mod'></span>Parameter <code class='parameter'>mod</code></dt> + <dd></dd><dd class='body--doc'><p>If <code>mod</code> is a program, attempt to describe the path +  to a clone of <code>mod</code>.</p> + </dd> + <dt class='head--doc'><span id='p-ret_obj'></span>Parameter <code class='parameter'>ret_obj</code></dt> + <dd></dd><dd class='body--doc'><p>If an instance of <code>mod</code> is found, it will be returned +  by changing element <code class='expr'>0</code> of <code>ret_obj</code>.</p> + </dd> + <dt class='head--doc'>Returns</dt> + <dd class='body--doc'><p>The a description of the path.</p> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p>The returned description will end with a proper indexing method +  currently either <code class='expr'>"."</code> or <code class='expr'>"-&gt;"</code>.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>describe_object</b></span> + </dt> + <dd><p><code><code class='datatype'>string</code> <b><span class='method'>describe_object</span>(</b><code class='datatype'>object</code> <code class='argument'>o</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Function called by <code class='expr'>sprintf("%O")</code> for objects that don't +  have an <code>lfun::_sprintf()</code>, or have one that returns <code class='expr'>UNDEFINED</code>.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>describe_program</b></span> + </dt> + <dd><p><code><code class='datatype'>string</code> <b><span class='method'>describe_program</span>(</b><code class='datatype'>program</code>|<code class='datatype'>function</code>(:<code class='datatype void'>void</code>) <code class='argument'>p</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Function called by <code class='expr'>sprintf("%O")</code> for programs.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Variable</span> + <span class='homogen--name'><b>doc_prefix</b></span> + </dt> + <dd><p><code><code class='datatype'>string</code> MasterObject.<b><span class='variable'>doc_prefix</span></b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Prefix for autodoc files.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Variable</span> + <span class='homogen--name'><b>programs</b></span><br> + <span class='homogen--type'>Variable</span> + <span class='homogen--name'><b>documentation</b></span><br> + <span class='homogen--type'>Variable</span> + <span class='homogen--name'><b>source_cache</b></span><br> + </dt> + <dd><p><code><code class='datatype'>mapping</code>(<code class='datatype'>string</code>:<code class='datatype'>program</code>|<code class='object unresolved'>NoValue</code>) MasterObject.<b><span class='variable'>programs</span></b></code><br> + <code><code class='datatype'>mapping</code>(<code class='datatype'>program</code>:<code class='datatype'>object</code>) MasterObject.<b><span class='variable'>documentation</span></b></code><br> + <code><code class='datatype'>mapping</code>(<code class='datatype'>program</code>:<code class='datatype'>string</code>) MasterObject.<b><span class='variable'>source_cache</span></b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Mapping containing the cache of currently compiled files.</p> + <p> This mapping currently has the following structure:</p> + <table class='box'><tr><td><code><code class='key'>filename</code> : <code class='datatype'>program</code></code></td></tr> + </table><p>The filename path separator is / on both NT and UNIX.</p> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p>Special cases: The current master program is available under the +  name <code class='expr'>"/master"</code>, and the program containing the <code>main</code> +  function under <code class='expr'>"/main"</code>.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>enable_source_cache</b></span> + </dt> + <dd><p><code><code class='datatype'>void</code> <b><span class='method'>enable_source_cache</span>(</b><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Enable caching of sources from compile_string()</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>fc_reverse_lookup</b></span> + </dt> + <dd><p><code><code class='datatype'>string</code> <b><span class='method'>fc_reverse_lookup</span>(</b><code class='datatype'>object</code> <code class='argument'>obj</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Returns the path for <code>obj</code> in <code>fc</code>, if it got any.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>find_handler_for_path</b></span> + </dt> + <dd><p><code><code class='datatype'>string</code> <b><span class='method'>find_handler_for_path</span>(</b><code class='datatype'>string</code> <code class='argument'>file</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Return the mountpoint for the filesystem handler handling the +  <code>file</code> (if any).</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>add_filesystem_handler()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>get_compat_master</b></span> + </dt> + <dd><p><code><code class='datatype'>object</code> <b><span class='method'>get_compat_master</span>(</b><code class='datatype'>int</code> <code class='argument'>major</code>, <code class='datatype'>int</code> <code class='argument'>minor</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Return a master object compatible with the specified version of Pike.</p> + <p> This function is used to implement the various compatibility versions +  of <code>master()</code>.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>get_compilation_handler()</code>, <code>master()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span>   <span class='homogen--name'><b>get_compilation_handler</b></span>   </dt>   <dd><p><code><code class='object unresolved'>CompilationHandler</code> <b><span class='method'>get_compilation_handler</span>(</b><code class='datatype'>int</code> <code class='argument'>major</code>, <code class='datatype'>int</code> <code class='argument'>minor</code><b>)</b></code></p></dd>      <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>Get compilation handler for simulation of Pike v<code>major</code>.<code>minor</code>.</p>   <p> This function is called by <code>cpp()</code> when it encounters    <code class='expr'>#pike</code> directives.</p>   </dd>   <dt class='head--doc'><span id='p-major'></span>Parameter <code class='parameter'>major</code></dt>
autodoc.git/traditional_manual/chapter_21.html:6412:   <dd></dd><dd class='body--doc'><p>Minor version.</p>   </dd>   <dt class='head--doc'>Returns</dt>   <dd class='body--doc'><p>Returns a compilation handler for Pike &gt;= <code>major</code>.<code>minor</code>.</p>   </dd></dl>         <hr />   <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>get_inhibit_compile_errors</b></span> + </dt> + <dd><p><code><code class='datatype'>mixed</code> <b><span class='method'>get_inhibit_compile_errors</span>(</b><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Get the current compile error, warning and exception behaviour.</p> + <p> See <code>set_inhibit_compile_errors()</code> for details.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>set_inhibit_compile_errors()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>get_precompiled_mtime</b></span> + </dt> + <dd><p><code><code class='datatype'>int</code> <b><span class='method'>get_precompiled_mtime</span>(</b><code class='datatype'>string</code> <code class='argument'>id</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Given an identifier returned by query_precompiled_names, returns +  the mtime of the precompiled entry. Returns -1 if there is no +  entry.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>handle_attribute</b></span> + </dt> + <dd><p><code><code class='modifier'>optional</code> <code class='datatype'>bool</code> <b><span class='method'>handle_attribute</span>(</b><code class='datatype'>mixed</code> <code class='argument'>value</code>, <code class='datatype'>string</code> <code class='argument'>attribute</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>This function is called in runtime check_types mode (<tt>-rt</tt>), +  when encountering a soft cast to an attributed type.</p> + </dd> + <dt class='head--doc'><span id='p-value'></span>Parameter <code class='parameter'>value</code></dt> + <dd></dd><dd class='body--doc'><p>Value that is about to receive the attribute.</p> + </dd> + <dt class='head--doc'><span id='p-attribute'></span>Parameter <code class='parameter'>attribute</code></dt> + <dd></dd><dd class='body--doc'><p>Type attribute to validate.</p> + </dd> + <dt class='head--doc'>Returns</dt> + <dd class='body--doc'><p>Returns one of:</p> + <table class='box'><tr><td><code><code class='key'>1</code></code></td><td><p>If the attribute is valid for the value.</p> + </td></tr> + <tr><td><code><code class='key'>0</code></code></td><td><p>If the attribute is not valid for the value.</p> + </td></tr> + <tr><td><code><code class='key'>UNDEFINED</code></code></td><td><p>If the attribute is unsupported.</p> + </td></tr> + </table><p>The default master implements validation of the <code class='expr'>"utf8"</code> +  attribute.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span>   <span class='homogen--name'><b>handle_error</b></span>   </dt>   <dd><p><code><code class='datatype'>void</code> <b><span class='method'>handle_error</span>(</b><code class='datatype'>mixed</code> <code class='argument'>exception</code><b>)</b></code></p></dd>      <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>Called by the Pike runtime if an exception isn't caught.</p>   </dd>   <dt class='head--doc'><span id='p-exception'></span>Parameter <code class='parameter'>exception</code></dt>   <dd></dd><dd class='body--doc'><p>Value that was <code>throw()</code>'n.</p>   </dd>   <dt class='head--doc'>See also</dt>   <dd class='body--doc'><p><code>describe_backtrace()</code></p>   </dd></dl>         <hr />   <dl class='group--doc'> -  + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>handle_error</b></span> + </dt> + <dd><p><code><code class='datatype'>void</code> <b><span class='method'>handle_error</span>(</b><code class='datatype'>array</code>|<code class='datatype'>object</code> <code class='argument'>trace</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>This function is called when an error occurs that is not caught +  with catch().</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>handle_inherit</b></span> + </dt> + <dd><p><code><code class='datatype'>program</code> <b><span class='method'>handle_inherit</span>(</b><code class='datatype'>string</code> <code class='argument'>pname</code>, <code class='datatype'>string</code> <code class='argument'>current_file</code>, <code class='datatype'>object</code>|<code class='datatype'>void</code> <code class='argument'>handler</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>This function is called whenever a inherit is called for. +  It is supposed to return the program to inherit. +  The first argument is the argument given to inherit, and the second +  is the file name of the program currently compiling. Note that the +  file name can be changed with #line, or set by compile_string, so +  it can not be 100% trusted to be a filename. +  previous_object(), can be virtually anything in this function, as it +  is called from the compiler.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Variable</span> + <span class='homogen--name'><b>include_prefix</b></span> + </dt> + <dd><p><code><code class='datatype'>string</code> MasterObject.<b><span class='variable'>include_prefix</span></b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Prefix for Pike-related C header files.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Inherit</span> -  + <span class='homogen--name'><b>Codec</b></span> + </dt> + <dd><p><code><span class='datatype'>inherit Codec</span> : <span class='inherit'>Codec</span></code></p></dd> + </dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Inherit</span> + <span class='homogen--name'><b>CompatResolver</b></span> + </dt> + <dd><p><code><span class='datatype'>inherit CompatResolver</span> : <span class='inherit'>CompatResolver</span></code></p></dd> + </dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Inherit</span>   <span class='homogen--name'><b>CompilationHandler</b></span>   </dt>   <dd><p><code><span class='datatype'>inherit CompilationHandler</span> : <span class='inherit'>CompilationHandler</span></code></p></dd>      <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>The master object acts as fallback compilation handler for    <code>compile()</code> and <code>cpp()</code>.</p>   </dd></dl>         <hr />   <dl class='group--doc'> -  + <dt class='head--type'><span class='homogen--type'>Inherit</span> + <span class='homogen--name'><b>Pike_8_0_master</b></span> + </dt> + <dd><p><code><span class='datatype'><code class='modifier'>protected</code> inherit Pike_8_0_master</span> : <span class='inherit'>Pike_8_0_master</span></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Namespaces for compat masters.</p> + <p> This inherit is used to provide compatibility namespaces +  for <code>get_compat_master()</code>.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>get_compat_master()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Variable</span> + <span class='homogen--name'><b>is_pike_master</b></span> + </dt> + <dd><p><code><code class='datatype'>int</code> MasterObject.<b><span class='variable'>is_pike_master</span></b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>This integer variable should exist in any object that aspires to be +  the master. It gets set to 1 when the master is installed, and is +  therefore set in any object that is or has been the master. That +  makes the Encoder class encode references to the master and all +  ex-masters as references to the current master object.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Variable</span> + <span class='homogen--name'><b>ldflags</b></span> + </dt> + <dd><p><code><code class='datatype'>string</code> MasterObject.<b><span class='variable'>ldflags</span></b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Flags suitable for use when linking Pike C modules</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Method</span> -  + <span class='homogen--name'><b>master_read_file</b></span> + </dt> + <dd><p><code><code class='datatype'>string</code> <b><span class='method'>master_read_file</span>(</b><code class='datatype'>string</code> <code class='argument'>file</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Read a file from the master filesystem.</p> + <p> The master filesystem defaults to the system filesystem, +  but additional mountpoints may be added via +  <code>add_filesystem_handler()</code>.</p> + <p> All file I/O performed by the <code>MasterObject</code> is performed +  via this function and its related functions.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>add_filesystem_handler()</code>, <code>find_handler_for_path()</code>, +  <code>master_get_dir()</code>, <code>master_file_stat()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>module_defined</b></span> + </dt> + <dd><p><code><code class='datatype'>array</code>(<code class='datatype'>string</code>) <b><span class='method'>module_defined</span>(</b><code class='datatype'>object</code>|<code class='datatype'>program</code> <code class='argument'>mod</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Find the files in which <code>mod</code> is defined, as they may be hidden away in +  joinnodes and dirnodes</p> + </dd> + <dt class='head--doc'><span id='p-mod'></span>Parameter <code class='parameter'>mod</code></dt> + <dd></dd><dd class='body--doc'><p>The module we are looking for.</p> + </dd> + <dt class='head--doc'>Returns</dt> + <dd class='body--doc'><p>An array of strings with filenames. +  (one for each file in a joinnode, or just one otherwise)</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>objects_reverse_lookup</b></span> + </dt> + <dd><p><code><code class='datatype'>program</code> <b><span class='method'>objects_reverse_lookup</span>(</b><code class='datatype'>object</code> <code class='argument'>obj</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Returns the program for <code>obj</code>, if known to the master.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Constant</span> + <span class='homogen--name'><b>out_of_date_warning</b></span> + </dt> + <dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> MasterObject.<code class='constant'>out_of_date_warning</code></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Should Pike complain about out of date compiled files. +  1 means yes and 0 means no. Controlled by the OUT_OF_DATE_WARNING +  define.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>program_path_to_name</b></span> + </dt> + <dd><p><code><code class='datatype'>string</code> <b><span class='method'>program_path_to_name</span>(</b><code class='datatype'>string</code> <code class='argument'>path</code>, <code class='datatype'>void</code>|<code class='datatype'>string</code> <code class='argument'>module_prefix</code>, <code class='datatype'>void</code>|<code class='datatype'>string</code> <code class='argument'>module_suffix</code>, <code class='datatype'>void</code>|<code class='datatype'>string</code> <code class='argument'>object_suffix</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Converts a module path on the form <code class='expr'>"Foo.pmod/Bar.pmod"</code> or +  <code class='expr'>"/path/to/pike/lib/modules/Foo.pmod/Bar.pmod"</code> to a module +  identifier on the form <code class='expr'>"Foo.Bar"</code>.</p> + <p> If <code>module_prefix</code> or <code>module_suffix</code> are given, they are +  prepended and appended, respectively, to the returned string if +  it's a module file (i.e. ends with <code class='expr'>".pmod"</code> or +  <code class='expr'>".so"</code>). If <code>object_suffix</code> is given, it's appended to the +  returned string if it's an object file (i.e. ends with +  <code class='expr'>".pike"</code>).</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>programs_reverse_lookup</b></span> + </dt> + <dd><p><code><code class='datatype'>string</code> <b><span class='method'>programs_reverse_lookup</span>(</b><code class='datatype'>program</code> <code class='argument'>prog</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Returns the path for <code>prog</code> in <code>programs</code>, if it got any.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>query_precompiled_names</b></span> + </dt> + <dd><p><code><code class='datatype'>array</code>(<code class='datatype'>string</code>) <b><span class='method'>query_precompiled_names</span>(</b><code class='datatype'>string</code> <code class='argument'>fname</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Returns identifiers (e.g. file names) of potentially precompiled +  files in priority order.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>read_precompiled</b></span> + </dt> + <dd><p><code><code class='datatype'>string</code> <b><span class='method'>read_precompiled</span>(</b><code class='datatype'>string</code> <code class='argument'>id</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Given an identifier returned by query_precompiled_names, returns +  the precompiled entry. Can assume the entry exists.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span>   <span class='homogen--name'><b>runtime_warning</b></span>   </dt>   <dd><p><code><code class='datatype'>void</code> <b><span class='method'>runtime_warning</span>(</b><code class='datatype'>string</code> <code class='argument'>subsystem</code>, <code class='datatype'>string</code> <code class='argument'>msg</code>, <code class='datatype'>mixed</code>|<code class='datatype'>void</code> <code class='argument'>data</code><b>)</b></code></p></dd>      <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>Called by the Pike runtime to warn about data inconsistencies.</p>   </dd>   <dt class='head--doc'><span id='p-subsystem'></span>Parameter <code class='parameter'>subsystem</code></dt>   <dd></dd><dd class='body--doc'><p>Runtime subsystem where the warning was generated.    Currently the following subsystems may call this function:</p>
autodoc.git/traditional_manual/chapter_21.html:6475:   </table>   </dd>   <dt class='head--doc'><span id='p-data'></span>Parameter <code class='parameter'>data</code></dt>   <dd></dd><dd class='body--doc'><p>Optional data that further describes the warning specified by <code>msg</code>.</p>   </dd></dl>         <hr />   <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>runtime_warning</b></span> + </dt> + <dd><p><code><code class='datatype'>void</code> <b><span class='method'>runtime_warning</span>(</b><code class='datatype'>string</code> <code class='argument'>where</code>, <code class='datatype'>string</code> <code class='argument'>what</code>, <code class='datatype'>mixed</code> ... <code class='argument'>args</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Called for every runtime warning. The first argument identifies +  where the warning comes from, the second identifies the specific +  message, and the rest depends on that. See code below for currently +  implemented warnings.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>set_inhibit_compile_errors</b></span> + </dt> + <dd><p><code><code class='datatype'>void</code> <b><span class='method'>set_inhibit_compile_errors</span>(</b><code class='datatype'>mixed</code> <code class='argument'>behaviour</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Set the compile error, warning and exception behaviour.</p> + </dd> + <dt class='head--doc'><span id='p-behaviour'></span>Parameter <code class='parameter'>behaviour</code></dt> + <dd></dd><dd class='body--doc'><p>The desired behaviour. One of:</p> + <table class='box'><tr><td><code><code class='datatype'>int(0..0)</code></code></td><td><p>Output compilation errors and warnings to <tt>stderr</tt>. +  This is the default behaviour.</p> + </td></tr> + <tr><td><code><code class='datatype'>int(1..1)</code></code></td><td><p>Inhibit output of compilator diagnostics.</p> + </td></tr> + <tr><td><code><code class='datatype'>function</code>(<code class='datatype'>string</code>, <code class='datatype'>int</code>, <code class='datatype'>string</code>:<code class='datatype'>void</code>)</code></td><td><p>Function to call for compilation errors. Compilation +  warnings and exceptions are inhibited.</p> + <p> The function will be called with the same arguments +  as those passed to <code>compile_error()</code>.</p> + </td></tr> + <tr><td><code><code class='object unresolved'>CompilationHandler</code></code></td><td><p>Compilation handler to use for diagnostics.</p> + </td></tr> + </table> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p>Note that the behaviour is thread local, and is not copied +  to new threads when they are created.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>get_inhibit_compile_errors()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>show_doc</b></span> + </dt> + <dd><p><code><code class='datatype'>object</code> <b><span class='method'>show_doc</span>(</b><code class='datatype'>program</code>|<code class='datatype'>object</code>|<code class='datatype'>function</code>(:<code class='datatype void'>void</code>) <code class='argument'>obj</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Show documentation for the item <code>obj</code></p> + </dd> + <dt class='head--doc'><span id='p-obj'></span>Parameter <code class='parameter'>obj</code></dt> + <dd></dd><dd class='body--doc'><p>The object for which the documentation should be shown</p> + </dd> + <dt class='head--doc'>Returns</dt> + <dd class='body--doc'><p>an AutoDoc object</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Variable</span> + <span class='homogen--name'><b>show_if_constant_errors</b></span> + </dt> + <dd><p><code><code class='datatype'>int</code> MasterObject.<b><span class='variable'>show_if_constant_errors</span></b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Show compilation warnings from compilation of <code>cpp()</code> +  <code class='expr'>#if&nbsp;constant()</code> expressions.</p> + <p> This is typically set via the option <code class='expr'>"--picky-cpp"</code>.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span>   <span class='homogen--name'><b>thread_quanta_exceeded</b></span>   </dt>   <dd><p><code><code class='datatype'>void</code> <b><span class='method'>thread_quanta_exceeded</span>(</b><code class='object unresolved'>Thread.Thread</code> <code class='argument'>thread</code>, <code class='datatype'>int</code> <code class='argument'>ns</code><b>)</b></code></p></dd>      <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>Function called when a thread has exceeded the thread quanta.</p>   </dd>   <dt class='head--doc'><span id='p-thread'></span>Parameter <code class='parameter'>thread</code></dt>   <dd></dd><dd class='body--doc'><p>Thread that exceeded the thread quanta.</p>   </dd>
autodoc.git/traditional_manual/chapter_21.html:6517:   <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>Unregister a program that was only partially compiled.</p>   <p> Called by <code>compile()</code> to clean up references to partially compiled    programs.</p>   </dd>   <dt class='head--doc'><span id='p-p'></span>Parameter <code class='parameter'>p</code></dt>   <dd></dd><dd class='body--doc'><p>Partially compiled program that should no longer be referenced.</p>   </dd><dt class='head--fixme'>FIXME</dt>   <dd class='body--fixme'><p>Shouldn't this function be in the compilation handler?</p>   </dd></dl> - </dd></dl><dl><dt><h2 class='header'>Class <b class='ms datatype'>RandomInterface</b></h2> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Variable</span> + <span class='homogen--name'><b>want_warnings</b></span> + </dt> + <dd><p><code><code class='datatype'>int</code> MasterObject.<b><span class='variable'>want_warnings</span></b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>If not zero compilation warnings will be written out on stderr.</p> + </dd></dl> + <dl><dt><h2 class='header'>Class <b class='ms datatype'>MasterObject.Codec</b></h2> + </dt><dd><dl class='group--doc'> + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p><code>Encoder</code> and <code>Decoder</code> rolled into one. This is for mainly +  compatibility; there's typically no use combining encoding and +  decoding into the same object.</p> + </dd></dl> +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>create</b></span> + </dt> + <dd><p><code><span class='object'>MasterObject.Codec</span> <span class='class'>MasterObject.Codec</span><b>(</b><code class='datatype'>void</code>|<code class='datatype'>mixed</code> <code class='argument'>encoded</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>The optional argument is the thing to encode; it's passed on to +  <code>Encoder</code>.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Inherit</span> + <span class='homogen--name'><b>Decoder</b></span> + </dt> + <dd><p><code><span class='datatype'>inherit Decoder</span> : <span class='inherit'>Decoder</span></code></p></dd> + </dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Inherit</span> + <span class='homogen--name'><b>Encoder</b></span> + </dt> + <dd><p><code><span class='datatype'>inherit Encoder</span> : <span class='inherit'>Encoder</span></code></p></dd> + </dl> + </dd></dl><dl><dt><h2 class='header'>Class <b class='ms datatype'>MasterObject.CompatResolver</b></h2> + </dt><dd><dl class='group--doc'> + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Resolver of symbols not located in the program being compiled.</p> + </dd></dl> +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>add_include_path</b></span> + </dt> + <dd><p><code><code class='datatype'>void</code> <b><span class='method'>add_include_path</span>(</b><code class='datatype'>string</code> <code class='argument'>tmp</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Add a directory to search for include files.</p> + <p> This is the same as the command line option <tt>-I</tt>.</p> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p>Note that the added directory will only be searched when using +  &lt; &gt; to quote the included file.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>remove_include_path()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>add_module_path</b></span> + </dt> + <dd><p><code><code class='datatype'>void</code> <b><span class='method'>add_module_path</span>(</b><code class='datatype'>string</code> <code class='argument'>path</code>, <code class='datatype'>string</code>|<code class='datatype'>void</code> <code class='argument'>subpath</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Add a directory to search for modules.</p> + <p> This is the same as the command line option <tt>-M</tt>.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>remove_module_path()</code></p> + </dd> + <dt class='head--doc'><span id='p-path'></span>Parameter <code class='parameter'>path</code></dt> + <dd></dd><dd class='body--doc'><p>a string containing a path to search for Pike modules. May be a +  directory, or a path to a ZIP archive. If a ZIP archive path is +  provided, modules will be loaded from a directory, "modules" within +  the ZIP archive (see the subpath argument).</p> + </dd> + <dt class='head--doc'><span id='p-subpath'></span>Parameter <code class='parameter'>subpath</code></dt> + <dd></dd><dd class='body--doc'><p>if path is a ZIP archive, this argument will determine the path within +  the archive to be searched.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>add_predefine</b></span> + </dt> + <dd><p><code><code class='datatype'>void</code> <b><span class='method'>add_predefine</span>(</b><code class='datatype'>string</code> <code class='argument'>name</code>, <code class='datatype'>mixed</code> <code class='argument'>value</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Add a define (without arguments) which will be implicitly +  defined in <code>cpp</code> calls.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>add_program_path</b></span> + </dt> + <dd><p><code><code class='datatype'>void</code> <b><span class='method'>add_program_path</span>(</b><code class='datatype'>string</code> <code class='argument'>tmp</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Add a directory to search for programs.</p> + <p> This is the same as the command line option <tt>-P</tt>.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>remove_program_path()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>create</b></span> + </dt> + <dd><p><code><span class='object'>MasterObject.CompatResolver</span> <span class='class'>MasterObject.CompatResolver</span><b>(</b><code class='datatype'>mixed</code> <code class='argument'>version</code>, <code class='object unresolved'>CompatResolver</code>|<code class='datatype'>void</code> <code class='argument'>fallback_resolver</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>The CompatResolver is initialized with a value that can be +  casted into a "%d.%d" string, e.g. a version object.</p> + <p> It can also optionally be initialized with a fallback resolver.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Variable</span> + <span class='homogen--name'><b>fallback_resolver</b></span> + </dt> + <dd><p><code><code class='object unresolved'>CompatResolver</code> MasterObject.CompatResolver.<b><span class='variable'>fallback_resolver</span></b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>If we fail to resolv, try the fallback.</p> + <p> Typical configuration: +  <pre>0.6-&gt;7.0-&gt;7.2-&gt; ... -&gt;master</pre></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>get_default_module</b></span> + </dt> + <dd><p><code><code class='datatype'>mapping</code> <b><span class='method'>get_default_module</span>(</b><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Return the default module for the <code>CompatResolver</code>.</p> + <p> This is the mapping that corresponds to the <code>predef::</code> +  name space for the compatibility level, and is the +  value returned by <code>all_constants()</code> for the same.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>get_predefines</b></span> + </dt> + <dd><p><code><code class='datatype'>mapping</code> <b><span class='method'>get_predefines</span>(</b><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Returns a mapping with the current predefines.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>handle_include</b></span> + </dt> + <dd><p><code><code class='datatype'>string</code> <b><span class='method'>handle_include</span>(</b><code class='datatype'>string</code> <code class='argument'>f</code>, <code class='datatype'>string</code> <code class='argument'>current_file</code>, <code class='datatype'>int</code> <code class='argument'>local_include</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>This function is called whenever an #include directive is +  encountered. It receives the argument for #include and should +  return the file name of the file to include.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>read_include()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Variable</span> + <span class='homogen--name'><b>handler_root_modules</b></span> + </dt> + <dd><p><code><code class='datatype'>mapping</code>(<code class='datatype'>object</code>:<code class='object unresolved'>joinnode</code>) MasterObject.CompatResolver.<b><span class='variable'>handler_root_modules</span></b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Lookup from handler module to corresponding root_module.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>instantiate_static_modules</b></span> + </dt> + <dd><p><code><code class='modifier'>protected</code> <code class='datatype'>mapping</code>(<code class='datatype'>string</code>:<code class='datatype'>mixed</code>) <b><span class='method'>instantiate_static_modules</span>(</b><code class='datatype'>object</code>|<code class='datatype'>mapping</code> <code class='argument'>static_modules</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Instantiate static modules in the same way that dynamic modules +  are instantiated.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Variable</span> + <span class='homogen--name'><b>pike_include_path</b></span> + </dt> + <dd><p><code><code class='datatype'>array</code>(<code class='datatype'>string</code>) MasterObject.CompatResolver.<b><span class='variable'>pike_include_path</span></b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>The complete include search path</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Variable</span> + <span class='homogen--name'><b>pike_module_path</b></span> + </dt> + <dd><p><code><code class='datatype'>array</code>(<code class='datatype'>string</code>) MasterObject.CompatResolver.<b><span class='variable'>pike_module_path</span></b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>The complete module search path</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Variable</span> + <span class='homogen--name'><b>pike_program_path</b></span> + </dt> + <dd><p><code><code class='datatype'>array</code>(<code class='datatype'>string</code>) MasterObject.CompatResolver.<b><span class='variable'>pike_program_path</span></b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>The complete program search path</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>read_include</b></span> + </dt> + <dd><p><code><code class='datatype'>string</code> <b><span class='method'>read_include</span>(</b><code class='datatype'>string</code> <code class='argument'>f</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Read the file specified by <code>handle_include()</code>.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>handle_include()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>remove_include_path</b></span> + </dt> + <dd><p><code><code class='datatype'>void</code> <b><span class='method'>remove_include_path</span>(</b><code class='datatype'>string</code> <code class='argument'>tmp</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Remove a directory to search for include files.</p> + <p> This function performs the reverse operation of <code>add_include_path()</code>.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>add_include_path()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>remove_module_path</b></span> + </dt> + <dd><p><code><code class='datatype'>void</code> <b><span class='method'>remove_module_path</span>(</b><code class='datatype'>string</code> <code class='argument'>tmp</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Remove a directory to search for modules.</p> + <p> This function performs the reverse operation of <code>add_module_path()</code>.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>add_module_path()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>remove_predefine</b></span> + </dt> + <dd><p><code><code class='datatype'>void</code> <b><span class='method'>remove_predefine</span>(</b><code class='datatype'>string</code> <code class='argument'>name</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Remove a define from the set that are implicitly defined in +  <code>cpp</code> calls.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>remove_program_path</b></span> + </dt> + <dd><p><code><code class='datatype'>void</code> <b><span class='method'>remove_program_path</span>(</b><code class='datatype'>string</code> <code class='argument'>tmp</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Remove a directory to search for programs.</p> + <p> This function performs the reverse operation of <code>add_program_path()</code>.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>add_program_path()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>resolv</b></span> + </dt> + <dd><p><code><code class='datatype'>mixed</code> <b><span class='method'>resolv</span>(</b><code class='datatype'>string</code> <code class='argument'>identifier</code>, <code class='datatype'>string</code>|<code class='datatype'>void</code> <code class='argument'>current_file</code>, <code class='datatype'>object</code>|<code class='datatype'>void</code> <code class='argument'>current_handler</code>, <code class='datatype'>object</code>|<code class='datatype'>void</code> <code class='argument'>current_compat_handler</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Resolve the <code>identifier</code> expression.</p> + </dd> + <dt class='head--doc'>Returns</dt> + <dd class='body--doc'><p>Returns the value of the <code>identifier</code> if it exists, +  and <code>UNDEFINED</code> otherwise.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>resolv_base</b></span> + </dt> + <dd><p><code><code class='datatype'>mixed</code> <b><span class='method'>resolv_base</span>(</b><code class='datatype'>string</code> <code class='argument'>identifier</code>, <code class='datatype'>string</code>|<code class='datatype'>void</code> <code class='argument'>current_file</code>, <code class='datatype'>object</code>|<code class='datatype'>void</code> <code class='argument'>current_handler</code>, <code class='datatype'>object</code>|<code class='datatype'>void</code> <code class='argument'>current_compat_handler</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Look up <code>identifier</code> in the root module.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>resolv_or_error</b></span> + </dt> + <dd><p><code><code class='datatype'>mixed</code> <b><span class='method'>resolv_or_error</span>(</b><code class='datatype'>string</code> <code class='argument'>identifier</code>, <code class='datatype'>string</code>|<code class='datatype'>void</code> <code class='argument'>current_file</code>, <code class='datatype'>void</code>|<code class='datatype'>object</code> <code class='argument'>current_handler</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Same as <code>resolv</code>, but throws an error instead of returning +  <code>UNDEFINED</code> if the resolv failed.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Variable</span> + <span class='homogen--name'><b>root_module</b></span> + </dt> + <dd><p><code><code class='object unresolved'>joinnode</code> MasterObject.CompatResolver.<b><span class='variable'>root_module</span></b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Join node of the root modules for this resolver.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Variable</span> + <span class='homogen--name'><b>system_module_path</b></span> + </dt> + <dd><p><code><code class='datatype'>array</code>(<code class='datatype'>string</code>) MasterObject.CompatResolver.<b><span class='variable'>system_module_path</span></b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>The pike system module path, not including any set by the user.</p> + </dd></dl> + </dd></dl><dl><dt><h2 class='header'>Class <b class='ms datatype'>MasterObject.Decoder</b></h2> + </dt><dd><dl class='group--doc'> + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Codec for use with <code>decode_value</code>. This is the decoder +  corresponding to <code>Encoder</code>. See that one for more details.</p> + </dd></dl> +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>create</b></span> + </dt> + <dd><p><code><span class='object'>MasterObject.Decoder</span> <span class='class'>MasterObject.Decoder</span><b>(</b><code class='datatype'>void</code>|<code class='datatype'>string</code> <code class='argument'>fname</code>, <code class='datatype'>void</code>|<code class='datatype'>int</code> <code class='argument'>mkobj</code>, <code class='datatype'>void</code>|<code class='datatype'>object</code> <code class='argument'>handler</code><b>)</b></code></p></dd> + </dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>decode_object</b></span> + </dt> + <dd><p><code><code class='datatype'>array</code>(<code class='datatype'>mixed</code>) <b><span class='method'>decode_object</span>(</b><code class='datatype'>object</code> <code class='argument'>o</code>, <code class='datatype'>mixed</code> <code class='argument'>data</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Restore the state of an encoded object.</p> + </dd> + <dt class='head--doc'><span id='p-o'></span>Parameter <code class='parameter'>o</code></dt> + <dd></dd><dd class='body--doc'><p>Object to modify.</p> + </dd> + <dt class='head--doc'><span id='p-data'></span>Parameter <code class='parameter'>data</code></dt> + <dd></dd><dd class='body--doc'><p>State information from <code>Encoder()-&gt;encode_object()</code>.</p> + <p> The default implementation calls <code class='expr'>o-&gt;_decode(data)</code> +  if the object has an <code class='expr'>_decode()</code>, otherwise if +  <code>data</code> is an array, returns it to indicate that <code>lfun::create()</code> +  should be called.</p> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p>This function is called <b>before</b> <code>lfun::create()</code> +  in the object has been called, but after <code>lfun::__INIT()</code> +  has been called.</p> + </dd> + <dt class='head--doc'>Returns</dt> + <dd class='body--doc'><p>Returns an array to indicate to the caller that +  <code>lfun::create()</code> should be called with the elements +  of the array as arguments.</p> + <p> Returns <code class='expr'>0</code> (zero) to inhibit calling of <code>lfun::create()</code>.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>Encoder()-&gt;encode_object()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Variable</span> + <span class='homogen--name'><b>fname</b></span><br> + <span class='homogen--type'>Variable</span> + <span class='homogen--name'><b>mkobj</b></span><br> + <span class='homogen--type'>Variable</span> + <span class='homogen--name'><b>handler</b></span><br> + </dt> + <dd><p><code><code class='datatype'>void</code>|<code class='datatype'>string</code> MasterObject.Decoder.<b><span class='variable'>fname</span></b></code><br> + <code><code class='datatype'>void</code>|<code class='datatype'>int</code> MasterObject.Decoder.<b><span class='variable'>mkobj</span></b></code><br> + <code><code class='datatype'>void</code>|<code class='datatype'>object</code> MasterObject.Decoder.<b><span class='variable'>handler</span></b></code></p></dd> + </dl> + </dd></dl><dl><dt><h2 class='header'>Class <b class='ms datatype'>MasterObject.Describer</b></h2> + </dt><dd><dl class='group--doc'> + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Class used by <code>describe_backtrace()</code> to describe values in backtraces.</p> + </dd></dl> +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Inherit</span> + <span class='homogen--name'><b>DestructImmediate</b></span> + </dt> + <dd><p><code><span class='datatype'>inherit _static_modules.Builtin.DestructImmediate</span> : <span class='inherit'>DestructImmediate</span></code></p></dd> + </dl> + </dd></dl><dl><dt><h2 class='header'>Class <b class='ms datatype'>MasterObject.Encoder</b></h2> + </dt><dd><dl class='group--doc'> + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Codec for use with <code>encode_value</code>. It understands all the +  standard references to builtin functions, pike modules, and the +  main program script.</p> + <p> The format of the produced identifiers are documented here to +  allow extension of this class:</p> + <p> The produced names are either strings or arrays. The string +  variant specifies the thing to look up according to the first +  character:</p> + <p> 'c' Look up in all_constants(). +  's' Look up in _static_modules. +  'r' Look up with resolv(). +  'p' Look up in programs. +  'o' Look up in programs, then look up the result in objects. +  'f' Look up in fc.</p> + <p> In the array format, the first element is a string as above and +  the rest specify a series of things to do with the result:</p> + <p> A string Look up this string in the result. +  'm' Get module object in dirnode. +  'p' Do object_program(result).</p> + <p> All lowercase letters and the symbols ':', '/' and '.' are +  reserved for internal use in both cases where characters are used +  above.</p> + </dd></dl> +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>create</b></span> + </dt> + <dd><p><code><span class='object'>MasterObject.Encoder</span> <span class='class'>MasterObject.Encoder</span><b>(</b><code class='datatype'>void</code>|<code class='datatype'>mixed</code> <code class='argument'>encoded</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Creates an encoder instance. If <code>encoded</code> is specified, it's +  encoded instead of being reverse resolved to a name. That's +  necessary to encode programs.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>nameof</b></span> + </dt> + <dd><p><code><code class='datatype'>string</code>|<code class='datatype'>array</code> <b><span class='method'>nameof</span>(</b><code class='datatype'>mixed</code> <code class='argument'>what</code>, <code class='datatype'>void</code>|<code class='datatype'>array</code>(<code class='datatype'>object</code>) <code class='argument'>module_object</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>When <code>module_object</code> is set and the name would end with an +  <code class='expr'>object_program</code> step (i.e. <code class='expr'>'p'</code>), then drop that +  step so that the name corresponds to the object instead. +  <code class='expr'><code>module_object</code>[0]</code> will receive the found object.</p> + </dd></dl> + </dd></dl><dl><dt><h2 class='header'>Class <b class='ms datatype'>MasterObject.Pike_7_8_master</b></h2> + </dt><dd><dl class='group--doc'> + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Pike 7.8 master compatibility interface.</p> + <p> Most of the interface is implemented via mixin, +  or overloading by more recent masters.</p> + <p> This interface is used for compatibility with +  Pike 7.8.</p> + </dd> + <dt class='head--doc'>Deprecated</dt> + <dd class='body--doc'><p>Replaced by <code>predef::MasterObject</code>.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>get_compat_master()</code>, <code>master()</code>, <code>predef::MasterObject</code></p> + </dd></dl></dd></dl><dl><dt><h2 class='header'>Class <b class='ms datatype'>MasterObject.Pike_8_0_master</b></h2> + </dt><dd><dl class='group--doc'> + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Pike 8.0 master compatibility interface.</p> + <p> Most of the interface is implemented via mixin, +  or overloading by more recent masters.</p> + <p> This interface is used for compatibility with +  Pike 8.0.</p> + </dd> + <dt class='head--doc'>Deprecated</dt> + <dd class='body--doc'><p>Replaced by <code>predef::MasterObject</code>.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>get_compat_master()</code>, <code>master()</code>, <code>predef::MasterObject</code></p> + </dd></dl> +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Inherit</span> + <span class='homogen--name'><b>Pike_7_8_master</b></span> + </dt> + <dd><p><code><span class='datatype'>inherit Pike_7_8_master</span> : <span class='inherit'>Pike_7_8_master</span></code></p></dd> + </dl> + </dd></dl><dl><dt><h2 class='header'>Class <b class='ms datatype'>MasterObject.Version</b></h2> + </dt><dd><dl class='group--doc'> + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Contains version information about a Pike version.</p> + </dd></dl> +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>`&lt;</b></span><br> + <span class='homogen--type'>Method</span> + <span class='homogen--name'><b>`&gt;</b></span><br> + <span class='homogen--type'>Method</span> + <span class='homogen--name'><b>`==</b></span><br> + <span class='homogen--type'>Method</span> + <span class='homogen--name'><b>__hash</b></span><br> + </dt> + <dd><p><code><code class='datatype'>int</code> res = <code class='class'>MasterObject.Version()</code>&#32;&lt;&#32;<code class='class'>v</code></code><br> + <code><code class='datatype'>int</code> res = <code class='class'>MasterObject.Version()</code>&#32;&gt;&#32;<code class='class'>v</code></code><br> + <code><code class='datatype'>int</code> res = <code class='class'>MasterObject.Version()</code>&#32;==&#32;<code class='class'>v</code></code><br> + <code><code class='datatype'>int</code> <b><span class='method'>hash_value</span>(</b> <span class='class'>MasterObject.Version</span> <span class='argument'>arg</span> <b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Methods define so that version objects +  can be compared and ordered.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>cast</b></span> + </dt> + <dd><p><code><b>(</b><span class='datatype'>int</span><b>)</b><span class='class'>MasterObject.Version</span>()<br><b>(</b><span class='datatype'>float</span><b>)</b><span class='class'>MasterObject.Version</span>()<br><b>(</b><span class='datatype'>string</span><b>)</b><span class='class'>MasterObject.Version</span>()<br><b>(</b><span class='datatype'>array</span><b>)</b><span class='class'>MasterObject.Version</span>()<br><b>(</b><span class='datatype'>mapping</span><b>)</b><span class='class'>MasterObject.Version</span>()<br><b>(</b><span class='datatype'>multiset</span><b>)</b><span class='class'>MasterObject.Version</span>()</code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>The version object can be casted into a string.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>create</b></span> + </dt> + <dd><p><code><span class='object'>MasterObject.Version</span> <span class='class'>MasterObject.Version</span><b>(</b><code class='datatype'>int</code> <code class='argument'>major</code>, <code class='datatype'>int</code> <code class='argument'>minor</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Set the version in the object.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Variable</span> + <span class='homogen--name'><b>major</b></span><br> + <span class='homogen--type'>Variable</span> + <span class='homogen--name'><b>minor</b></span><br> + </dt> + <dd><p><code><code class='datatype'>int</code> MasterObject.Version.<b><span class='variable'>major</span></b></code><br> + <code><code class='datatype'>int</code> MasterObject.Version.<b><span class='variable'>minor</span></b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>The major and minor parts of the version.</p> + </dd></dl> + </dd></dl><dl><dt><h2 class='header'>Class <b class='ms datatype'>MasterObject.dirnode</b></h2> + </dt><dd><dl class='group--doc'> + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Module node representing a single directory.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>joinnode</code></p> + </dd></dl> +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Variable</span> + <span class='homogen--name'><b>dirname</b></span><br> + <span class='homogen--type'>Variable</span> + <span class='homogen--name'><b>compilation_handler</b></span><br> + <span class='homogen--type'>Variable</span> + <span class='homogen--name'><b>name</b></span><br> + </dt> + <dd><p><code><code class='datatype'>string</code> MasterObject.dirnode.<b><span class='variable'>dirname</span></b></code><br> + <code><code class='datatype'>object</code>|<code class='datatype'>void</code> MasterObject.dirnode.<b><span class='variable'>compilation_handler</span></b></code><br> + <code><code class='datatype'>string</code>|<code class='datatype'>void</code> MasterObject.dirnode.<b><span class='variable'>name</span></b></code></p></dd> + </dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>create</b></span> + </dt> + <dd><p><code><span class='object'>MasterObject.dirnode</span> <span class='class'>MasterObject.dirnode</span><b>(</b><code class='datatype'>string</code> <code class='argument'>dirname</code>, <code class='datatype'>object</code>|<code class='datatype'>void</code> <code class='argument'>compilation_handler</code>, <code class='datatype'>string</code>|<code class='datatype'>void</code> <code class='argument'>name</code><b>)</b></code></p></dd> + </dl> + </dd></dl><dl><dt><h2 class='header'>Class <b class='ms datatype'>MasterObject.joinnode</b></h2> + </dt><dd><dl class='group--doc'> + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Module node holding possibly multiple directories, +  and optionally falling back to another level.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>dirnode</code></p> + </dd></dl> +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Variable</span> + <span class='homogen--name'><b>joined_modules</b></span><br> + <span class='homogen--type'>Variable</span> + <span class='homogen--name'><b>compilation_handler</b></span><br> + <span class='homogen--type'>Variable</span> + <span class='homogen--name'><b>fallback_module</b></span><br> + <span class='homogen--type'>Variable</span> + <span class='homogen--name'><b>name</b></span><br> + </dt> + <dd><p><code><code class='datatype'>array</code>(<code class='datatype'>object</code>|<code class='datatype'>mapping</code>) MasterObject.joinnode.<b><span class='variable'>joined_modules</span></b></code><br> + <code><code class='datatype'>object</code>|<code class='datatype'>void</code> MasterObject.joinnode.<b><span class='variable'>compilation_handler</span></b></code><br> + <code><code class='object unresolved'>joinnode</code>|<code class='datatype'>mapping</code>(<code class='datatype'>mixed</code>:<code class='datatype'>int(0..0)</code>)|<code class='datatype'>void</code> MasterObject.joinnode.<b><span class='variable'>fallback_module</span></b></code><br> + <code><code class='datatype'>string</code>|<code class='datatype'>void</code> MasterObject.joinnode.<b><span class='variable'>name</span></b></code></p></dd> + </dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>create</b></span> + </dt> + <dd><p><code><span class='object'>MasterObject.joinnode</span> <span class='class'>MasterObject.joinnode</span><b>(</b><code class='datatype'>array</code>(<code class='datatype'>object</code>|<code class='datatype'>mapping</code>) <code class='argument'>joined_modules</code>, <code class='datatype'>object</code>|<code class='datatype'>void</code> <code class='argument'>compilation_handler</code>, <code class='object unresolved'>joinnode</code>|<code class='datatype'>mapping</code>(<code class='datatype'>mixed</code>:<code class='datatype'>int(0..0)</code>)|<code class='datatype'>void</code> <code class='argument'>fallback_module</code>, <code class='datatype'>string</code>|<code class='datatype'>void</code> <code class='argument'>name</code><b>)</b></code></p></dd> + </dl> + </dd></dl></dd></dl><dl><dt><h2 class='header'>Class <b class='ms datatype'>RandomInterface</b></h2>   </dt><dd>      <hr />   <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Method</span>   <span class='homogen--name'><b>random</b></span>   </dt>   <dd><p><code><code class='datatype'>array</code> <b><span class='method'>random</span>(</b><code class='datatype'>mapping</code> <code class='argument'>m</code><b>)</b></code></p></dd>      <dt class='head--doc'>Description</dt>
autodoc.git/traditional_manual/chapter_21.html:6724:   <span class='homogen--type'>Constant</span>   <span class='homogen--name'><b>ERROR</b></span><br>   <span class='homogen--type'>Constant</span>   <span class='homogen--name'><b>FATAL</b></span><br>   </dt>   <dd><p><code><code class='datatype'>constant</code> Reporter.<code class='constant'>NOTICE</code></code><br>   <code><code class='datatype'>constant</code> Reporter.<code class='constant'>WARNING</code></code><br>   <code><code class='datatype'>constant</code> Reporter.<code class='constant'>ERROR</code></code><br>   <code><code class='datatype'>constant</code> Reporter.<code class='constant'>FATAL</code></code></p></dd>   </dl> - </dd></dl></dd></dl><dl><dt><h2 class='header'>Class <b class='ms datatype'>mklibpike</b></h2> + </dd></dl></dd></dl><dl><dt><h2 class='header'>Class <b class='ms datatype'>__dirnode</b></h2>   </dt><dd>      <hr />   <dl class='group--doc'> -  + <dt class='head--type'><span class='homogen--type'>Inherit</span> + <span class='homogen--name'><b>dirnode</b></span> + </dt> + <dd><p><code><span class='datatype'>inherit MasterObject.dirnode</span> : <span class='inherit'>dirnode</span></code></p></dd> + </dl> + </dd></dl><dl><dt><h2 class='header'>Class <b class='ms datatype'>__joinnode</b></h2> + </dt><dd> +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Inherit</span> + <span class='homogen--name'><b>joinnode</b></span> + </dt> + <dd><p><code><span class='datatype'>inherit MasterObject.joinnode</span> : <span class='inherit'>joinnode</span></code></p></dd> + </dl> + </dd></dl><dl><dt><h2 class='header'>Class <b class='ms datatype'>mklibpike</b></h2> + </dt><dd> +  + <hr /> + <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Method</span>   <span class='homogen--name'><b>parse</b></span>   </dt>   <dd><p><code><code class='datatype'>mapping</code>(<code class='datatype'>string</code>:<code class='datatype'>array</code>(<code class='datatype'>array</code>(<code class='object unresolved'>Parser.C.Token</code>))) <b><span class='method'>parse</span>(</b><code class='datatype'>array</code>(<code class='object unresolved'>Parser.C.Token</code>) <code class='argument'>tokens</code><b>)</b></code></p></dd>      <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>Returns a mapping from symbol to a tuple of return type and parameters.</p>   </dd></dl>   <dl><dt><h2 class='header'>Class <b class='ms datatype'>mklibpike.C_Include_Handler</b></h2>   </dt><dd>
autodoc.git/traditional_manual/chapter_21.html:67322:   <dd></dd><dd class='body--doc'><p>The name of parameter. One of <code class='expr'>"sample_rate"</code>,    <code class='expr'>"bit_rate"</code>, <code class='expr'>"channels"</code>.</p>   </dd>   <dt class='head--doc'>Returns</dt>   <dd class='body--doc'><p>Returns 1 on success, 0 otherwise (parameter not known).</p>   </dd>   <dt class='head--doc'>See also</dt>   <dd class='body--doc'><p><code>get_codec_params()</code></p>   </dd></dl>   </dd></dl></dd></dl><dl><dt><h2 class='header'>Module <b class='ms datatype'>_Stdio</b></h2> - </dt><dd><dl><dt><h2 class='header'>Class <b class='ms datatype'>_Stdio.Buffer</b></h2> +    </dt><dd><dl class='group--doc'>   <dt class='head--doc'>Description</dt> -  + <dd class='body--doc'><p>Low-level I/O.</p> + <p> This is usually NOT the module you want. +  Try <code>Stdio</code> instead.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>Stdio</code></p> + </dd></dl> +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Constant</span> + <span class='homogen--name'><b>IPPROTO_IP</b></span> + </dt> + <dd><p><code><code class='datatype'>constant</code> _Stdio.<code class='constant'>IPPROTO_IP</code></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Used in <code>File.setsockopt()</code> to set IP-level options</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Constant</span> + <span class='homogen--name'><b>IPPROTO_TCP</b></span> + </dt> + <dd><p><code><code class='datatype'>constant</code> _Stdio.<code class='constant'>IPPROTO_TCP</code></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Used in <code>File.setsockopt()</code> to set TCP-level options</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Constant</span> + <span class='homogen--name'><b>IP_TOS</b></span> + </dt> + <dd><p><code><code class='datatype'>constant</code> _Stdio.<code class='constant'>IP_TOS</code></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Used in <code>File.setsockopt()</code> to set Type Of Service</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Constant</span> + <span class='homogen--name'><b>NOTE_ATTRIB</b></span> + </dt> + <dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>NOTE_ATTRIB</code></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Used with <code>Stdio.File()-&gt;set_fs_event_callback()</code> to monitor +  for attribute changes on a file.</p> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p>Available on systems that use kqueue.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Constant</span> + <span class='homogen--name'><b>NOTE_DELETE</b></span> + </dt> + <dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>NOTE_DELETE</code></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Used with <code>Stdio.File()-&gt;set_fs_event_callback()</code> to monitor +  for deletion of a file.</p> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p>Available on systems that use kqueue.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Constant</span> + <span class='homogen--name'><b>NOTE_EXTEND</b></span> + </dt> + <dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>NOTE_EXTEND</code></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Used with <code>Stdio.File()-&gt;set_fs_event_callback()</code> to monitor +  for extension events on a file.</p> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p>Available on systems that use kqueue.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Constant</span> + <span class='homogen--name'><b>NOTE_LINK</b></span> + </dt> + <dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>NOTE_LINK</code></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Used with <code>Stdio.File()-&gt;set_fs_event_callback()</code> to monitor +  for changes to a file's link count.</p> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p>Available on systems that use kqueue.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Constant</span> + <span class='homogen--name'><b>NOTE_RENAME</b></span> + </dt> + <dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>NOTE_RENAME</code></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Used with <code>Stdio.File()-&gt;set_fs_event_callback()</code> to monitor +  for move or rename events on a file.</p> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p>Available on systems that use kqueue.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Constant</span> + <span class='homogen--name'><b>NOTE_REVOKE</b></span> + </dt> + <dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>NOTE_REVOKE</code></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Used with <code>Stdio.File()-&gt;set_fs_event_callback()</code> to monitor +  for access revokation (unmount, etc).</p> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p>Available on systems that use kqueue.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Constant</span> + <span class='homogen--name'><b>NOTE_WRITE</b></span> + </dt> + <dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>NOTE_WRITE</code></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Used with <code>Stdio.File()-&gt;set_fs_event_callback()</code> to monitor +  for writes to a file.</p> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p>Available on systems that use kqueue.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Constant</span> + <span class='homogen--name'><b>PROP_BIDIRECTIONAL</b></span> + </dt> + <dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>PROP_BIDIRECTIONAL</code></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>The file is bi-directional.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>Stdio.File()-&gt;pipe()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Constant</span> + <span class='homogen--name'><b>PROP_BUFFERED</b></span> + </dt> + <dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>PROP_BUFFERED</code></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>The file is buffered (usually 4KB).</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>Stdio.File()-&gt;pipe()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Constant</span> + <span class='homogen--name'><b>PROP_IPC</b></span> + </dt> + <dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>PROP_IPC</code></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>The file may be used for inter process communication.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>Stdio.File()-&gt;pipe()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Constant</span> + <span class='homogen--name'><b>PROP_NONBLOCK</b></span> + </dt> + <dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>PROP_NONBLOCK</code></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>The file supports nonblocking I/O.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>Stdio.File()-&gt;pipe()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Constant</span> + <span class='homogen--name'><b>PROP_REVERSE</b></span> + </dt> + <dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>PROP_REVERSE</code></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Request reversed operation.</p> + <p> Used as argument to <code>Stdio.File()-&gt;pipe()</code>, when +  <code>PROP_BIDIRECTIONAL</code> hasn't been specified, to +  request the direction of the resulting pipe to +  reversed.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>Stdio.File()-&gt;pipe()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Constant</span> + <span class='homogen--name'><b>PROP_SEND_FD</b></span> + </dt> + <dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>PROP_SEND_FD</code></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>The <code>Stdio.File</code> object might support the <code>Stdio.File()-&gt;send_fd()</code> +  operation.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>Stdio.File()-&gt;pipe()</code>, <code>Stdio.File()-&gt;send_fd()</code>, +  <code>Stdio.File()-&gt;receive_fd()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Constant</span> + <span class='homogen--name'><b>PROP_SHUTDOWN</b></span> + </dt> + <dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>PROP_SHUTDOWN</code></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>The file supports shutting down transmission in either +  direction.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>Stdio.File()-&gt;close()</code>, <code>Stdio.File()-&gt;pipe()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Constant</span> + <span class='homogen--name'><b>PROP_TTY</b></span> + </dt> + <dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>PROP_TTY</code></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>The <code>Stdio.File</code> object supports tty operations.</p> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p>This constant is only present on platforms where pseudo tty +  (aka pty) operations are available, and may thus be used to +  detect whether such operations should be attempted.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>Stdio.File()-&gt;pipe()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Constant</span> + <span class='homogen--name'><b>SOL_SOCKET</b></span> + </dt> + <dd><p><code><code class='datatype'>constant</code> _Stdio.<code class='constant'>SOL_SOCKET</code></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Used in <code>File.setsockopt()</code> to set socket-level options</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Constant</span> + <span class='homogen--name'><b>SO_KEEPALIVE</b></span> + </dt> + <dd><p><code><code class='datatype'>constant</code> _Stdio.<code class='constant'>SO_KEEPALIVE</code></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Used in <code>File.setsockopt()</code> to control TCP/IP keep-alive packets.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Constant</span> + <span class='homogen--name'><b>TCP_NODELAY</b></span> + </dt> + <dd><p><code><code class='datatype'>constant</code> _Stdio.<code class='constant'>TCP_NODELAY</code></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Used in <code>File.setsockopt()</code> to control Nagle's Algorithm.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Constant</span> + <span class='homogen--name'><b>XATTR_CREATE</b></span> + </dt> + <dd><p><code><code class='datatype'>constant</code> _Stdio.<code class='constant'>XATTR_CREATE</code></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Used by <code>setxattr</code> function and method to signify a pure +  create, which will fail if the attribute already exists.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Constant</span> + <span class='homogen--name'><b>XATTR_REPLACE</b></span> + </dt> + <dd><p><code><code class='datatype'>constant</code> _Stdio.<code class='constant'>XATTR_REPLACE</code></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Used by <code>setxattr</code> function and method to signify a replace, +  which will fail the the attribute does not already exists.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Constant</span> + <span class='homogen--name'><b>__HAVE_OOB__</b></span> + </dt> + <dd><p><code><code class='datatype'>constant</code> _Stdio.<code class='constant'>__HAVE_OOB__</code></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Exists and has the value 1 if OOB operations are available.</p> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p>In Pike 7.5 and later OOB operations are always present.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Constant</span> + <span class='homogen--name'><b>__HAVE_SEND_FD__</b></span> + </dt> + <dd><p><code><code class='datatype'>constant</code> _Stdio.<code class='constant'>__HAVE_SEND_FD__</code></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Support for sending of file descriptors over +  <code>Stdio.File()-&gt;pipe()</code> objects with <code>PROP_SEND_FD</code> +  capability is supported.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>Stdio.File()-&gt;send_fd()</code>, <code>Stdio.File()-&gt;receive_fd()</code>, +  <code>Stdio.File()-&gt;read()</code>, <code>Stdio.File()-&gt;write()</code>, +  <code>Stdio.File()-&gt;pipe()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Constant</span> + <span class='homogen--name'><b>__OOB__</b></span> + </dt> + <dd><p><code><code class='datatype'>constant</code> _Stdio.<code class='constant'>__OOB__</code></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Implementation level of nonblocking I/O OOB support.</p> + <table class='box'><tr><td><code><code class='key'>0</code></code></td><td><p>Nonblocking OOB support is not supported.</p> + </td></tr> + <tr><td><code><code class='key'>1</code></code></td><td><p>Nonblocking OOB works a little.</p> + </td></tr> + <tr><td><code><code class='key'>2</code></code></td><td><p>Nonblocking OOB almost works.</p> + </td></tr> + <tr><td><code><code class='key'>3</code></code></td><td><p>Nonblocking OOB works as intended.</p> + </td></tr> + <tr><td><code><code class='key'>-1</code></code></td><td><p>Unknown level of nonblocking OOB support.</p> + </td></tr> + </table><p>This constant only exists when OOB operations are +  available, i.e. when <code>__HAVE_OOB__</code> is 1.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>get_all_active_fd</b></span> + </dt> + <dd><p><code><code class='datatype'>array</code>(<code class='datatype'>int</code>) <b><span class='method'>get_all_active_fd</span>(</b><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Returns the id of all the active file descriptors.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>gethostip</b></span> + </dt> + <dd><p><code><code class='datatype'>mapping</code>(<code class='datatype'>string</code>:<code class='datatype'>mapping</code>) <b><span class='method'>gethostip</span>(</b><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Returns the IP addresses of the host.</p> + </dd> + <dt class='head--doc'>Returns</dt> + <dd class='body--doc'><p>Returns a mapping that maps interface name to a mapping with +  more information about that interface. That information mapping +  looks as follows.</p> + <table class='box'><tr><td><code><code class='key'>"ips"</code> : <code class='datatype'>array</code>(<code class='datatype'>string</code>)</code></td><td><p>A list of all IP addresses bound to this interface.</p> + </td></tr> + </table></dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>getprotobyname</b></span> + </dt> + <dd><p><code><code class='datatype'>int</code> <b><span class='method'>getprotobyname</span>(</b><code class='datatype'>string(8bit)</code> <code class='argument'>name</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Returns the protocol number of the protocol <code class='expr'>name</code>. +  This calls the POSIX function getprotobyname. +  If the protocol cannot be found an error is thrown.</p> + </dd></dl> + <dl><dt><h2 class='header'>Enum <b class='ms datatype'>_Stdio.FileModeFlags</b></h2> + </dt><dd><dl class='group--doc'> + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>File mode flags returned by <code>Fd()-&gt;mode()</code>.</p> + </dd></dl> +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Constant</span> + <span class='homogen--name'><b>FILE_APPEND</b></span> + </dt> + <dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>FILE_APPEND</code></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>File open for appending.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Constant</span> + <span class='homogen--name'><b>FILE_CREATE</b></span> + </dt> + <dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>FILE_CREATE</code></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Create a new file if it didn't exist earlier.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Constant</span> + <span class='homogen--name'><b>FILE_EXCLUSIVE</b></span> + </dt> + <dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>FILE_EXCLUSIVE</code></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Exclusive access to the file.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Constant</span> + <span class='homogen--name'><b>FILE_NONBLOCKING</b></span> + </dt> + <dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>FILE_NONBLOCKING</code></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>File opened in nonblocking mode.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Constant</span> + <span class='homogen--name'><b>FILE_READ</b></span> + </dt> + <dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>FILE_READ</code></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>File open for reading.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Constant</span> + <span class='homogen--name'><b>FILE_TRUNC</b></span> + </dt> + <dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>FILE_TRUNC</code></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Truncate the file on open.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Constant</span> + <span class='homogen--name'><b>FILE_WRITE</b></span> + </dt> + <dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>FILE_WRITE</code></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>File open for writing.</p> + </dd></dl> + </dd></dl><dl><dt><h2 class='header'>Enum <b class='ms datatype'>_Stdio.FilePropertyFlags</b></h2> + </dt><dd><dl class='group--doc'> + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>File properties for use with eg <code>Fd()-&gt;pipe()</code>, +  and returned by eg <code>Fd()-&gt;mode()</code>.</p> + </dd></dl> +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Constant</span> + <span class='homogen--name'><b>PROP_BIDIRECTIONAL</b></span> + </dt> + <dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>PROP_BIDIRECTIONAL</code></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>File supports both sending and receiving.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Constant</span> + <span class='homogen--name'><b>PROP_BUFFERED</b></span> + </dt> + <dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>PROP_BUFFERED</code></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>File has internal buffering.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Constant</span> + <span class='homogen--name'><b>PROP_IPC</b></span> + </dt> + <dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>PROP_IPC</code></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>File can be used for interprocess communication.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Constant</span> + <span class='homogen--name'><b>PROP_NONBLOCK</b></span> + </dt> + <dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>PROP_NONBLOCK</code></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>File supports nonblocking operation.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Constant</span> + <span class='homogen--name'><b>PROP_SEND_FD</b></span> + </dt> + <dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>PROP_SEND_FD</code></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>File is capable of sending open file descriptors.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Constant</span> + <span class='homogen--name'><b>PROP_SHUTDOWN</b></span> + </dt> + <dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>PROP_SHUTDOWN</code></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>File supports unidirectional close.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Constant</span> + <span class='homogen--name'><b>PROP_TTY</b></span> + </dt> + <dd><p><code><code class='datatype'>constant</code> <code class='datatype'>int</code> _Stdio.<code class='constant'>PROP_TTY</code></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>File supports tty operations.</p> + </dd></dl> + </dd></dl><dl><dt><h2 class='header'>Class <b class='ms datatype'>_Stdio.Buffer</b></h2> + </dt><dd><dl class='group--doc'> + <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>A buffer to use as input or buffering when doing I/O. It is    similar to <code>String.Buffer</code>, but can only contain 8bit data and is    designed for protocol parsing. It is optimized for reading from    the beginning and adding to the end, and will try to minimize the    amount of data copying that is done.</p>   <p> The class maintains two separate offsets, one for reading and one    for writing. The functions that add data all do so at the write    offset (the end of the buffer), and reading is done from the read    offset (the start of the buffer).</p>   <p> The class can also be used to directly read from and write to
autodoc.git/traditional_manual/chapter_21.html:68472:   <dt class='head--type'><span class='homogen--type'>Method</span>   <span class='homogen--name'><b>update</b></span>   </dt>   <dd><p><code><code class='datatype'>void</code> <b><span class='method'>update</span>(</b><b>)</b></code></p></dd>      <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>Update the location the buffer will be rewound to to the current    position of the buffer.</p>   </dd></dl>   </dd></dl></dd></dl><dl><dt><h2 class='header'>Class <b class='ms datatype'>_Stdio.Fd</b></h2> - </dt><dd> + </dt><dd><dl class='group--doc'> + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Low level I/O operations.</p> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p>This is not the class you want. Use <code>Stdio.File</code> and friends instead.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>Stdio.File</code>, <code>Stdio.FILE</code>, <code>_Stdio.Fd_ref</code></p> + </dd></dl>      <hr />   <dl class='group--doc'> -  + <dt class='head--type'><span class='homogen--type'>Variable</span> + <span class='homogen--name'><b>_errno</b></span> + </dt> + <dd><p><code><code class='modifier'>protected</code> <code class='datatype'>int(0..)</code> _Stdio.Fd.<b><span class='variable'>_errno</span></b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Variable containing the internal value returned by <code>errno()</code>.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>errno()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Variable</span> + <span class='homogen--name'><b>_fd</b></span> + </dt> + <dd><p><code><code class='object unresolved'>Fd</code> _Stdio.Fd.<b><span class='variable'>_fd</span></b></code></p></dd> +  + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p>Read only</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Variable</span> + <span class='homogen--name'><b>_read_callback</b></span><br> + <span class='homogen--type'>Variable</span> + <span class='homogen--name'><b>_write_callback</b></span><br> + <span class='homogen--type'>Variable</span> + <span class='homogen--name'><b>_read_oob_callback</b></span><br> + <span class='homogen--type'>Variable</span> + <span class='homogen--name'><b>_write_oob_callback</b></span><br> + <span class='homogen--type'>Variable</span> + <span class='homogen--name'><b>_fs_event_callback</b></span><br> + </dt> + <dd><p><code><code class='datatype'>mixed</code> _Stdio.Fd.<b><span class='variable'>_read_callback</span></b></code><br> + <code><code class='datatype'>mixed</code> _Stdio.Fd.<b><span class='variable'>_write_callback</span></b></code><br> + <code><code class='datatype'>mixed</code> _Stdio.Fd.<b><span class='variable'>_read_oob_callback</span></b></code><br> + <code><code class='datatype'>mixed</code> _Stdio.Fd.<b><span class='variable'>_write_oob_callback</span></b></code><br> + <code><code class='datatype'>mixed</code> _Stdio.Fd.<b><span class='variable'>_fs_event_callback</span></b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Callback functions installed by <code>Stdio.File()-&gt;set_callbacks()</code> et al.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Method</span> -  + <span class='homogen--name'><b>close</b></span> + </dt> + <dd><p><code><code class='datatype'>int</code> <b><span class='method'>close</span>(</b><b>)</b></code><br> + <code><code class='datatype'>int</code> <b><span class='method'>close</span>(</b><code class='datatype'>string</code> <code class='argument'>direction</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Close a file or stream.</p> + <p> If direction is not specified, both the read and the write +  direction are closed. Otherwise only the directions specified is +  closed.</p> + </dd> + <dt class='head--doc'>Returns</dt> + <dd class='body--doc'><p>Returns <code class='expr'>1</code> if the file or stream now is closed in +  all directions, and <code class='expr'>0</code> otherwise.</p> + </dd> + <dt class='head--doc'>Throws</dt> + <dd class='body--doc'><p>An exception is thrown if an I/O error occurs.</p> + <p> The default behaviour for sockets is typically to flush buffered +  data in the background, but this can be changed with <code>linger()</code>.</p> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p><code>close()</code> has no effect if this file object has been associated +  with an already opened file, i.e. if <code>open()</code> was given an +  integer as the first argument.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>linger()</code>, <code>open()</code>, <code>open_socket()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>connect</b></span> + </dt> + <dd><p><code><code class='datatype'>bool</code> <b><span class='method'>connect</span>(</b><code class='datatype'>string</code> <code class='argument'>dest_addr</code>, <code class='datatype'>int</code> <code class='argument'>dest_port</code><b>)</b></code><br> + <code><code class='datatype'>bool</code> <b><span class='method'>connect</span>(</b><code class='datatype'>string</code> <code class='argument'>dest_addr</code>, <code class='datatype'>int</code> <code class='argument'>dest_port</code>, <code class='datatype'>string</code> <code class='argument'>src_addr</code>, <code class='datatype'>int</code> <code class='argument'>src_port</code><b>)</b></code><br> + <code><code class='datatype'>string(8bit)</code>|<code class='datatype'>int(0..0)</code> <b><span class='method'>connect</span>(</b><code class='datatype'>string</code> <code class='argument'>dest_addr</code>, <code class='datatype'>int</code> <code class='argument'>dest_port</code>, <code class='datatype'>string</code>|<code class='datatype'>int(0..0)</code> <code class='argument'>src_addr</code>, <code class='datatype'>int</code>|<code class='datatype'>int(0..0)</code> <code class='argument'>src_port</code>, <code class='datatype'>string(8bit)</code> <code class='argument'>data</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Open a TCP/IP connection to the specified destination.</p> + <p> In nonblocking mode, success is indicated with the write-callback, +  and failure with the close-callback or the read_oob-callback.</p> + <p> If the <code>data</code> argument is included the socket will use +  TCP_FAST_OPEN if available, if not the data will <i>not be +  sent</i>. In the data case the function either returns the data +  that has not been sent (only one packet can be sent with this +  option) or 0 if the connection failed immediately.</p> + </dd> + <dt class='head--doc'>Returns</dt> + <dd class='body--doc'><p>Returns <code class='expr'>1</code> or the remaining <code class='expr'>data</code> on success, and +  <code class='expr'>0</code> on failure.</p> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p>In nonblocking mode <code class='expr'>0</code> (zero) may be returned and <code>errno()</code> set +  to <tt>EWOULDBLOCK</tt> or <tt>WSAEWOULDBLOCK</tt>. This should not be regarded +  as a connection failure.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>connect_unix</b></span> + </dt> + <dd><p><code><code class='datatype'>bool</code> <b><span class='method'>connect_unix</span>(</b><code class='datatype'>string</code> <code class='argument'>filename</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Open a UNIX domain socket connection to the specified destination.</p> + </dd> + <dt class='head--doc'><span id='p-filename'></span>Parameter <code class='parameter'>filename</code></dt> + <dd></dd><dd class='body--doc'><p>Filename to create.</p> + <p> In nonblocking mode, success is indicated with the write-callback, +  and failure with the close-callback or the read_oob-callback.</p> + </dd> + <dt class='head--doc'>Returns</dt> + <dd class='body--doc'><p>Returns <code class='expr'>1</code> on success, and <code class='expr'>0</code> on failure.</p> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p>In nonblocking mode <code class='expr'>0</code> (zero) may be returned and <code>errno()</code> set +  to <tt>EWOULDBLOCK</tt> or <tt>WSAEWOULDBLOCK</tt>. This should not be regarded +  as a connection failure.</p> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p><code>path</code> had a quite restrictive length limit (~100 characters) +  prior to Pike 7.8.334.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>create</b></span> + </dt> + <dd><p><code><span class='object'>_Stdio.Fd</span> <span class='class'>_Stdio.Fd</span><b>(</b><code class='datatype'>string</code> <code class='argument'>filename</code><b>)</b></code><br> + <code><span class='object'>_Stdio.Fd</span> <span class='class'>_Stdio.Fd</span><b>(</b><code class='datatype'>string</code> <code class='argument'>filename</code>, <code class='datatype'>string</code> <code class='argument'>mode</code><b>)</b></code><br> + <code><span class='object'>_Stdio.Fd</span> <span class='class'>_Stdio.Fd</span><b>(</b><code class='datatype'>string</code> <code class='argument'>filename</code>, <code class='datatype'>string</code> <code class='argument'>mode</code>, <code class='datatype'>int</code> <code class='argument'>access</code><b>)</b></code><br> + <code><span class='object'>_Stdio.Fd</span> <span class='class'>_Stdio.Fd</span><b>(</b><code class='datatype'>int</code> <code class='argument'>fd</code><b>)</b></code><br> + <code><span class='object'>_Stdio.Fd</span> <span class='class'>_Stdio.Fd</span><b>(</b><code class='datatype'>int</code> <code class='argument'>fd</code>, <code class='datatype'>string</code> <code class='argument'>mode</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>See <code>open()</code>.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>open()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>dup</b></span> + </dt> + <dd><p><code><code class='object unresolved'>Stdio.Fd</code> <b><span class='method'>dup</span>(</b><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Duplicate the file.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>dup2()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>dup2</b></span> + </dt> + <dd><p><code><code class='datatype'>int</code> <b><span class='method'>dup2</span>(</b><code class='object unresolved'>Stdio.File</code> <code class='argument'>to</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Duplicate a file over another.</p> + <p> This function works similarly to <code>assign()</code>, but instead of making +  the argument a reference to the same file, it creates a new file +  with the same properties and places it in the argument.</p> + </dd> + <dt class='head--doc'>Returns</dt> + <dd class='body--doc'><p>Returns <code class='expr'>1</code> on success and <code class='expr'>0</code> (zero) on failure.</p> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p><code>to</code> need not be open, in which +  case a new fd is allocated.</p> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p>Note also that <code>to</code> is also assigned to the same backend (if any) +  as this object.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>assign()</code>, <code>dup()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>errno</b></span> + </dt> + <dd><p><code><code class='datatype'>int</code> <b><span class='method'>errno</span>(</b><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Return the errno for the latest failed file operation.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>fd_factory</b></span> + </dt> + <dd><p><code><code class='object unresolved'>Fd</code> <b><span class='method'>fd_factory</span>(</b><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Factory creating <code>Stdio.Fd</code> objects.</p> + <p> This function is called by <code>openat()</code>, <code>pipe()</code>, <code>dup()</code> +  and other functions creating new file objects.</p> + <p> The default implementation calls <code class='expr'>object_program(this_object())()</code> +  to create the new object, and returns the <code>Fd</code> inherit in it.</p> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p>Note that this function must return the <code>Fd</code> inherit in the object.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>Stdio.Port()-&gt;fd_factory()</code>, <code>openat()</code>, <code>pipe()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>get_dir</b></span> + </dt> + <dd><p><code><code class='datatype'>array</code>(<code class='datatype'>string</code>) <b><span class='method'>get_dir</span>(</b><code class='datatype'>string</code>|<code class='datatype'>void</code> <code class='argument'>path</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Get directory contents relative to an open directory.</p> + </dd> + <dt class='head--doc'><span id='p-path'></span>Parameter <code class='parameter'>path</code></dt> + <dd></dd><dd class='body--doc'><p>Path relative to the open directory. Defaults to the +  directory itself.</p> + </dd> + <dt class='head--doc'>Returns</dt> + <dd class='body--doc'><p>Returns an array of filenames.</p> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p>Not available on all architectures.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>predef::get_dir()</code>, <code>statat()</code>, <code>openat()</code>, <code>unlinkat()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>getxattr</b></span> + </dt> + <dd><p><code><code class='datatype'>string</code> <b><span class='method'>getxattr</span>(</b><code class='datatype'>string</code> <code class='argument'>attr</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Return the value of a specified attribute, or 0 if it does not exist</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>grantpt</b></span> + </dt> + <dd><p><code><code class='datatype'>string</code> <b><span class='method'>grantpt</span>(</b><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>If this file has been created by calling <code>openpt()</code>, return the +  filename of the associated pts-file. This function should only be +  called once.</p> + </dd> + <dt class='head--doc'>Returns</dt> + <dd class='body--doc'><p>Returns the filename of the corresponding pts.</p> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p>This function is only available on some platforms.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>is_open</b></span> + </dt> + <dd><p><code><code class='datatype'>int</code> <b><span class='method'>is_open</span>(</b><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Returns true if the file is open.</p> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p>If the file is a socket that has been closed from the remote side, +  this function might still return true.</p> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p>Most methods can't be called for a file descriptor that isn't +  open. Notable exceptions <code>errno</code>, <code>mode</code>, and the set and query +  functions for callbacks and backend.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>linger</b></span> + </dt> + <dd><p><code><code class='datatype'>bool</code> <b><span class='method'>linger</span>(</b><code class='datatype'>int(-1..65535)</code>|<code class='datatype'>void</code> <code class='argument'>seconds</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Set the socket linger behaviour on <code>close()</code>.</p> + </dd> + <dt class='head--doc'><span id='p-seconds'></span>Parameter <code class='parameter'>seconds</code></dt> + <dd></dd><dd class='body--doc'><table class='box'><tr><td><code><code class='key'>-1</code></code></td><td><p>Reset to default behaviour. This typically means that +  <code>close()</code> will return immediately, but any buffered +  data will still be sent if possible.</p> + </td></tr> + <tr><td><code><code class='key'>0</code></code></td><td><p>Terminate the connection immediately on <code>close()</code>, +  and discard any buffered data.</p> + </td></tr> + <tr><td><code><code class='key'>(1..65535)</code></code></td><td><p>Have <code>close()</code> wait for at most <code>seconds</code> seconds +  for any buffered data to be sent after which the +  connection is terminated.</p> + </td></tr> + </table> + </dd> + <dt class='head--doc'>Returns</dt> + <dd class='body--doc'><p>Returns <code class='expr'>1</code> on success, and <code class='expr'>0</code> (zero) on failure.</p> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p>This operation is only valid on sockets.</p> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p>This function was not available in Pike 7.8.775 and earlier.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>close()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>listxattr</b></span> + </dt> + <dd><p><code><code class='datatype'>array</code>(<code class='datatype'>string</code>) <b><span class='method'>listxattr</span>(</b><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Return an array of all extended attributes set on the file</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>lock</b></span> + </dt> + <dd><p><code><code class='object unresolved'>Stdio.FileLockKey</code> <b><span class='method'>lock</span>(</b><b>)</b></code><br> + <code><code class='object unresolved'>Stdio.FileLockKey</code> <b><span class='method'>lock</span>(</b><code class='datatype'>bool</code> <code class='argument'>is_recursive</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Makes an exclusive file lock on this file.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>trylock()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>mode</b></span> + </dt> + <dd><p><code><code class='object unresolved'>FileModeFlags</code>|<code class='object unresolved'>FilePropertyFlags</code> <b><span class='method'>mode</span>(</b><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Returns the open mode and capabilities for the file.</p> + </dd> + <dt class='head--doc'>Returns</dt> + <dd class='body--doc'><p>Returns an <code>`|()</code> of the following flags:</p> + <table class='box'><tr><td><code><code class='key'>0x1000</code></code></td><td><p><code>FILE_READ</code></p> + </td></tr> + <tr><td><code><code class='key'>0x2000</code></code></td><td><p><code>FILE_WRITE</code></p> + </td></tr> + <tr><td><code><code class='key'>0x4000</code></code></td><td><p><code>FILE_APPEND</code></p> + </td></tr> + <tr><td><code><code class='key'>0x8000</code></code></td><td><p><code>FILE_CREATE</code></p> + </td></tr> + <tr><td><code><code class='key'>0x0100</code></code></td><td><p><code>FILE_TRUNC</code></p> + </td></tr> + <tr><td><code><code class='key'>0x0200</code></code></td><td><p><code>FILE_EXCLUSIVE</code></p> + </td></tr> + <tr><td><code><code class='key'>0x0400</code></code></td><td><p><code>FILE_NONBLOCKING</code></p> + </td></tr> + <tr><td><code><code class='key'>0x0080</code></code></td><td><p><code>PROP_TTY</code></p> + </td></tr> + <tr><td><code><code class='key'>0x0040</code></code></td><td><p><code>PROP_SEND_FD</code></p> + </td></tr> + <tr><td><code><code class='key'>0x0010</code></code></td><td><p><code>PROP_BIDIRECTIONAL</code></p> + </td></tr> + <tr><td><code><code class='key'>0x0008</code></code></td><td><p><code>PROP_BUFFERED</code></p> + </td></tr> + <tr><td><code><code class='key'>0x0004</code></code></td><td><p><code>PROP_SHUTDOWN</code></p> + </td></tr> + <tr><td><code><code class='key'>0x0002</code></code></td><td><p><code>PROP_NONBLOCK</code></p> + </td></tr> + <tr><td><code><code class='key'>0x0001</code></code></td><td><p><code>PROP_IPC</code></p> + </td></tr> + </table> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p>In some versions of Pike 7.8 the <tt>PROP_</tt> flags were +  filtered from the result.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>open()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>open</b></span> + </dt> + <dd><p><code><code class='datatype'>int</code> <b><span class='method'>open</span>(</b><code class='datatype'>string</code> <code class='argument'>filename</code>, <code class='datatype'>string</code> <code class='argument'>mode</code><b>)</b></code><br> + <code><code class='datatype'>int</code> <b><span class='method'>open</span>(</b><code class='datatype'>string</code> <code class='argument'>filename</code>, <code class='datatype'>string</code> <code class='argument'>mode</code>, <code class='datatype'>int</code> <code class='argument'>access</code><b>)</b></code><br> + <code><code class='datatype'>int</code> <b><span class='method'>open</span>(</b><code class='datatype'>int</code> <code class='argument'>fd</code>, <code class='datatype'>string</code> <code class='argument'>mode</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Open a file, or use an existing fd.</p> + <p> If <code>filename</code> is given, attempt to open the named file. If <code>fd</code> +  is given instead, it should be the file descriptor for an already +  opened file, which will then be used by this object.</p> + <p> <code>mode</code> describes how the file is opened. It's a case-insensitive +  string consisting of one or more of the following letters:</p> + <dl class='group--doc'><dt>"r"</dt> + <dd><p>Open for reading.</p> + </dd> + <dt>"w"</dt> + <dd><p>Open for writing.</p> + </dd> + <dt>"a"</dt> + <dd><p>Append new data to the end.</p> + </dd> + <dt>"c"</dt> + <dd><p>Create the file if it doesn't exist already.</p> + </dd> + <dt>"t"</dt> + <dd><p>Truncate the file to zero length if it already contains data. +  Use only together with <code class='expr'>"w"</code>.</p> + </dd> + <dt>"x"</dt> + <dd><p>Open exclusively - the open fails if the file already exists. +  Use only together with <code class='expr'>"c"</code>. Note that it's not safe to +  assume that this is atomic on some systems.</p> + </dd> + </dl><p><code>access</code> specifies the permissions to use if a new file is +  created. It is a UNIX style permission bitfield:</p> + <dl class='group--doc'><dt>0400</dt> + <dd><p>User has read permission.</p> + </dd> + <dt>0200</dt> + <dd><p>User has write permission.</p> + </dd> + <dt>0100</dt> + <dd><p>User has execute permission.</p> + </dd> + <dt>0040</dt> + <dd><p>Group has read permission.</p> + </dd> + <dt>0020</dt> + <dd><p>Group has write permission.</p> + </dd> + <dt>0010</dt> + <dd><p>Group has execute permission.</p> + </dd> + <dt>0004</dt> + <dd><p>Others have read permission.</p> + </dd> + <dt>0002</dt> + <dd><p>Others have write permission.</p> + </dd> + <dt>0001</dt> + <dd><p>Others have execute permission.</p> + </dd> + </dl><p>It's system dependent on which of these bits that are actually +  heeded. If <code>access</code> is not specified, it defaults to +  <code class='expr'>00666</code>, but note that on UNIX systems it's masked with the +  process umask before use.</p> + </dd> + <dt class='head--doc'>Returns</dt> + <dd class='body--doc'><p>Returns nonzero on success and <code class='expr'>0</code> (zero) on failure. If +  there is a failure then <code>errno</code> returns the error code.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>close()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>open_socket</b></span> + </dt> + <dd><p><code><code class='datatype'>bool</code> <b><span class='method'>open_socket</span>(</b><code class='datatype'>int</code>|<code class='datatype'>void</code> <code class='argument'>port</code>, <code class='datatype'>string</code>|<code class='datatype'>void</code> <code class='argument'>addr</code>, <code class='datatype'>int</code>|<code class='datatype'>string</code>|<code class='datatype'>void</code> <code class='argument'>family_hint</code><b>)</b></code></p></dd> + </dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>openat</b></span> + </dt> + <dd><p><code><code class='object unresolved'>Stdio.File</code> <b><span class='method'>openat</span>(</b><code class='datatype'>string</code> <code class='argument'>filename</code><b>)</b></code><br> + <code><code class='object unresolved'>Stdio.File</code> <b><span class='method'>openat</span>(</b><code class='datatype'>string</code> <code class='argument'>filename</code>, <code class='datatype'>string</code> <code class='argument'>mode</code><b>)</b></code><br> + <code><code class='object unresolved'>Stdio.File</code> <b><span class='method'>openat</span>(</b><code class='datatype'>string</code> <code class='argument'>filename</code>, <code class='datatype'>string</code> <code class='argument'>mode</code>, <code class='datatype'>int</code> <code class='argument'>access</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Open a file relative to an opened directory.</p> + </dd> + <dt class='head--doc'>Returns</dt> + <dd class='body--doc'><p>Returns a new file object on success, and <code class='expr'>0</code> (zero) on failure.</p> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p>Not available on all architectures.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>open()</code>, <code>statat()</code>, <code>unlinkat()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>openpt</b></span> + </dt> + <dd><p><code><code class='datatype'>int</code> <b><span class='method'>openpt</span>(</b><code class='datatype'>string</code> <code class='argument'>mode</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Open the master end of a pseudo-terminal pair.</p> + </dd> + <dt class='head--doc'>Returns</dt> + <dd class='body--doc'><p>This function returns <code class='expr'>1</code> for success, <code class='expr'>0</code> otherwise.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>grantpt()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>peek</b></span> + </dt> + <dd><p><code><code class='datatype'>int(-1..1)</code> <b><span class='method'>peek</span>(</b><b>)</b></code><br> + <code><code class='datatype'>int(-1..1)</code> <b><span class='method'>peek</span>(</b><code class='datatype'>int</code>|<code class='datatype'>float</code> <code class='argument'>timeout</code><b>)</b></code><br> + <code><code class='datatype'>int(-1..1)</code> <b><span class='method'>peek</span>(</b><code class='datatype'>int</code>|<code class='datatype'>float</code> <code class='argument'>timeout</code>, <code class='datatype'>int</code> <code class='argument'>not_eof</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Check if there is data available to read, +  or wait some time for available data to read.</p> + <p> More specifically, a later call to <code>read()</code> will return +  immediately, either due to data being present, or due to +  some error (eg if a socket has been closed).</p> + </dd> + <dt class='head--doc'><span id='p-timeout'></span>Parameter <code class='parameter'>timeout</code></dt> + <dd></dd><dd class='body--doc'><p>Timeout in seconds.</p> + </dd> + <dt class='head--doc'><span id='p-not_eof'></span>Parameter <code class='parameter'>not_eof</code></dt> + <dd></dd><dd class='body--doc'><p>Flag for specifying handling of end of file. +  The following values are currently defined:</p> + <table class='box'><tr><td><code><code class='key'>0</code></code></td><td><p>Traditional (and default) behaviour. Return <code class='expr'>1</code> +  at EOF.</p> + </td></tr> + <tr><td><code><code class='key'>1</code></code></td><td><p>Regard EOF as an error. Return <code class='expr'>-1</code> and set <code>errno()</code> +  to return <code class='expr'>EPIPE</code> at EOF.</p> + </td></tr> + </table> + </dd> + <dt class='head--doc'>Returns</dt> + <dd class='body--doc'><table class='box'><tr><td><code><code class='key'>1</code></code></td><td><p>There is data available to <code>read()</code>, or <code>not_eof</code> is +  <code class='expr'>0</code> (zero) and we're at EOF. A later call to +  <code>read()</code> will not block.</p> + </td></tr> + <tr><td><code><code class='key'>0</code></code></td><td><p>There is no data available (ie timeout).</p> + </td></tr> + <tr><td><code><code class='key'>-1</code></code></td><td><p>Error condition. The error code returned by <code>errno()</code> +  has been updated.</p> + </td></tr> + </table> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>errno()</code>, <code>read()</code></p> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p>The function may be interrupted prematurely +  of the timeout (due to signals); +  check the timing manually if this is imporant.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>pipe</b></span> + </dt> + <dd><p><code><code class='object unresolved'>Stdio.File</code> <b><span class='method'>pipe</span>(</b><b>)</b></code><br> + <code><code class='object unresolved'>Stdio.File</code> <b><span class='method'>pipe</span>(</b><code class='datatype'>int</code> <code class='argument'>flags</code><b>)</b></code></p></dd> + </dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>proxy</b></span> + </dt> + <dd><p><code><code class='datatype'>void</code> <b><span class='method'>proxy</span>(</b><code class='object unresolved'>Stdio.File</code> <code class='argument'>from</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Starts a thread that asynchronously copies data from <code>from</code> +  to this file.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>Stdio.sendfile()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>query_address</b></span> + </dt> + <dd><p><code><code class='datatype'>string</code> <b><span class='method'>query_address</span>(</b><b>)</b></code><br> + <code><code class='datatype'>string</code> <b><span class='method'>query_address</span>(</b><code class='datatype'>bool</code> <code class='argument'>local</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Get address and port of a socket end-point.</p> + </dd> + <dt class='head--doc'><span id='p-local'></span>Parameter <code class='parameter'>local</code></dt> + <dd></dd><dd class='body--doc'><p>If the argument <code>local</code> is not specified, or is <code class='expr'>0</code> +  (zero), the remote end-point is returned. Otherwise, if <code>local</code> +  is <code class='expr'>1</code>, the local end-point is returned.</p> + </dd> + <dt class='head--doc'>Returns</dt> + <dd class='body--doc'><p>This function returns the address and port of a socket end-point +  on the form <code class='expr'>"x.x.x.x&nbsp;port"</code> (IPv4) or +  <code class='expr'>"x:x:x:x:x:x:x:x&nbsp;port"</code> (IPv6). IPv6 addresses +  may use the contracted syntax.</p> + <p> If this file is not a socket, is not connected, or some other +  error occurs, <code class='expr'>0</code> (zero) is returned and <code>errno()</code> will +  return the error code.</p> + </dd> + <dt class='head--doc'>Throws</dt> + <dd class='body--doc'><p>An error is thrown if the socket (or file) isn't open.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>connect()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>query_backend</b></span> + </dt> + <dd><p><code><code class='object unresolved'>Pike.Backend</code> <b><span class='method'>query_backend</span>(</b><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Return the backend used for the callbacks.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>set_backend</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>query_fd</b></span> + </dt> + <dd><p><code><code class='datatype'>int</code> <b><span class='method'>query_fd</span>(</b><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Returns the file descriptor number associated with this object.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>query_mtu</b></span> + </dt> + <dd><p><code><code class='datatype'>int</code> <b><span class='method'>query_mtu</span>(</b><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Get the Max Transfer Unit for the object (if any).</p> + </dd> + <dt class='head--doc'>Returns</dt> + <dd class='body--doc'><table class='box'><tr><td><code><code class='key'>-1</code></code></td><td><p>Returns <code class='expr'>-1</code> if the object is not a socket or +  if the mtu is unknown.</p> + </td></tr> + <tr><td><code><code class='key'>(1..)</code></code></td><td><p>Returns a positive value with the mtu on success.</p> + </td></tr> + </table></dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>read</b></span> + </dt> + <dd><p><code><code class='datatype'>string(8bit)</code> <b><span class='method'>read</span>(</b><b>)</b></code><br> + <code><code class='datatype'>string(8bit)</code> <b><span class='method'>read</span>(</b><code class='datatype'>int</code> <code class='argument'>len</code><b>)</b></code><br> + <code><code class='datatype'>string(8bit)</code> <b><span class='method'>read</span>(</b><code class='datatype'>int</code> <code class='argument'>len</code>, <code class='datatype'>bool</code> <code class='argument'>not_all</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Read data from a file or a stream.</p> + <p> Attempts to read <code>len</code> bytes from the file, and return it as a +  string. Less than <code>len</code> bytes can be returned if:</p> + <ul> + <li><p>end-of-file is encountered for a normal file, or</p> + </li><li><p>it's a stream that has been closed from the other end, or</p> + </li><li><p>it's a stream in nonblocking mode, or</p> + </li><li><p>it's a stream and <code>not_all</code> is set, or</p> + </li><li><p><code>not_all</code> isn't set and an error occurred (see below).</p> + </li></ul><p>If <code>not_all</code> is nonzero, <code>read()</code> does not try its best to read +  as many bytes as you have asked for, but merely returns as much as +  the system read function returns. This is mainly useful with +  stream devices which can return exactly one row or packet at a +  time. If <code>not_all</code> is used in blocking mode, <code>read()</code> only +  blocks if there's no data at all available.</p> + <p> If something goes wrong and <code>not_all</code> is set, zero is returned. +  If something goes wrong and <code>not_all</code> is zero or left out, then +  either zero or a string shorter than <code>len</code> is returned. If the +  problem persists then a later call to <code>read()</code> fails and returns +  zero, however.</p> + <p> If everything went fine, a call to <code>errno()</code> directly afterwards +  returns zero. That includes an end due to end-of-file or remote +  close.</p> + <p> If no arguments are given, <code>read()</code> reads to the end of the file +  or stream.</p> + <p> If any file descriptors have been sent by the other side of the +  stream, <code>receive_fd()</code> will be called once for every sent file +  descriptor.</p> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p>It's not necessary to set <code>not_all</code> to avoid blocking reading +  when nonblocking mode is used.</p> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p>When at the end of a file or stream, repeated calls to <code>read()</code> +  will return the empty string since it's not considered an error. +  The empty string is never returned in other cases, unless nonblocking +  mode is used or <code>len</code> is zero.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>read_oob()</code>, <code>write()</code>, <code>receive_fd()</code>, <code>send_fd()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>read</b></span> + </dt> + <dd><p><code><code class='datatype'>int</code> <b><span class='method'>read</span>(</b><code class='object unresolved'>System.Memory</code> <code class='argument'>dst</code>, <code class='datatype'>void</code>|<code class='datatype'>int(0..)</code> <code class='argument'>offset</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Reads data from a file or stream into the buffer <code>dst</code> at offset +  <code>offset</code>. Tries to read as many bytes as buffer space available.</p> + </dd> + <dt class='head--doc'>Returns</dt> + <dd class='body--doc'><p>The number of bytes read. Returns <code class='expr'>-1</code> on error and +  <code>errno()</code> will return the corresponding error code.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>read</b></span> + </dt> + <dd><p><code><code class='datatype'>int</code> <b><span class='method'>read</span>(</b><code class='object unresolved'>Stdio.Buffer</code>|<code class='object unresolved'>String.Buffer</code> <code class='argument'>dst</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Reads data from a file or stream into the buffer <code>dst</code>. Tries to +  read as many bytes as buffer space available. +  Will advance the write position in <code>dst</code> by the number of bytes +  read.</p> + </dd> + <dt class='head--doc'>Returns</dt> + <dd class='body--doc'><p>The number of bytes read. Returns <code class='expr'>-1</code> on error and +  <code>errno()</code> will return the corresponding error code.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>read_oob</b></span> + </dt> + <dd><p><code><code class='datatype'>string</code> <b><span class='method'>read_oob</span>(</b><b>)</b></code><br> + <code><code class='datatype'>string</code> <b><span class='method'>read_oob</span>(</b><code class='datatype'>int</code> <code class='argument'>len</code><b>)</b></code><br> + <code><code class='datatype'>string</code> <b><span class='method'>read_oob</span>(</b><code class='datatype'>int</code> <code class='argument'>len</code>, <code class='datatype'>bool</code> <code class='argument'>not_all</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Attempts to read <code>len</code> bytes of out-of-band data from the stream, +  and returns it as a string. Less than <code>len</code> bytes can be returned +  if:</p> + <ul> + <li><p>the stream has been closed from the other end, or</p> + </li><li><p>nonblocking mode is used, or</p> + </li><li><p><code>not_all</code> is set, or</p> + </li><li><p><code>not_all</code> isn't set and an error occurred (see below).</p> + </li></ul><p>If <code>not_all</code> is nonzero, <code>read_oob()</code> only returns as many bytes +  of out-of-band data as are currently available.</p> + <p> If something goes wrong and <code>not_all</code> is set, zero is returned. +  If something goes wrong and <code>not_all</code> is zero or left out, then +  either zero or a string shorter than <code>len</code> is returned. If the +  problem persists then a later call to <code>read_oob()</code> fails and +  returns zero, however.</p> + <p> If everything went fine, a call to <code>errno()</code> directly afterwards +  returns zero. That includes an end due to remote close.</p> + <p> If no arguments are given, <code>read_oob()</code> reads to the end of the +  stream.</p> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p>It is not guaranteed that all out-of-band data sent from the +  other end is received. Most streams only allow for a single byte +  of out-of-band data at a time.</p> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p>It's not necessary to set <code>not_all</code> to avoid blocking reading +  when nonblocking mode is used.</p> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p>When at the end of a file or stream, repeated calls to <code>read()</code> +  returns the empty string since it's not considered an error. The +  empty string is never returned in other cases, unless nonblocking +  mode is used or <code>len</code> is zero.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>read()</code>, <code>write_oob()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>receive_fd</b></span> + </dt> + <dd><p><code><code class='datatype'>void</code> <b><span class='method'>receive_fd</span>(</b><code class='object unresolved'>Stdio.Fd</code> <code class='argument'>fd</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Remote file descriptor reception handler.</p> + </dd> + <dt class='head--doc'><span id='p-fd'></span>Parameter <code class='parameter'>fd</code></dt> + <dd></dd><dd class='body--doc'><p>File descriptor received from the remote end of a <code>pipe()</code>. +  This object has been created by <code>fd_factory()</code>.</p> + <p> This function is called from <code>read()</code> when a remote file +  descriptor has been received over a <code>PROP_SEND_FD</code> +  capable <code>pipe()</code>.</p> + <p> The default implementation is just a prototype.</p> + <p> Overload this function to enable reception of +  remote file descriptors.</p> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p>The capability of sending and receiving remote file +  descriptors is only available on some operating systems. +  This capability is indicated by the precence of <code>__HAVE_SEND_FD__</code>.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>send_fd()</code>, <code>read()</code>, <code>fd_factory()</code>, <code>__HAVE_SEND_FD__</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>release_fd</b></span> + </dt> + <dd><p><code><code class='datatype'>int</code> <b><span class='method'>release_fd</span>(</b><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Returns the file descriptor number associated with this object, in +  addition to releasing it so that this object behaves as if closed. +  Other settings like callbacks and backend remain intact. +  <code>take_fd</code> can later be used to reinstate the file descriptor so +  that the state is restored.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>query_fd()</code>, <code>take_fd()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>removexattr</b></span> + </dt> + <dd><p><code><code class='datatype'>void</code> <b><span class='method'>removexattr</span>(</b><code class='datatype'>string</code> <code class='argument'>attr</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Remove the specified extended attribute.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>seek</b></span> + </dt> + <dd><p><code><code class='datatype'>int</code> <b><span class='method'>seek</span>(</b><code class='datatype'>int</code> <code class='argument'>offset</code><b>)</b></code><br> + <code><code class='datatype'>int</code> <b><span class='method'>seek</span>(</b><code class='datatype'>int</code> <code class='argument'>offset</code>, <code class='datatype'>string</code> <code class='argument'>whence</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>The seek() function repositions the offset of the open file +  associated with the file descriptor fd to the argument <code>offset</code> +  according to the directive <code>whence</code> as follows:</p> + <table class='box'><tr><td><code><code class='key'>Stdio.SEEK_SET</code></code></td><td><p>The offset is set to <code>offset</code> bytes.</p> + </td></tr> + <tr><td><code><code class='key'>Stdio.SEEK_CUR</code></code></td><td><p>The offset is set to its current location plus <code>offset</code> bytes.</p> + </td></tr> + <tr><td><code><code class='key'>Stdio.SEEK_END</code></code></td><td><p>The offset is set to the size of the file plus <code>offset</code> bytes.</p> + </td></tr> + </table><p>If <code>whence</code> is not specified it is SEEK_SET if <code>offset</code> is +  positive, and if <code>offset</code> is negative SEEK_END.</p> + <p> The seek() function on most operating systems allows the file +  offset to be set beyond the end of the file (but this does not +  change the size of the file). If data is later written at this +  point, subsequent reads of the data in the gap (a "hole") return +  null bytes ('\0') until data is actually written into the gap.</p> + <p> Seeking file data and holes</p> + <p> Stdio.SEEK_DATA and Stdio.SEEK_HOLE are nonstandard extensions +  present in Linux, Solaris, FreeBSD, and DragonFly BSD; they are +  proposed for inclusion in the next POSIX revision.</p> + <table class='box'><tr><td><code><code class='key'>Stdio.SEEK_DATA</code></code></td><td><p>Adjust the file offset to the next location in the file greater +  than or equal to offset containing data. If offset points to +  data, then the file offset is set to offset.</p> + </td></tr> + <tr><td><code><code class='key'>Stdio.SEEK_HOLE</code></code></td><td><p>Adjust the file offset to the next hole in the file greater than +  or equal to offset. If offset points into the middle of a hole, +  then the file offset is set to offset. If there is no hole past +  offset, then the file offset is adjusted to the end of the file +  (i.e., there is an implicit hole at the end of any file).</p> + </td></tr> + </table><p>In both of the above cases, seek() fails if offset points past the +  end of the file.</p> + <p> These operations allow applications to map holes in a sparsely +  allocated file. This can be useful for applications such as file +  backup tools, which can save space when creating backups and +  preserve holes, if they have a mechanism for discovering holes.</p> + <p> For the purposes of these operations, a hole is a sequence of +  zeros that (normally) has not been allocated in the underlying +  file storage. However, a filesystem is not obliged to report +  holes, so these operations are not a guaranteed mechanism for +  mapping the storage space actually allocated to a file. +  (Furthermore, a sequence of zeros that actually has been written +  to the underlying storage may or may not be reported as a hole.)</p> + <p> In the simplest implementation, a filesystem can support the +  operations by making SEEK_HOLE always return the offset of the end +  of the file, and making SEEK_DATA always return offset (i.e., even +  if the location referred to by offset is a hole, it can be +  considered to consist of data that is a sequence of zeros).</p> + </dd> + <dt class='head--doc'>Returns</dt> + <dd class='body--doc'><p>Upon successful completion, seek() returns the resulting offset +  location as measured in bytes from the beginning of the file. On +  error, the value (off_t) -1 is returned and <code>errno</code> is set to +  indicate the error.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>tell()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>seek</b></span> + </dt> + <dd><p><code><code class='modifier'>variant</code> <code class='deprecated'>__deprecated__</code> <code class='datatype'>int</code> <b><span class='method'>seek</span>(</b><code class='datatype'>int</code> <code class='argument'>unit</code>, <code class='datatype'>int</code> <code class='argument'>mult</code><b>)</b></code><br> + <code><code class='modifier'>variant</code> <code class='deprecated'>__deprecated__</code> <code class='datatype'>int</code> <b><span class='method'>seek</span>(</b><code class='datatype'>int</code> <code class='argument'>unit</code>, <code class='datatype'>int</code> <code class='argument'>mult</code>, <code class='datatype'>int</code> <code class='argument'>add</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Seek to a specified offset in a file.</p> + <p> If <code>mult</code> or <code>add</code> are specified, <code>pos</code> is calculated as +  <code class='expr'><code>pos</code>&nbsp;=&nbsp;<code>unit</code>*<code>mult</code>&nbsp;+&nbsp;<code>add</code></code>.</p> + <p> If <code>pos</code> is negative then it is relative to the end of the file, +  otherwise it's an absolute offset from the start of the file.</p> + </dd> + <dt class='head--doc'>Returns</dt> + <dd class='body--doc'><p>Returns the new offset, or <code class='expr'>-1</code> on failure.</p> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p>The arguments <code>mult</code> and <code>add</code> are considered obsolete, and +  should not be used.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>tell()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>send_fd</b></span> + </dt> + <dd><p><code><code class='datatype'>void</code> <b><span class='method'>send_fd</span>(</b><code class='object unresolved'>Stdio.Fd</code> <code class='argument'>fd</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Queues an open file descriptor for sending to the other end of a stream.</p> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p>The actual sending is performed at the next successful call +  to <code>write()</code>, this is due to limitations in the system calls. +  This means that it isn't possible to send a file descriptor +  without also sending some in-band data.</p> + <p> This operation is only supported on <code>pipe()</code>'s created with +  <code>PROP_SEND_FD</code>.</p> + <p> This function is not available on all operating systems, check +  for <code>__HAVE_SEND_FD__</code>.</p> + <p> The queue is emptied on successful <code>write()</code> and when the +  write direction is <code>close()</code>'d.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>receive_fd()</code>, <code>write()</code>, <code>pipe()</code>, <code>read()</code>, <code>__HAVE_SEND_FD__</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>set_backend</b></span> + </dt> + <dd><p><code><code class='datatype'>void</code> <b><span class='method'>set_backend</span>(</b><code class='object unresolved'>Pike.Backend</code> <code class='argument'>backend</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Set the backend used for the callbacks.</p> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p>The backend keeps a reference to this object only when it is in +  callback mode. So if this object hasn't got any active callbacks +  and it runs out of other references, it will still be destructed +  quickly (after closing, if necessary).</p> + <p> Also, this object does not keep a reference to the backend.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>query_backend</code>, <code>set_nonblocking</code>, <code>set_read_callback</code>, <code>set_write_callback</code>, <code>set_fs_event_callback</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>set_blocking</b></span> + </dt> + <dd><p><code><code class='datatype'>void</code> <b><span class='method'>set_blocking</span>(</b><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Sets this file to blocking operation.</p> + <p> This is the inverse operation of <code>set_nonblocking()</code>.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>set_nonblocking()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>set_buffer</b></span> + </dt> + <dd><p><code><code class='datatype'>void</code> <b><span class='method'>set_buffer</span>(</b><code class='datatype'>int</code> <code class='argument'>bufsize</code>, <code class='datatype'>string</code> <code class='argument'>mode</code><b>)</b></code><br> + <code><code class='datatype'>void</code> <b><span class='method'>set_buffer</span>(</b><code class='datatype'>int</code> <code class='argument'>bufsize</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Set internal socket buffer.</p> + <p> This function sets the internal buffer size of a socket or stream.</p> + <p> The second argument allows you to set the read or write buffer by +  specifying <code class='expr'>"r"</code> or <code class='expr'>"w"</code>.</p> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p>It is not guaranteed that this function actually does anything, +  but it certainly helps to increase data transfer speed when it does.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>open_socket()</code>, <code>accept()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>set_close_on_exec</b></span> + </dt> + <dd><p><code><code class='datatype'>void</code> <b><span class='method'>set_close_on_exec</span>(</b><code class='datatype'>bool</code> <code class='argument'>yes_no</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Marks the file as to be closed in spawned processes.</p> + <p> This function determines whether this file will be closed when +  calling exec().</p> + <p> Default is that the file WILL be closed on exec except for +  stdin, stdout and stderr.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>Process.create_process()</code>, <code>exec()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>set_keepalive</b></span> + </dt> + <dd><p><code><code class='datatype'>bool</code> <b><span class='method'>set_keepalive</span>(</b><code class='datatype'>bool</code> <code class='argument'>on_off</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Equivalent to setsockopt(Stdio.SO_KEEPALIVE, on_off), but will set errno +  if SO_KEEPALIVE is not supported, rather than issuing a compilation error +  for the missing constant.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>set_nodelay</b></span> + </dt> + <dd><p><code><code class='datatype'>bool</code> <b><span class='method'>set_nodelay</span>(</b><code class='datatype'>bool</code>|<code class='datatype'>void</code> <code class='argument'>state</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Control Nagle's Algorithm (RFC 896)</p> + </dd> + <dt class='head--doc'><span id='p-state'></span>Parameter <code class='parameter'>state</code></dt> + <dd></dd><dd class='body--doc'><table class='box'><tr><td><code><code class='key'>0</code></code></td><td><p>Return to the normal state of using Nagle's Algorithm</p> + </td></tr> + <tr><td><code><code class='key'>1</code></code></td><td><p>(default) Disable Nagling - small writes will not be queued.</p> + </td></tr> + </table> + </dd> + <dt class='head--doc'>Returns</dt> + <dd class='body--doc'><p>Returns <code class='expr'>1</code> on success, and <code class='expr'>0</code> (zero) on failure.</p> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p>This operation is only valid on sockets.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p>setsockopt()</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>set_nonblocking</b></span> + </dt> + <dd><p><code><code class='datatype'>void</code> <b><span class='method'>set_nonblocking</span>(</b><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Sets this file to nonblocking operation.</p> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p>Nonblocking operation is not supported on all Stdio.File objects. +  Notably it is not guaranteed to be supported on objects returned +  by <code>pipe()</code> unless <code>PROP_NONBLOCK</code> was specified in the call +  to <code>pipe()</code>.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>set_blocking()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>setsockopt</b></span> + </dt> + <dd><p><code><code class='datatype'>bool</code> <b><span class='method'>setsockopt</span>(</b><code class='datatype'>int</code> <code class='argument'>level</code>, <code class='datatype'>int</code> <code class='argument'>opt</code>, <code class='datatype'>int</code> <code class='argument'>state</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Set socket options like Stdio.SO_KEEPALIVE. This function is always +  available; the presence or absence of the option constants indicates +  availability of those features.</p> + </dd> + <dt class='head--doc'>Returns</dt> + <dd class='body--doc'><p>1 if successful, 0 if not (and sets errno())</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>set_keepalive()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>setxattr</b></span> + </dt> + <dd><p><code><code class='datatype'>void</code> <b><span class='method'>setxattr</span>(</b><code class='datatype'>string</code> <code class='argument'>attr</code>, <code class='datatype'>string</code> <code class='argument'>value</code>, <code class='datatype'>int</code> <code class='argument'>flags</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Set the attribute <code>attr</code> to the value <code>value</code>.</p> + <p> The flags parameter can be used to refine the semantics of the operation.</p> + <p> <code>Stdio.XATTR_CREATE</code> specifies a pure create, which +  fails if the named attribute exists already.</p> + <p> <code>Stdio.XATTR_REPLACE</code> specifies a pure replace operation, which +  fails if the named attribute does not already exist.</p> + <p> By default (no flags), the extended attribute will be created if need be, +  or will simply replace the value if the attribute exists.</p> + </dd> + <dt class='head--doc'>Returns</dt> + <dd class='body--doc'><p>1 if successful, 0 otherwise, setting errno.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>stat</b></span> + </dt> + <dd><p><code><code class='object unresolved'>Stat</code> <b><span class='method'>stat</span>(</b><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Get status for an open file.</p> + <p> This function returns the same information as the function +  <code>file_stat()</code>, but for the file it is called in. If file is not +  an open file, <code class='expr'>0</code> (zero) is returned. Zero is also returned +  if file is a pipe or socket.</p> + </dd> + <dt class='head--doc'>Returns</dt> + <dd class='body--doc'><p>See <code>file_stat()</code> for a description of the return value.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>file_stat()</code>, <code>statat()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>statat</b></span> + </dt> + <dd><p><code><code class='object unresolved'>Stat</code> <b><span class='method'>statat</span>(</b><code class='datatype'>string</code> <code class='argument'>path</code>, <code class='datatype'>void</code>|<code class='datatype'>bool</code> <code class='argument'>symlink</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Get status for a file relative an open directory.</p> + <p> This function returns the same information as the function +  <code>file_stat()</code>, but relative to the file it is called in. If file is not +  an open file, <code class='expr'>0</code> (zero) is returned. Zero is also returned +  if file is a pipe or socket.</p> + </dd> + <dt class='head--doc'>Returns</dt> + <dd class='body--doc'><p>See <code>file_stat()</code> for a description of the return value.</p> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p>Not available on all architectures.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>file_stat()</code>, <code>stat()</code>, <code>openat()</code>, <code>unlinkat()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>sync</b></span> + </dt> + <dd><p><code><code class='datatype'>bool</code> <b><span class='method'>sync</span>(</b><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Flush buffers to disk.</p> + </dd> + <dt class='head--doc'>Returns</dt> + <dd class='body--doc'><p>Returns <code class='expr'>0</code> (zero) and sets errno on failure.</p> + <p> Returns <code class='expr'>1</code> on success.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>take_fd</b></span> + </dt> + <dd><p><code><code class='datatype'>void</code> <b><span class='method'>take_fd</span>(</b><code class='datatype'>int</code> <code class='argument'>fd</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Rehooks the given file descriptor number to be associated with +  this object. As opposed to using <code>open</code> with a file descriptor +  number, it will be closed by this object upon destruct or when +  <code>close</code> is called.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>release_fd()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span>   <span class='homogen--name'><b>tcdrain</b></span>   </dt>   <dd><p><code><code class='datatype'>bool</code> <b><span class='method'>tcdrain</span>(</b><b>)</b></code></p></dd>      <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>Wait for transmission buffers to empty.</p>   </dd>   <dt class='head--doc'>Returns</dt>   <dd class='body--doc'><p>Returns <code class='expr'>1</code> on success and <code class='expr'>0</code> (zero) on failure.</p>   </dd>
autodoc.git/traditional_manual/chapter_21.html:68640:      <dt class='head--doc'>Description</dt>   <dd class='body--doc'><p>Set the number of rows and columns for a terminal.</p>   </dd>   <dt class='head--doc'>Returns</dt>   <dd class='body--doc'><p>Returns <code class='expr'>1</code> on success and <code class='expr'>0</code> (zero) on failure.</p>   </dd>   <dt class='head--doc'>See also</dt>   <dd class='body--doc'><p><code>tcgetattr()</code>, <code>tcsetattr()</code></p>   </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>tell</b></span> + </dt> + <dd><p><code><code class='datatype'>int</code> <b><span class='method'>tell</span>(</b><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Returns the current offset in the file.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>seek()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>truncate</b></span> + </dt> + <dd><p><code><code class='datatype'>bool</code> <b><span class='method'>truncate</span>(</b><code class='datatype'>int</code> <code class='argument'>length</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Truncate a file.</p> + <p> Truncates the file to the specified length <code>length</code>.</p> + </dd> + <dt class='head--doc'>Returns</dt> + <dd class='body--doc'><p>Returns <code class='expr'>1</code> on success, and <code class='expr'>0</code> (zero) on failure.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>open()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>trylock</b></span> + </dt> + <dd><p><code><code class='object unresolved'>Stdio.FileLockKey</code> <b><span class='method'>trylock</span>(</b><b>)</b></code><br> + <code><code class='object unresolved'>Stdio.FileLockKey</code> <b><span class='method'>trylock</span>(</b><code class='datatype'>bool</code> <code class='argument'>is_recursive</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Attempts to place a file lock on this file.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>lock()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>unlinkat</b></span> + </dt> + <dd><p><code><code class='datatype'>int</code> <b><span class='method'>unlinkat</span>(</b><code class='datatype'>string</code> <code class='argument'>f</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Remove a file or directory relative to an open file.</p> + </dd> + <dt class='head--doc'>Returns</dt> + <dd class='body--doc'><p>Returns <code class='expr'>0</code> (zero) on failure, <code class='expr'>1</code> otherwise.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>rm()</code>, <code>openat()</code>, <code>statat()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>write</b></span> + </dt> + <dd><p><code><code class='datatype'>int</code> <b><span class='method'>write</span>(</b><code class='datatype'>string</code> <code class='argument'>data</code><b>)</b></code><br> + <code><code class='datatype'>int</code> <b><span class='method'>write</span>(</b><code class='datatype'>string</code> <code class='argument'>format</code>, <code class='datatype'>mixed</code> ... <code class='argument'>extras</code><b>)</b></code><br> + <code><code class='datatype'>int</code> <b><span class='method'>write</span>(</b><code class='datatype'>array</code>(<code class='datatype'>string</code>) <code class='argument'>data</code><b>)</b></code><br> + <code><code class='datatype'>int</code> <b><span class='method'>write</span>(</b><code class='datatype'>array</code>(<code class='datatype'>string</code>) <code class='argument'>format</code>, <code class='datatype'>mixed</code> ... <code class='argument'>extras</code><b>)</b></code><br> + <code><code class='datatype'>int</code> <b><span class='method'>write</span>(</b><code class='object unresolved'>Stdio.Buffer</code>|<code class='object unresolved'>String.Buffer</code>|<code class='object unresolved'>System.Memory</code> <code class='argument'>data</code>, <code class='datatype'>void</code>|<code class='datatype'>int(0..)</code> <code class='argument'>offset</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Write data to a file or a stream.</p> + <p> If there are any file descriptors that have been queued for sending +  (with <code>send_fd()</code>), they will be sent.</p> + </dd> + <dt class='head--doc'><span id='p-data'></span>Parameter <code class='parameter'>data</code></dt> + <dd></dd><dd class='body--doc'><p>Data to write.</p> + <p> If <code>data</code> is an array of strings, they are written in sequence.</p> + </dd> + <dt class='head--doc'><span id='p-format'></span>Parameter <code class='parameter'>format</code></dt> + <dd></dd> + <dt class='head--doc'><span id='p-extras'></span>Parameter <code class='parameter'>extras</code></dt> + <dd></dd><dd class='body--doc'><p>If more than one argument is given, <code>sprintf()</code> is used to format +  them using <code>format</code>. If <code>format</code> is an array, the strings in it +  are concatenated and the result is used as format string.</p> + </dd> + <dt class='head--doc'><span id='p-offset'></span>Parameter <code class='parameter'>offset</code></dt> + <dd></dd><dd class='body--doc'><p>The offset in data to start writing from.</p> + </dd> + <dt class='head--doc'>Returns</dt> + <dd class='body--doc'><p>Writes <code>data</code> and returns the number of bytes that were +  actually written.</p> + <table class='box'><tr><td><code><code class='key'>(1..)</code></code></td><td><p>The number of bytes successfully written to the OS buffers.</p> + <p> This can be less than the size of the given data if eg:</p> + <ul> + <li><p>Some data was written successfully and then something went +  wrong.</p> + <p> If only some data was written due to an error and that error +  persists, then a later call to <code>write()</code> will fail and return +  <code class='expr'>-1</code>.</p> + </li><li><p>Nonblocking mode is used and not all data could be written +  without blocking.</p> + </li></ul> + </td></tr> + <tr><td><code><code class='key'>0</code></code></td><td><p>No bytes were written. This may be due to</p> + <ul> + <li><p><code>data</code> or the formatted data being the empty string.</p> + </li><li><p>Nonblocking mode is used and no data could be written +  without blocking.</p> + </li></ul> + </td></tr> + <tr><td><code><code class='key'>-1</code></code></td><td><p>Something went wrong and no bytes were written.</p> + </td></tr> + </table><p>If everything went fine, a call to <code>errno()</code> directly afterwards +  returns zero.</p> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p>Writing of wide strings is not supported. You have to encode the +  data somehow, e.g. with <code>string_to_utf8</code> or with one of the +  charsets supported by <code>Charset.encoder</code>.</p> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p>The variant of this function using a buffer object does not release +  the interpreter lock.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>read()</code>, <code>write_oob()</code>, <code>send_fd()</code></p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Method</span> + <span class='homogen--name'><b>write_oob</b></span> + </dt> + <dd><p><code><code class='datatype'>int</code> <b><span class='method'>write_oob</span>(</b><code class='datatype'>string</code> <code class='argument'>data</code><b>)</b></code><br> + <code><code class='datatype'>int</code> <b><span class='method'>write_oob</span>(</b><code class='datatype'>string</code> <code class='argument'>format</code>, <code class='datatype'>mixed</code> ... <code class='argument'>extras</code><b>)</b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Write out-of-band data to a stream.</p> + <p> Writes out-of-band data to a stream and returns how many bytes +  that were actually written. It can be less than the size of the +  given data if some data was written successfully and then +  something went wrong.</p> + <p> -1 is returned if something went wrong and no bytes were written. +  If only some data was written due to an error and that error +  persists, then a later call to <code>write_oob()</code> fails and returns +  -1.</p> + <p> If everything went fine, a call to <code>errno()</code> directly afterwards +  returns zero.</p> + <p> If more than one argument is given, <code>sprintf()</code> is used to format +  them.</p> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p>It is not guaranteed that all out-of-band data sent from the +  other end is received. Most streams only allow for a single byte +  of out-of-band data at a time. Some streams sends the rest of +  the data as ordinary data.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>read_oob()</code>, <code>write()</code></p> + </dd></dl> + </dd></dl><dl><dt><h2 class='header'>Class <b class='ms datatype'>_Stdio.Fd_ref</b></h2> + </dt><dd><dl class='group--doc'> + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Proxy class that contains stub functions +  that call the corresponding functions in +  <code>Fd</code>.</p> + <p> Used by <code>Stdio.File</code>.</p> + </dd> + <dt class='head--doc'>Note</dt> + <dd class='body--doc'><p>This is not the class you want. Use <code>Stdio.File</code> and friends instead.</p> + </dd> + <dt class='head--doc'>See also</dt> + <dd class='body--doc'><p><code>Stdio.File</code>, <code>Stdio.FILE</code>, <code>_Stdio.Fd</code></p> + </dd></dl> +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Variable</span> + <span class='homogen--name'><b>_fd</b></span> + </dt> + <dd><p><code><code class='object unresolved'>Fd</code> _Stdio.Fd_ref.<b><span class='variable'>_fd</span></b></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Object to which called functions are relayed.</p> + </dd></dl> +  +  + <hr /> + <dl class='group--doc'> + <dt class='head--type'><span class='homogen--type'>Inherit</span> + <span class='homogen--name'><b>Fd</b></span> + </dt> + <dd><p><code><span class='datatype'>inherit Fd</span> : <span class='inherit'>Fd</span></code></p></dd> +  + <dt class='head--doc'>Description</dt> + <dd class='body--doc'><p>Fake inherit to propagate the documentation +  from <code>_Stdio.Fd</code>.</p> + </dd></dl>   </dd></dl><dl><dt><h2 class='header'>Class <b class='ms datatype'>_Stdio.UDP</b></h2>   </dt><dd>      <hr />   <dl class='group--doc'>   <dt class='head--type'><span class='homogen--type'>Constant</span>   <span class='homogen--name'><b>MSG_OOB</b></span>   </dt>   <dd><p><code><code class='datatype'>constant</code> _Stdio.UDP.<code class='constant'>MSG_OOB</code></code></p></dd>