Branch: Tag:

2020-06-10

2020-06-10 21:48:37 by Henrik Grubbström (Grubba) <grubba@grubba.org>

Stdio.Fd: Convert read() into a PIKEFUN.

13:   <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'>
596:   <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>
1004:   <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>
1101:   <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>
1173:   <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>
1321:      <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>
1579:   <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>
1599:   <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>
1646:   <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>
1714:   <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>
2267:      <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>
2811:   <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>
2881:   <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>
2898:   <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>
2916:   <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>
4647:   <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>
4895:   </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>
4912:   <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>
4948:   <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>
5015:   <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>
5031:      <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>
5050:   <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
5073:   <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>
5116:      <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>
5166:   <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
5281:   <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>
5305:   <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
5331:   <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>
5350:   <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>
5389:   <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>
5450:   <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>
5489:   <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>
5497:      <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>
5570:      <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>
5599:   <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>
5614:   <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>
5640:   <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>
5652:   <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>
5685:      <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>
5739:   <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
5784:   <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>
6246:    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'>
6289:   <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>
6315:   <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>
6336:      <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>
6396:   <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>
6419:   <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>
6436:      <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>
6449:      <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>
6482:   <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>
6524:   </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 />
6731:   <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>
67329:   <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
68479:    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>
68647:   <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>