Pike 9.0 compatibility.
The symbols in this namespace will appear in programs that use #pike 9.0 or lower.
inherit 9.1:: :
Pike has a builtin C-style preprocessor. It works similar to the ANSI-C preprocessor but has a few extra features. These and the default set of preprocessor macros are described here.
The preprocessor is usually accessed via
MasterObject->compile_file()
or MasterObject->compile_string()
,
but may be accessed directly by calling cpp()
.
compile()
, cpp()
, CompilerEnvironment.CPP
This is the default namespace and contains lots of global symbols.
typedef
__attribute__("utf8_string", string(8bit)
) utf8_string
String containing UTF-8 encoded data.
This is similar to a string(8bit)
, but allows the compiler
to keep track of whether strings are UTF-8 or not.
string_to_utf8()
, utf8_to_string()
typedef
int(0)
zero
Zero datatype.
constant
UNDEFINED
The undefined value; ie a zero for which zero_type()
returns 1.
constant
__null_program
Program used internally by the compiler to create objects that are later modified into instances of the compiled program by the compiler.
__placeholder_object
constant
__placeholder_object
Object used internally by the compiler.
__null_program
constant
sprintf_args
Type constant used for typing extra arguments that are
sent to sprintf()
.
strict_sprintf_format
, sprintf_format
, sprintf()
constant
sprintf_format
Type constant used for typing arguments that are optionally
sent to sprintf()
depending on the presence of extra arguments.
strict_sprintf_format
, sprintf_args
, sprintf()
constant
sprintf_result
Type constant used for typing the return value from sprintf()
.
strict_sprintf_format
, sprintf_format
, sprintf()
constant
strict_sprintf_format
Type constant used for typing arguments that are always
sent to sprintf()
regardless of the presence of extra arguments.
sprintf_format
, sprintf_args
, sprintf()
constant
this
Builtin read only variable that evaluates to the current object.
this_program
, this_object()
constant
this_function
Builtin constant that evaluates to the current function.
continue::this_function
, this
, this_object()
constant
this_program
Builtin constant that evaluates to the current program.
this
, this_object()
program
ProxyFactory(program
p
)
Create a class that acts as a proxy for the specified program.
p
Program to generate a proxy for.
The generated class will have the same symbols (public and
private) with the same types as in p
, where accesses to
these will proxy the access to the same symbol in the proxied
(aka wrapped) object. With the following exceptions:
protected void create(object(p) obj)
Initialize the object to act as a proxy for obj
.
_sprintf(int c, mapping|void params)
Special case for c
== 'O'
, where
it will return sprintf("%O(%O)", this_program, obj)
,
and otherwise proxy the call.
void _destruct()
/void destroy()
These lfuns will not be present as the act of them being proxied would likely confuse the proxied object.
The same proxy class will be returned if this function is called with the same program multiple times.
void
_Static_assert(int
constant_expression
, string
constant_message
)
Perform a compile-time assertion check.
If constant_expression
is false, a compiler error message
containing constant_message
will be generated.
Note that the function call compiles to the null statement, and thus does not affect the run-time.
cpp::static_assert
array
__automap__(function
(:void
) fun
, mixed
... args
)
Automap execution function.
fun
Function to call for each of the mapped arguments.
args
Arguments for fun
. Either
| Wrapper for an array to loop over. All of the arrays will be looped over in parallel. |
| All other arguments will be held constant during
the automap, and sent as is to |
This function is used by the compiler to implement the automap syntax, and should in normal circumstances never be used directly.
It may however show up during module dumping and in backtraces.
It is an error not to have any Builtin.automap_marker
s
in args
.
Builtin.automap_marker
, map()
mixed
__cast(mixed
val
, string
|type
type_name
)
Cast val
to the type indicated by type_name
.
lfun::cast()
program
__empty_program(int
|void
line
, string
|void
file
)
line
Optional line number of file
where the program to be compiled
definition starts.
file
Optional file name where the program to be compiled is defined.
Returns a virgin (ie empty) program suitable as the target
argument to PikeCompiler()
.
__null_program
, PikeCompiler
, compile_string()
type
__handle_sprintf_format(string
attr
, string
|zero
fmt
, type
arg_type
, type
|zero
cont_type
, mapping
state
)
Type attribute handler for "sprintf_format"
.
attr
Attribute to handle, either "sprintf_format"
or "strict_sprintf_format"
.
fmt
Sprintf-style formatting string to generate type information from.
arg_type
Declared type of the fmt
argument (typically string
).
cont_type
Continuation function type after the fmt
argument. This is
scanned for the type attribute "sprintf_args"
to
determine where the remaining arguments to sprintf()
will
come from.
state
State mapping.
This function is typically called from
PikeCompiler()->apply_attribute_constant()
and is used to perform
stricter compile-time argument checking of sprintf()
-style functions.
It currently implements two operating modes depending on the value of
attr
:
| The formatting string |
| The formatting string |
Returns cont_type
with "sprintf_args"
replaced by the
arguments required by the fmt
formatting string, and
"sprintf_result"
replaced by the resulting string type.
PikeCompiler()->apply_attribute_constant()
, sprintf()
string(8bit)
__parse_pike_type(string(8bit)
t
)
void
_gdb_breakpoint()
This function only exists so that it is possible to set a gdb breakpoint on the function pike_gdb_breakpoint.
float
abs(float
f
)
int
abs(int
f
)
object
abs(object
f
)
Return the absolute value for f
. If f
is
an object it must implement lfun::`<
and
unary lfun::`-
.
float
acos(int
|float
f
)
Return the arcus cosine value for f
.
The result will be in radians.
cos()
, asin()
float
acosh(int
|float
f
)
Return the hyperbolic arcus cosine value for f
.
cosh()
, asinh()
void
add_constant(string
name
, mixed
value
)
void
add_constant(string
name
)
Add a new predefined constant.
This function is often used to add builtin functions.
All programs compiled after the add_constant()
function has been
called can access value
by the name name
.
If there is a constant called name
already, it will be replaced by
by the new definition. This will not affect already compiled programs.
Calling add_constant()
without a value will remove that name from
the list of constants. As with replacing, this will not affect already
compiled programs.
all_constants()
void
add_include_path(string
tmp
)
Add a directory to search for include files.
This is the same as the command line option -I.
Note that the added directory will only be searched when using < > to quote the included file.
remove_include_path()
void
add_module_path(string
path
, string
|void
subpath
)
Add a directory to search for modules.
This is the same as the command line option -M.
remove_module_path()
path
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).
subpath
if path is a ZIP archive, this argument will determine the path within the archive to be searched.
void
add_program_path(string
tmp
)
Add a directory to search for programs.
This is the same as the command line option -P.
remove_program_path()
array
aggregate(mixed
... elements
)
Construct an array with the arguments as indices.
This function could be written in Pike as:
array aggregate(mixed ... elems) { return elems; }
Arrays are dynamically allocated there is no need to declare them
like int a[10]=allocate(10);
(and it isn't possible either) like
in C, just array(int) a=allocate(10);
will do.
sizeof()
, arrayp()
, allocate()
mapping
aggregate_mapping(mixed
... elems
)
Construct a mapping.
Groups the arguments together two and two in key-index pairs and
creates a mapping of those pairs. Generally, the mapping literal
syntax is handier: ([ key1:val1, key2:val2, ... ])
sizeof()
, mappingp()
, mkmapping()
multiset
aggregate_multiset(mixed
... elems
)
Construct a multiset with the arguments as indices. The multiset
will not contain any values. This method is most useful when
constructing multisets with map
or similar; generally, the
multiset literal syntax is handier: (<elem1, elem2, ...>)
With it, it's also possible to construct a multiset with values:
(<index1: value1, index2: value2, ...>)
sizeof()
, multisetp()
, mkmultiset()
mapping
(string
:mixed
) all_constants()
Returns a mapping containing all global constants, indexed on the name of the constant, and with the value of the constant as value.
add_constant()
array
allocate(int
size
)
array
allocate(int
size
, mixed
init
)
Allocate an array of size
elements. If init
is specified
then each element is initialized by copying that value
recursively.
sizeof()
, aggregate()
, arrayp()
array
array_sscanf(string
data
, string
format
)
This function works just like sscanf()
, but returns the matched
results in an array instead of assigning them to lvalues. This is often
useful for user-defined sscanf strings.
sscanf()
, `/()
float
asin(int
|float
f
)
Return the arcus sine value for f
.
The result will be in radians.
sin()
, acos()
float
asinh(int
|float
f
)
Return the hyperbolic arcus sine value for f
.
sinh()
, acosh()
float
atan(int
|float
f
)
Returns the arcus tangent value for f
.
The result will be in radians.
tan()
, asin()
, acos()
, atan2()
float
atan2(float
f1
, float
f2
)
Returns the arcus tangent value for f1
/f2
, and uses
the signs of f1
and f2
to determine the quadrant.
The result will be in radians.
tan()
, asin()
, acos()
, atan()
float
atanh(int
|float
f
)
Returns the hyperbolic arcus tangent value for f
.
tanh()
, asinh()
, acosh()
mixed
atomic_get_set(mapping
|object
map
, mixed
key
, mixed
val
)
mixed
atomic_get_set(array
arr
, int
index
, mixed
val
)
Replace atomically the value for a key in a mapping or array.
map
arr
Mapping or array to alter.
key
index
Key or index to change the value for.
val
Value to change to. If value is UNDEFINED
and map
is a mapping
this function function behaves exactly as m_delete(map, key)
.
Returns the previous value for key
. If map
is a mapping and
there was no previous value UNDEFINED
is returned.
If map
is an object lfun::_m_replace()
will be called
in it.
m_delete()
mixed
await(Concurrent.Future
future
)
Stop execution of the current restartable function for now. Resume when the future completes.
Evaluates to the result of the future if it succeeds.
Throws an error if the future failed.
Calling this special form is similar to the expression:
(future->on_await(continue::this_function), yield())
Use of this from a non-restartable functions causes
a compilation warning and falls back to calling
future->get()
. This will thus then perform
a wait blocking the current thread.
No checks that the future
has actually completed are
performed. It is assumed that nothing else will call
the restartable function during the wait.
Concurrent.Future()->get()
, yield()
,
continue::this_function
, Restartable functions
string
basetype(mixed
x
)
Same as sprintf("%t",x);
sprintf()
float
ceil(int
|float
f
)
Return the closest integer value greater or equal to f
.
ceil()
does not return an int
, merely an integer value
stored in a float
.
floor()
, round()
object
clone_to(object
placeholder
, program
p
, mixed
... p_args
)
Coerce a placeholder object into a clone of a program.
placeholder
Clone of __null_program
to alter.
p
Program to coerce the object to be a clone of.
p_args
Arguments to pass to lfun::create()
in p
.
Returns placeholder
after successful coercion.
placeholder
may also already be a clone of [p], in which
case this operation is a no-op.
__null_program
array
column(array
data
, mixed
index
)
Extract a column from a two-dimensional array.
This function is exactly equivalent to:
map(data, lambda(mixed x,mixed y) { return x[y]; }, index)
Except of course it is a lot shorter and faster. That is, it indices every index in the array data on the value of the argument index and returns an array with the results.
rows()
program
compile(string
source
, CompilationHandler
|void
handler
, int
|void
major
, int
|void
minor
, program
|void
target
, object
|void
placeholder
)
Compile a string to a program.
This function takes a piece of Pike code as a string and compiles it into a clonable program.
The optional argument handler
is used to specify an alternative
error handler. If it is not specified the current master object will
be used.
The optional arguments major
and minor
are used to tell the
compiler to attempt to be compatible with Pike major
.minor
.
Note that source
must contain the complete source for a program.
It is not possible to compile a single expression or statement.
Also note that compile()
does not preprocess the program.
To preprocess the program you can use compile_string()
or
call the preprocessor manually by calling cpp()
.
compile_string()
, compile_file()
, cpp()
, master()
,
CompilationHandler
, DefaultCompilerEnvironment
program
compile_file(string
filename
, CompilationHandler
|void
handler
, void
|program
p
, void
|object
o
)
Compile the Pike code contained in the file filename
into a program.
This function will compile the file filename
to a Pike program that can
later be instantiated. It is the same as doing
.compile_string
(Stdio.read_file
(filename
), filename
)
compile()
, compile_string()
, cpp()
program
compile_string(string
source
, string
|void
filename
, CompilationHandler
|void
handler
, void
|program
p
, void
|object
o
, int
|void
show_if_constant_errors
)
Compile the Pike code in the string source
into a program.
If filename
is not specified, it will default to "-"
.
Functionally equal to
.compile
(cpp
(source
, filename
))
compile()
, cpp()
, compile_file()
mixed
copy_value(mixed
value
)
Copy a value recursively.
If the result value is changed destructively (only possible for multisets, arrays and mappings) the copied value will not be changed.
The resulting value will always be equal to the copied (as tested with
the function equal()
), but they may not the the same value (as tested
with `==()
).
equal()
float
cos(int
|float
f
)
Return the cosine value for f
.
f
should be specified in radians.
acos()
, sin()
, tan()
float
cosh(int
|float
f
)
Return the hyperbolic cosine value for f
.
acosh()
, sinh()
, tanh()
string
cpp(string
data
, mapping
|string
|void
current_file
, int
|string
|void
charset
, object
|void
handler
, void
|int
compat_major
, void
|int
compat_minor
, void
|int
picky_cpp
)
Run a string through the preprocessor.
Preprocesses the string data
with Pike's builtin ANSI-C look-alike
preprocessor. If the current_file
argument has not been specified,
it will default to "-"
. charset
defaults to "ISO-10646"
.
If the second 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 recognized:
| Name of the current file. It is used for generating #line directives and for locating include files. |
| Charset to use when processing |
| Compilation handler. |
| Sets the major pike version used for compat handling. |
| Sets the minor pike version used for compat handling. |
| Generate more warnings. |
| This option keeps |
| If a prefix is given, only prefixed directives will be
processed. For example, if the prefix is |
| Mapping of predefined macros in addition to those
returned by |
compile()
string
ctime(int
timestamp
)
Convert the output from a previous call to time()
into a readable
string containing the current year, month, day and time.
Like localtime
, this function might throw an error if the
ctime(2) call failed on the system. It's platform dependent what
time ranges that function can handle, e.g. Windows doesn't handle
a negative timestamp
.
strftime()
, time()
, localtime()
, gmtime()
, mktime()
mixed
decode_value(string(8bit)
coded_value
, void
|Codec
|int(-1)
codec
)
Decode a value from the string coded_value
.
coded_value
Value to decode.
codec
Codec
to use when encoding objects and programs.
trace
String.Buffer
to contain a readable dump of the value.
debug
Debug level. Only available when the runtime has been compiled --with-rtl-debug.
This function takes a string created with encode_value()
or
encode_value_canonic()
and converts it back to the value that was
coded.
If codec
is specified, it's used as the codec for the decode.
If none is specified, then one is instantiated through
master()->Decoder()
. As a compatibility fallback, the
master itself is used if it has no Decoder
class.
If codec
is the special value -1
, then decoding of
types, functions, programs and objects is disabled.
Decoding a coded_value
that you have not generated yourself
is a security risk that can lead to execution of arbitrary
code, unless codec
is specified as -1
.
encode_value()
, encode_value_canonic()
void
delay(int
|float
s
)
This function makes the thread stop for s
seconds.
Only signal handlers can interrupt the sleep. Other callbacks are not called during delay. Beware that this function uses busy-waiting to achieve the highest possible accuracy.
signal()
, sleep()
string
describe_backtrace(mixed
trace
, void
|int
linewidth
)
Return a readable message that describes where the backtrace
trace
was made (by backtrace
).
It may also be an error object or array (typically caught by a
catch
), in which case the error message also is included in the
description.
Pass linewidth
-1 to disable wrapping of the output.
backtrace()
, describe_error()
, catch()
, throw()
string
describe_error(mixed
err
)
Return the error message from an error object or array (typically
caught by a catch
). The type of the error is checked, hence
err
is declared as mixed
and not object|array
.
If an error message couldn't be obtained, a fallback message
describing the failure is returned. No errors due to incorrectness
in err
are thrown.
describe_backtrace()
, get_backtrace
bool
destruct(void
|object
o
)
Mark an object as destructed.
Calls o->_destruct()
, and then clears all variables in the
object. If no argument is given, the current object is destructed.
All pointers and function pointers to this object will become zero. The destructed object will be freed from memory as soon as possible.
Returns 1
if o
has an lfun::_destruct()
that
returned 1
and inhibited destruction.
string(8bit)
encode_value(mixed
value
, Codec
|void
codec
)
string(8bit)
encode_value(mixed
value
, Codec
|void
codec
, String.Buffer
trace
)
string(8bit)
encode_value(mixed
value
, Codec
|void
codec
, int(0..)
debug
)
Code a value into a string.
value
Value to encode.
codec
Codec
to use when encoding objects and programs.
trace
String.Buffer
to contain a readable dump of the value.
debug
Debug level. Only available when the runtime has been compiled --with-rtl-debug.
This function takes a value, and converts it to a string. This string
can then be saved, sent to another Pike process, packed or used in
any way you like. When you want your value back you simply send this
string to decode_value()
and it will return the value you encoded.
Almost any value can be coded, mappings, floats, arrays, circular structures etc.
If codec
is specified, it's used as the codec for the encode.
If none is specified, then one is instantiated through
master()->Encoder()
. As a compatibility fallback, the
master itself is used if it has no Encoder
class.
If
returns UNDEFINED for an
object, codec
->nameof(o)val = o->encode_object(o)
will be called. The
returned value will be passed to o->decode_object(o, val)
when the object is decoded.
When only simple types like int, floats, strings, mappings, multisets and arrays are encoded, the produced string is very portable between pike versions. It can at least be read by any later version.
The portability when objects, programs and functions are involved depends mostly on the codec. If the byte code is encoded, i.e. when Pike programs are actually dumped in full, then the string can probably only be read by the same pike version.
decode_value()
, sprintf()
, encode_value_canonic()
string(8bit)
encode_value_canonic(mixed
value
, object
|void
codec
)
string(8bit)
encode_value_canonic(mixed
value
, object
|void
codec
, String.buffer
trace
)
string(8bit)
encode_value_canonic(mixed
value
, object
|void
codec
, int(0..)
debug
)
Code a value into a string on canonical form.
value
Value to encode.
codec
Codec
to use when encoding objects and programs.
trace
String.Buffer
to contain a readable dump of the value.
debug
Debug level. Only available when the runtime has been compiled --with-rtl-debug.
Takes a value and converts it to a string on canonical form, much like
encode_value()
. The canonical form means that if an identical value is
encoded, it will produce exactly the same string again, even if it's
done at a later time and/or in another Pike process. The produced
string is compatible with decode_value()
.
Note that this function is more restrictive than encode_value()
with
respect to the types of values it can encode. It will throw an error
if it can't encode to a canonical form.
encode_value()
, decode_value()
array
(int
) enumerate(int
n
)
array
enumerate(int
n
, void
|mixed
step
, void
|mixed
start
, void
|function
(:void
) operator
)
Create an array with an enumeration, useful for initializing arrays
or as first argument to map()
or foreach()
.
The defaults are: step
= 1, start
= 0, operator
= `+
The resulting array is calculated like this:
array enumerate(int n, mixed step, mixed start, function operator)
{
array res = allocate(n);
for (int i=0; i < n; i++)
{
res[i] = start;
start = operator(start, step);
}
return res;
}
map()
, foreach()
int
equal(mixed
a
, mixed
b
)
This function checks if the values a
and b
are equivalent.
If either of the values is an object the (normalized) result
of calling lfun::_equal()
will be returned.
Returns 1
if both values are false (zero, destructed objects,
prototype functions, etc).
Returns 0
(zero) if the values have different types.
Otherwise depending on the type of the values:
| Returns the same as |
| The contents of Note that for objects this case is only reached if neither
|
| Returns |
copy_value()
, `==()
void
error(sprintf_format
f
, sprintf_args
... args
)
Throws an error. A more readable version of the code
throw( ({ sprintf(f, @args), backtrace() }) )
.
float
exp(float
|int
f
)
Return the natural exponential of f
.
log( exp( x ) ) == x
as long as exp(x) doesn't overflow an int.
pow()
, log()
mixed
filter(mixed
arr
, void
|mixed
fun
, mixed
... extra
)
Filters the elements in arr
through fun
.
arr
arr
is treated as a set of elements to be filtered, as
follows:
| Each element is filtered with |
| The values are filtered with |
| The program is treated as a mapping containing the identifiers that are indexable from it and their values. |
| If there is a |
fun
Unless something else is mentioned above, fun
is used as
filter like this:
| When both |
|
|
| The object is used as a |
|
|
| Each element that is callable is called with |
| Each element is indexed with the given string. If the result
of that is zero then the element is filtered out, otherwise
the result is called with This is typically used when |
The function is never destructive on arr
.
map()
, foreach()
float
floor(int
|float
f
)
Return the closest integer value less or equal to f
.
floor()
does not return an int
, merely an integer value
stored in a float
.
ceil()
, round()
CompilationHandler
get_active_compilation_handler()
Returns the currently active compilation compatibility handler, or 0 (zero) if none is active.
This function should only be used during a call of compile()
.
get_active_error_handler()
, compile()
,
master()->get_compilation_handler()
, CompilationHandler
CompilerEnvironment.PikeCompiler
|zero
get_active_compiler()
Returns the most recent of the currently active pike compilers,
or UNDEFINED
if none is active.
This function should only be used during a call of compile()
.
get_active_error_handler()
, compile()
,
master()->get_compilation_handler()
, CompilationHandler
CompilationHandler
get_active_error_handler()
Returns the currently active compilation error handler
(second argument to compile()
), or 0 (zero) if none
is active.
This function should only be used during a call of compile()
.
get_active_compilation_handler()
, compile()
, CompilationHandler
array
(array
(int
|string
|array
(string
))) get_all_groups()
Returns an array of arrays with all groups in the system groups source.
Each element in the returned array has the same structure as in
getgrent
function.
The groups source is system dependant. Refer to your system manuals for information about how to set the source.
Array | |
| Array with info about the group |
getgrent()
array
(array
(int
|string
)) get_all_users()
Returns an array with all users in the system.
An array with arrays of userinfo as in getpwent
.
getpwent()
getpwnam()
getpwuid()
array
get_backtrace(object
|array
err
)
Return the backtrace array from an error object or array
(typically caught by a catch
), or zero if there is none. Errors
are thrown on if there are problems retrieving the backtrace.
describe_backtrace()
, describe_error()
array
(int
) get_groups_for_user(int
|string
user
)
Gets all groups which a given user is a member of.
user
UID or loginname of the user
Array | |
| Information about all the users groups |
get_all_groups()
getgrgid()
getgrnam()
getpwuid()
getpwnam()
Iterator
get_iterator(function
(:void
)|object
|array
|mapping
|multiset
|string
data
, mixed
... args
)
Creates and returns a canonical iterator for data
.
data
can have any of the following types:
| If If The iterator object is then checked whether it has
|
| If |
| If |
| If |
| If |
| If |
This function is used by foreach
to get an iterator for an
object.
Iterator
, lfun::_get_iterator
mapping
(string
:string
) getenv(void
|int
force_update
)
Queries the environment variables.
force_update
A cached copy of the real environment is kept to make this
function quicker. If the optional flag force_update
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 putenv
, typically from a C-level library.
Returns the whole environment as a mapping. Destructive operations on the mapping will not affect the internal environment representation.
Variable names and values cannot be wide strings nor contain
'\0'
characters. Variable names also cannot contain
'='
characters.
On NT the environment variable name is case insensitive.
putenv()
string
getenv(string
varname
, void
|int
force_update
)
Query the value of a specific environment variable.
varname
Environment variable to query.
force_update
A cached copy of the real environment is kept to make this
function quicker. If the optional flag force_update
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 putenv
, typically from a C-level library.
Returns the value of the environment variable varname
if it exists, and 0
(zero) otherwise.
Variable names and values cannot be wide strings nor contain
'\0'
characters. Variable names also cannot contain
'='
characters.
On NT the environment variable name is case insensitive.
putenv()
array
(int
|string
|array
(string
)) getgrgid(int
gid
)
Get the group entry for the group with the id gid
using the systemfunction
getgrid(3).
gid
The id of the group
An array with the information about the group
Array | |
| Group name |
| Group password (encrypted) |
| ID of the group |
| Array with UIDs of group members |
getgrent()
getgrnam()
array
(int
|string
|array
(string
)) getgrnam(string
str
)
Get the group entry for the group with the name str
using the
systemfunction getgrnam(3).
str
The name of the group
An array with the information about the group
Array | |
| Group name |
| Group password (encrypted) |
| ID of the group |
| Array with UIDs of group members |
getgrent()
getgrgid()
int
gethrdtime(void
|int
nsec
)
Return the high resolution real time spent with threads disabled
since the Pike interpreter was started. The time is normally
returned in microseconds, but if the optional argument nsec
is nonzero it's returned in nanoseconds.
The actual accuracy on many systems is significantly less than
microseconds or nanoseconds. See System.REAL_TIME_RESOLUTION
.
_disable_threads()
, gethrtime()
int
gethrtime(void
|int
nsec
)
Return the high resolution real time since some arbitrary event in
the past. The time is normally returned in microseconds, but if
the optional argument nsec
is nonzero it's returned in
nanoseconds.
It's system dependent whether or not this time is monotonic, i.e.
if it's unaffected by adjustments of the calendaric clock in the
system. System.REAL_TIME_IS_MONOTONIC
tells what it is. Pike
tries to use monotonic time for this function if it's available.
The actual accuracy on many systems is significantly less than
microseconds or nanoseconds. See System.REAL_TIME_RESOLUTION
.
System.REAL_TIME_IS_MONOTONIC
, System.REAL_TIME_RESOLUTION
,
time()
, System.gettimeofday()
, gethrvtime()
,
Pike.implicit_gc_real_time
int
gethrvtime(void
|int
nsec
)
Return the CPU time that has been consumed by this process or
thread. -1 is returned if the system couldn't determine it. The
time is normally returned in microseconds, but if the optional
argument nsec
is nonzero it's returned in nanoseconds.
The CPU time includes both user and system time, i.e. it's
approximately the same thing you would get by adding together the
"utime" and "stime" fields returned by System.getrusage
(but
perhaps with better accuracy).
It's however system dependent whether or not it's the time
consumed in all threads or in the current one only;
System.CPU_TIME_IS_THREAD_LOCAL
tells which. If both types are
available then thread local time is preferred.
The actual accuracy on many systems is significantly less than
microseconds or nanoseconds. See System.CPU_TIME_RESOLUTION
.
The garbage collector might run automatically at any time. The
time it takes is not included in the figure returned by this
function, so that normal measurements aren't randomly clobbered
by it. Explicit calls to gc
are still included, though.
The special function gauge
is implemented with this function.
System.CPU_TIME_IS_THREAD_LOCAL
, System.CPU_TIME_RESOLUTION
,
gauge()
, System.getrusage()
, gethrtime()
int
getpid()
Returns the process ID of this process.
System.getppid()
, System.getpgrp()
array
(int
|string
) getpwnam(string
str
)
Get the user entry for login str
using the systemfunction getpwnam(3).
str
The login name of the user whos userrecord is requested.
An array with the information about the user
Array | |
| Users username (loginname) |
| User password (encrypted) |
| Users ID |
| Users primary group ID |
| Users real name an possibly some other info |
| Users home directory |
| Users shell |
getpwuid()
getpwent()
array
(int
|string
) getpwuid(int
uid
)
Get the user entry for UID uid
using the systemfunction getpwuid(3).
uid
The uid of the user whos userrecord is requested.
An array with the information about the user
Array | |
| Users username (loginname) |
| User password (encrypted) |
| Users ID |
| Users primary group ID |
| Users real name an possibly some other info |
| Users home directory |
| Users shell |
getpwnam()
getpwent()
string
getxattr(string
file
, string
attr
, void
|bool
symlink
)
Return the value of a specified attribute, or 0 if it does not exist.
bool
glob(string
glob
, string
str
)
zero
|string
glob(array
(string
) glob
, string
str
)
array
(string
) glob(string
glob
, array
(string
) str
)
array
(string
) glob(array
(string
) glob
, array
(string
) str
)
Match strings against a glob pattern.
glob
| The glob pattern. Some characters have special meanings. When a character range is not started the following characters have special meanings:
If a character range is started the following characters have special meanings:
All other characters only match themselves. | |||||||||||||||||
| An array of glob patterns (as above). The function returns the matching glob if any of the given
patterns match. Otherwise |
str
|
|
| All strings in the array |
In Pike 8.0 and earlier only '?'
and '*'
had
special meanings. The old implementation is available as 8.0::glob()
.
In Pike 8.0 and earlier 1
was also returned when matching
an array of globs against a single string.
8.0::glob()
, sscanf()
, Regexp
mapping
(string
:int
) gmtime(int
timestamp
)
Convert seconds since 00:00:00 UTC, Jan 1, 1970 into components.
This function works like localtime()
but the result is
not adjusted for the local time zone.
Timestamps prior to 1970-01-01T00:00:00 (ie negative timestamps) were not supported on NT and AIX prior to Pike 9.0.
localtime()
, time()
, ctime()
, mktime()
,
strptime()
int
has_index(string
haystack
, int
index
)
int
has_index(array
haystack
, int
index
)
int
has_index(mapping
|multiset
|object
|program
haystack
, mixed
index
)
Search for index
in haystack
.
Returns 1
if index
is in the index domain of haystack
,
or 0
(zero) if not found.
This function is equivalent to (but sometimes faster than):
search(indices(haystack), index) != -1
A negative index in strings and arrays as recognized by the
index operators `[]()
and `[]=()
is not considered
a proper index by has_index()
has_value()
, has_prefix()
, has_suffix()
, indices()
,
search()
, values()
, zero_type()
int
has_prefix(string
|object
s
, string
prefix
)
Returns 1
if the string s
starts with prefix
,
returns 0
(zero) otherwise.
When s
is an object, it needs to implement
lfun::_sizeof()
and lfun::`[]
.
has_suffix()
, has_value()
, search()
int
has_suffix(string
s
, string
suffix
)
Returns 1
if the string s
ends with suffix
,
returns 0
(zero) otherwise.
has_prefix()
, has_value()
, search()
int
has_value(string
haystack
, string
value
)
int
has_value(string
haystack
, int
value
)
int
has_value(array
|mapping
|object
|program
haystack
, mixed
value
)
Search for value
in haystack
.
Returns 1
if value
is in the value domain of haystack
,
or 0
(zero) if not found.
This function is in all cases except when both arguments are strings equivalent to (but sometimes faster than):
search(values(haystack), value) != -1
If both arguments are strings, has_value()
is equivalent to:
search(haystack, value) != -1
has_index()
, indices()
, search()
, has_prefix()
,
has_suffix()
, values()
, zero_type()
int
hash(string
s
)
int
hash(string
s
, int
max
)
Return an integer derived from the string s
. The same string
always hashes to the same value, also between processes,
architectures, and Pike versions (see compatibility notes below,
though).
If max
is given, the result will be >= 0 and < max
,
otherwise the result will be >= 0 and <= 0x7fffffff.
The hash algorithm was changed in Pike 8.1. If you want a hash
that is compatible with Pike 8.0 and earlier, use hash_8_0()
.
The hash algorithm was also changed in Pike 7.5. If you want a hash
that is compatible with Pike 7.4 and earlier, use hash_7_4()
.
The difference with regards to hash_8_0()
only affects wide strings.
The hash algorithm was also changed in Pike 7.1. If you want a hash
that is compatible with Pike 7.0 and earlier, use hash_7_0()
.
This hash function differs from the one provided by hash_value()
,
in that hash_value()
returns a process specific value.
hash_7_0()
, hash_7_4()
, hash_8_0()
, hash_value
int
hash_7_0(string
s
)
int
hash_7_0(string
s
, int
max
)
Return an integer derived from the string s
. The same string
always hashes to the same value, also between processes.
If max
is given, the result will be >= 0 and < max
,
otherwise the result will be >= 0 and <= 0x7fffffff.
This function is provided for backward compatibility with code written for Pike up and including version 7.0.
This function is not NUL-safe, and is byte-order dependant.
hash()
, hash_7_4
int
hash_7_4(string
s
)
int
hash_7_4(string
s
, int
max
)
Return an integer derived from the string s
. The same string
always hashes to the same value, also between processes.
If max
is given, the result will be >= 0 and < max
,
otherwise the result will be >= 0 and <= 0x7fffffff.
This function is provided for backward compatibility with code written for Pike up and including version 7.4.
This function is byte-order dependant for wide strings.
hash_7_6()
, hash_7_0
int
hash_8_0(string
s
)
int
hash_8_0(string
s
, int
max
)
Return an integer derived from the string s
. The same string
always hashes to the same value, also between processes,
architectures, and Pike versions (see compatibility notes below,
though).
If max
is given, the result will be >= 0 and < max
,
otherwise the result will be >= 0 and <= 0x7fffffff.
Use hash_value()
for in-process hashing (eg, for implementing
lfun::_hash()
) or one of the cryptographic hash functions.
This function is really bad at hashing strings. Similar string often return similar hash values.
It is especially bad for url:s, paths and similarly formatted strings.
The hash algorithm was changed in Pike 7.5. If you want a hash
that is compatible with Pike 7.4 and earlier, use hash_7_4()
.
The difference only affects wide strings.
The hash algorithm was also changed in Pike 7.1. If you want a hash
that is compatible with Pike 7.0 and earlier, use hash_7_0()
.
This hash function differs from the one provided by hash_value()
,
in that hash_value()
returns a process specific value.
hash()
, hash_7_0()
, hash_7_4()
, hash_value
int
hash_value(mixed
value
)
Return a hash value for the argument. It's an integer in the native integer range.
The hash will be the same for the same value in the running process only (the memory address is typically used as the basis for the hash value).
If the value is an object with an lfun::__hash
, that function
is called and its result returned.
This is the hashing method used by mappings.
lfun::__hash()
int
is_absolute_path(string
p
)
Check if a path p
is fully qualified (ie not relative).
Returns 1 if the path is absolute, 0 otherwise.
mixed
iterator_index(Iterator
iter
)
Get the current index for iter
.
iterator_value()
, lfun::_iterator_index()
,
get_iterator()
mixed
iterator_next(Iterator
iter
)
Advance iter
one step.
iterator_prev()
, lfun::_iterator_next()
,
get_iterator()
mixed
iterator_prev(Iterator
iter
)
Advance iter
one step backward (if supported).
iterator_next()
, lfun::_iterator_prev()
,
get_iterator()
mixed
iterator_value(Iterator
iter
)
Get the current value for iter
.
iterator_index()
, lfun::_iterator_value()
,
get_iterator()
bool
kill(int
pid
, int
signal
)
Send a signal to another process.
Some signals and their supposed purpose:
| Hang-up, sent to process when user logs out. |
| Interrupt, normally sent by ctrl-c. |
| Quit, sent by ctrl-\. |
| Illegal instruction. |
| Trap, mostly used by debuggers. |
| Aborts process, can be caught, used by Pike whenever something goes seriously wrong. |
| Emulation trap. |
| Floating point error (such as division by zero). |
| Really kill a process, cannot be caught. |
| Bus error. |
| Segmentation fault, caused by accessing memory where you shouldn't. Should never happen to Pike. |
| Bad system call. Should never happen to Pike. |
| Broken pipe. |
| Signal used for timer interrupts. |
| Termination signal. |
| Signal reserved for whatever you want to use it for. Note that some OSs reserve this signal for the thread library. |
| Signal reserved for whatever you want to use it for. Note that some OSs reserve this signal for the thread library. |
| Child process died. This signal is reserved for internal use by the Pike run-time. |
| Power failure or restart. |
| Window change signal. |
| Urgent socket data. |
| Pollable event. |
| Stop (suspend) process. |
| Stop (suspend) process. Sent by ctrl-z. |
| Continue suspended. |
| TTY input for background process. |
| TTY output for background process. |
| Virtual timer expired. |
| Profiling trap. |
| Out of CPU. |
| File size limit exceeded. |
| Stack fault |
| Success. |
| Failure. |
Note that you have to use signame to translate the name of a signal to its number.
Note that the kill function is not available on platforms that do not support signals. Some platforms may also have signals not listed here.
signal()
, signum()
, signame()
, fork()
int
|float
|object
limit(int
|float
|object
minval
, int
|float
|object
x
, int
|float
|object
maxval
)
Limits the value x
so that it's between minval
and maxval
.
If x
is an object, it must implement the lfun::`<
method.
max()
and min()
array
(string
) listxattr(string
file
, void
|bool
symlink
)
Return an array of all extended attributes set on the file
program
load_module(string
module_name
)
Load a binary module.
This function loads a module written in C or some other language into Pike. The module is initialized and any programs or constants defined will immediately be available.
When a module is loaded the C function pike_module_init() will be called to initialize it. When Pike exits pike_module_exit() will be called. These two functions must be available in the module.
The current working directory is normally not searched for
dynamic modules. Please use "./name.so"
instead of just
"name.so"
to load modules from the current directory.
mapping
(string
:int
) localtime(int
timestamp
)
Convert seconds since 00:00:00 UTC, 1 Jan 1970 into components.
This function returns a mapping with the following components:
| Seconds over the minute. |
| Minutes over the hour. |
| Hour of the day. |
| Day of the month. |
| Month of the year. |
| Year since 1900. |
| Day of week (0 = Sunday). |
| Day of the year. |
| Is daylight-saving time active. |
| Offset from UTC, including daylight-saving time adjustment. |
An error is thrown if the localtime(2) call failed on the system.
It's platform dependent what time ranges that function can handle,
e.g. Windows doesn't handle a negative timestamp
.
Prior to Pike 7.5 the field "timezone"
was sometimes not
present, and was sometimes not adjusted for daylight-saving time.
Timestamps prior to 1970-01-01T00:00:00 (ie negative timestamps) were not supported on NT and AIX prior to Pike 9.0. Note also that dst-handling may be incorrect for such timestamps.
Calendar
, gmtime()
, time()
, ctime()
, mktime()
,
strptime()
float
log(int
|float
f
)
Return the natural logarithm of f
.
exp( log(x) ) == x
for x > 0.
pow()
, exp()
string
lower_case(string
s
)
int
lower_case(int
c
)
Convert a string or character to lower case.
Returns a copy of the string s
with all upper case characters
converted to lower case, or the character c
converted to lower
case.
Assumes the string or character to be coded according to
ISO-10646 (aka Unicode). If they are not, Charset.decoder
can
do the initial conversion for you.
Prior to Pike 7.5 this function only accepted strings.
upper_case()
, Charset.decoder
void
m_add(multiset
|object
l
, mixed
val
)
Add a member to a multiset.
m_delete()
void
m_clear(mapping
|multiset
|object
map
)
Clear the contents of a mapping or multiset.
This function clears the content of the mapping
or multiset map
so that it becomes empty.
This is an atomic operation.
If map
is an object lfun::_m_clear()
will be called
in it.
m_delete()
mixed
m_delete(object
|mapping
|multiset
map
, mixed
index
)
If map
is an object that implements lfun::_m_delete()
,
that function will be called with index
as its single argument.
Otherwise if map
is a mapping or multiset the entry with
index index
will be removed from map
destructively.
If the mapping or multiset does not have an entry with
index index
, nothing is done.
The value that was removed will be returned,
and UNDEFINED
otherwise.
Note that m_delete()
changes map
destructively.
mappingp()
mixed
map(mixed
arr
, void
|mixed
fun
, mixed
... extra
)
Applies fun
to the elements in arr
and collects the results.
arr
arr
is treated as a set of elements, as follows:
|
|
|
|
| The program is treated as a mapping containing the identifiers that are indexable from it and their values. |
| If there is a |
fun
fun
is applied in different ways depending on its type:
|
|
|
|
| Each element of the |
|
|
| Each element that is callable is called with |
| Each element is indexed with the given string. If the result
of that is zero then a zero is collected, otherwise it's
called with This is typically used when |
The function is never destructive on arr
.
filter()
, enumerate()
, foreach()
object
master()
Return the current master object.
May return UNDEFINED
if no master has been loaded yet.
replace_master()
int
|float
|object
max(int
|float
|object
, int
|float
|object
... args
)
string
max(string
, string
... args
)
int(0)
max()
Returns the largest value among args
. Compared objects
must implement the lfun::`<
method.
min()
and limit()
int
|float
|object
min(int
|float
|object
, int
|float
|object
... args
)
string
min(string
, string
... args
)
int(0)
min()
Returns the smallest value among args
. Compared objects
must implement the lfun::`<
method.
max()
and limit()
mapping
mkmapping(array
ind
, array
val
)
Make a mapping from two arrays.
Makes a mapping ind[x]
:val[x]
, 0 <= x < sizeof(ind).
ind
and val
must have the same size.
This is the inverse operation of indices()
and values()
.
indices()
, values()
multiset
mkmultiset(array
a
)
This function creates a multiset from an array.
aggregate_multiset()
int
mktime(mapping
(string
:int
) tm
)
int
mktime(int
sec
, int
min
, int
hour
, int
mday
, int
mon
, int
year
, int
|void
isdst
, int
|void
tz
)
This function converts information about date and time into an integer which contains the number of seconds since 00:00:00 UTC, Jan 1, 1970.
You can either call this function with a mapping containing the following elements:
| Seconds over the minute. |
| Minutes over the hour. |
| Hour of the day. |
| Day of the month. |
| Month of the year. |
| Year since 1900. |
| Is daylight-saving time active. If omitted or set to |
| The timezone offset from UTC in seconds. If omitted, the time will be calculated in the local timezone. |
Or you can just send them all on one line as the second syntax suggests.
For proper UTC calculations ensure that isdst = 0
and
timezone = 0
; omitting either one of these parameters
will mess up the UTC calculation.
On some operating systems (notably AIX and Win32), dates before 00:00:00 UTC, Jan 1, 1970 were not supported prior to Pike 9.0.
On most 32-bit systems, the supported range of dates is from Dec 13, 1901 20:45:52 UTC through to Jan 19, 2038 03:14:07 UTC (inclusive).
On most 64-bit systems, the supported range of dates is expressed in 56 bits and is thus practically unlimited (at least up to 1141 milion years in the past and into the future).
time()
, ctime()
, localtime()
, gmtime()
, strftime()
string
normalize_path(string
path
)
Replaces "\" with "/" if runing on MS Windows. It is
adviced to use System.normalize_path
instead.
bool
object_variablep(object
o
, string
var
)
Find out if an object identifier is a variable.
This function returns 1
if var
exists as a
non-protected variable in o
, and returns 0
(zero)
otherwise.
indices()
, values()
int
objectp(mixed
arg
)
Returns 1
if arg
is an object, 0
(zero) otherwise.
mappingp()
, programp()
, arrayp()
, stringp()
, functionp()
,
multisetp()
, floatp()
, intp()
int
|float
pow(float
|int
n
, float
|int
x
)
mixed
pow(object
n
, float
|int
|object
x
)
Return n
raised to the power of x
. If both n
and x
are integers the result will be an integer.
If n
is an object its pow method will be called with
x
as argument.
exp()
, log()
void
putenv(string
varname
, void
|string
value
)
Sets the environment variable varname
to value
.
If value
is omitted or zero, the environment variable
varname
is removed.
varname
and value
cannot be wide strings nor contain
'\0'
characters. varname
also cannot contain
'='
characters.
On NT the environment variable name is case insensitive.
getenv()
array
random(mapping
m
)
float
random(float
max
)
int
random(int
max
)
mixed
random(object
o
)
mixed
random(array
|multiset
x
)
Get a random value generated by the default RandomSystem
.
RandomSystem()->random()
, random_string()
void
random_seed(int
seed
)
This function sets the initial value for the random generator.
random()
Random.Deterministic
string
random_string(int
len
)
Get a string of random characters 0..255
with the length len
from the default RandomSystem
.
RandomSystem()->random_string()
, random()
void
remove_include_path(string
tmp
)
Remove a directory to search for include files.
This function performs the reverse operation of add_include_path()
.
add_include_path()
void
remove_module_path(string
tmp
)
Remove a directory to search for modules.
This function performs the reverse operation of add_module_path()
.
add_module_path()
void
remove_program_path(string
tmp
)
Remove a directory to search for programs.
This function performs the reverse operation of add_program_path()
.
add_program_path()
void
removexattr(string
file
, string
attr
, void
|bool
symlink
)
Remove the specified extended attribute.
string
replace(string
s
, string
from
, string
to
)
string
replace(string
s
, array
(string
) from
, array
(string
) to
)
string
replace(string
s
, array
(string
) from
, string
to
)
string
replace(string
s
, mapping
(string
:string
) replacements
)
array
replace(array
a
, mixed
from
, mixed
to
)
mapping
replace(mapping
a
, mixed
from
, mixed
to
)
Generic replace function.
This function can do several kinds replacement operations, the different syntaxes do different things as follows:
If all the arguments are strings, a copy of s
with every
occurrence of from
replaced with to
will be returned.
Special case: to
will be inserted between every character in
s
if from
is the empty string.
If the first argument is a string, and the others array(string), a string
with every occurrance of from
[i] in s
replaced with
to
[i] will be returned. Instead of the arrays from
and to
a mapping equivalent to
can be
used.mkmapping
(from
, to
)
If the first argument is an array or mapping, the values of a
which
are `==()
with from
will be replaced with to
destructively.
a
will then be returned.
Note that replace()
on arrays and mappings is a destructive operation.
void
replace_master(object
o
)
Replace the master object with o
.
This will let you control many aspects of how Pike works, but beware that master.pike may be required to fill certain functions, so it is usually a good idea to have your master inherit the original master and only re-define certain functions.
FIXME: Tell how to inherit the master.
master()
string
reverse(string
s
, int
|void
start
, int
|void
end
)
array
reverse(array
a
, int
|void
start
, int
|void
end
)
int
reverse(int
i
, int
|void
start
, int
|void
end
)
mixed
reverse(object
o
, mixed
... options
)
Reverses a string, array or int.
s
String to reverse.
a
Array to reverse.
i
Integer to reverse.
o
Object to reverse.
start
Optional start index of the range to reverse.
Default: 0
(zero).
end
Optional end index of the range to reverse.
Default for strings: sizeof(s)-1
.
Default for arrays: sizeof(a)-1
.
Default for integers: Pike.get_runtime_info()->int_size - 1
.
options
Optional arguments that are to be passed to lfun::_reverse()
.
This function reverses a string, char by char, an array, value
by value or an int, bit by bit and returns the result. It's not
destructive on the input value. For objects it simply calls
lfun::_reverse()
in the object, and returns the result.
Reversing strings can be particularly useful for parsing difficult syntaxes which require scanning backwards.
sscanf()
float
round(int
|float
f
)
Return the closest integer value to f
.
round()
does not return an int
, merely an integer value
stored in a float
.
floor()
, ceil()
array
rows(mixed
data
, array
index
)
Select a set of rows from an array.
This function is en optimized equivalent to:
map(index, lambda(mixed x) { return data[x]; })
That is, it indices data on every index in the array index and returns an array with the results.
column()
int
search(string
haystack
, string
|int
needle
, int
|void
start
, int
|void
end
)
int
search(array
haystack
, mixed
needle
, int
|void
start
, int
|void
end
)
mixed
search(mapping
haystack
, mixed
needle
, mixed
|void
start
)
mixed
search(object
haystack
, mixed
needle
, mixed
|void
start
, mixed
... extra_args
)
Search for needle
in haystack
.
haystack
Item to search in. This can be one of:
| When |
| When |
| When |
| When If |
start
If the optional argument start
is present search is started at
this position. This has no effect on mappings.
end
If the optional argument end
is present, the search will terminate
at this position (exclusive) if not found earlier.
Returns the position of needle
in haystack
if found.
If not found the returned value depends on the type of haystack
:
|
|
|
|
| The value returned by |
If start
is supplied to an iterator object without an
lfun::_search()
, haystack
will need to implement
Iterator()->set_index()
.
For mappings and object UNDEFINED
will be returned when not found.
In all other cases -1
will be returned when not found.
indices()
, values()
, zero_type()
, has_value()
,
has_prefix()
, has_suffix()
int
set_priority(string
level
, int(0..)
|void
pid
)
array
|mapping
|multiset
set_weak_flag(array
|mapping
|multiset
m
, int
state
)
Set the value m
to use weak or normal references in its
indices and/or values (whatever is applicable). state
is a
bitfield built by using |
between the following flags:
| Use weak references for indices. Only applicable for multisets and mappings. |
| Use weak references for values. Only applicable for arrays and mappings. |
| Shorthand for |
If a flag is absent, the corresponding field will use normal
references. state
can also be 1
as a compatibility
measure; it's treated like Pike.WEAK
.
m
will be returned.
void
setxattr(string
file
, string
attr
, string
value
, int
flags
, void
|bool
symlink
)
Set the attribute attr
to the value value
.
The flags parameter can be used to refine the semantics of the operation.
Stdio.XATTR_CREATE
specifies a pure create, which
fails if the named attribute exists already.
Stdio.XATTR_REPLACE
specifies a pure replace operation, which
fails if the named attribute does not already exist.
By default (no flags), the extended attribute will be created if need be, or will simply replace the value if the attribute exists.
1 if successful, 0 otherwise, setting errno.
int
sgn(mixed
value
)
int
sgn(mixed
value
, mixed
zero
)
Check the sign of a value.
Returns -1
if value
is less than zero
,
1
if value
is greater than zero
and 0
(zero) otherwise.
abs()
function
(int
|void
:void
) signal(int
sig
, function
(int
|void
:void
) callback
)
function
(int
|void
:void
) signal(int
sig
)
Trap signals.
This function allows you to trap a signal and have a function called when the process receives a signal. Although it IS possible to trap SIGBUS, SIGSEGV etc, I advise you not to; Pike should not receive any such signals, and if it does, it is because of bugs in the Pike interpreter. And all bugs should be reported, no matter how trifle.
The callback will receive the signal number as its only argument.
See the documentation for kill()
for a list of signals.
If no second argument is given, the signal handler for that signal is restored to the default handler.
If the second argument is zero, the signal will be completely ignored.
Returns the previous signal function, or 0 if none had been registered.
kill()
, signame()
, signum()
string
signame(int
sig
)
Returns a string describing the signal sig
.
kill()
, signum()
, signal()
int
signum(string
sig
)
Get a signal number given a descriptive string.
This function is the inverse of signame()
.
signame()
, kill()
, signal()
float
sin(int
|float
f
)
Returns the sine value for f
.
f
should be specified in radians.
asin()
, cos()
, tan()
float
sinh(int
|float
f
)
Returns the hyperbolic sine value for f
.
asinh()
, cosh()
, tanh()
int(0..)
sizeof(string
arg
)
int(0..)
sizeof(array
arg
)
int(0..)
sizeof(mapping
arg
)
int(0..)
sizeof(multiset
arg
)
int(0..)
sizeof(object
arg
)
Size query.
The result will be as follows:
arg
can have any of the following types:
| The number of characters in |
| The number of elements in |
| The number of key-value pairs in |
| If |
lfun::_sizeof()
void
sleep(int
|float
s
, void
|int
abort_on_signal
)
This function makes the thread stop for s
seconds.
Only signal handlers can interrupt the sleep, and only when
abort_on_signal
is set. If more than one thread is running
the signal must be sent to the sleeping thread. Other callbacks
are not called during sleep.
If s
is zero then this thread will yield to other threads but
not sleep otherwise. Note that Pike yields internally at regular
intervals so it's normally not necessary to do this.
signal()
, delay()
array
sort(array
(mixed
) index
, array
(mixed
) ... data
)
Sort arrays destructively.
This function sorts the array index
destructively. That means
that the array itself is changed and returned, no copy is created.
If extra arguments are given, they are supposed to be arrays of the
same size as index
. Each of these arrays will be modified in the
same way as index
. I.e. if index 3 is moved to position 0 in index
index 3 will be moved to position 0 in all the other arrays as well.
The sort order is as follows:
Integers and floats are sorted in ascending order.
Strings are sorted primarily on the first characters that are different, and secondarily with shorter strings before longer. Different characters are sorted in ascending order on the character value. Thus the sort order is not locale dependent.
Arrays are sorted recursively on the first element. Empty arrays are sorted before nonempty ones.
Multisets are sorted recursively on the first index. Empty multisets are sorted before nonempty ones.
Objects are sorted in ascending order according to `<()
,
`>()
and `==()
.
Other types aren't reordered.
Different types are sorted in this order: Arrays, mappings,
multisets, objects, functions, programs, strings, types,
integers and floats. Note however that objects can control
their ordering wrt other types with `<
, `>
and `==
,
so this ordering of types only applies to objects without
those functions.
The first argument is returned.
The sort is stable, i.e. elements that are compare-wise equal aren't reordered.
Array.sort_array
, reverse()
string
sprintf(strict_sprintf_format
format
, sprintf_args
... args
)
Print formated output to string.
The format
string is a string containing a description of how to
output the data in args
. This string should generally speaking
have one %<modifiers><operator> format specifier
(examples: %s, %0d, %-=20s) for each of the arguments.
The following modifiers are supported:
| Zero pad numbers (implies right justification). | ||||||||
| Toggle truncation. | ||||||||
| Pad positive integers with a space. | ||||||||
| Pad positive integers with a plus sign. | ||||||||
| Left adjust within field size (default is right). | ||||||||
| Centered within field size. | ||||||||
| Column mode if strings are greater than field width. Breaks
between words (possibly skipping or adding spaces). Can not be
used together with | ||||||||
| Column mode with rough line break (break at exactly field width
instead of between words). Can not be used together with | ||||||||
| Table mode, print a list of | ||||||||
| Inverse table mode (left-to-right order). | ||||||||
| (Where n is a number or *) field width specifier. | ||||||||
| |||||||||
| Precision specifier. | ||||||||
| Column width specifier. | ||||||||
| If n is a * then next argument is used for precision/field
size. The argument may either be an integer, or a modifier mapping
as received by
| ||||||||
| Set a pad string. ' cannot be a part of the pad string (yet). | ||||||||
| Get pad string from argument list. | ||||||||
| Use same argument again. | ||||||||
| Repeat this on every line produced. | ||||||||
| Repeat this format for each element in the argument array. | ||||||||
| Put the string at the bottom end of column instead of top. | ||||||||
| Set width to the length of data. | ||||||||
| Select argument number n. Use * to use the next
argument as selector. The arguments are numbered starting from
|
The following operators are supported:
| Percent. |
| Signed binary integer. |
| Signed decimal integer. |
| Unsigned decimal integer. |
| Signed octal integer. |
| Lowercase signed hexadecimal integer or 8-bit string. |
| Uppercase signed hexadecimal integer or 8-bit string. |
| Character (integer). If a fieldsize has been specified this will output the low-order bytes of the integer in network (big endian) byte order. To get little endian byte order, negate the field size. |
| Float. (Locale dependent formatting.) |
| Heuristically chosen representation of float. (Locale dependent formatting.) |
| Like %g, but uses uppercase E for exponent. |
| Exponential notation float. (Locale dependent output.) |
| Like %e, but uses uppercase E for exponent. |
| Binary IEEE representation of float (%4F gives single precision, %8F gives double precision) in network (big endian) byte order. To get little endian byte order, negate the field size. |
| String. |
| Quoted string. Escapes all control and non-8-bit characters, as well as the quote characters '\\' and '\"'. |
| Any value, debug style. Do not rely on the exact formatting;
how the result looks can vary depending on locale, phase of
the moon or anything else the |
| Hexadecimal representation of the memory address of the object. Integers and floats have no address, and are printed as themselves. |
| Binary Hollerith string.
Equivalent to |
| No argument. Same as |
| Type of the argument. |
| Perform the enclosed format for every element of the argument array. |
|
Most modifiers and operators are combinable in any fashion, but some combinations may render strange results.
If an argument is an object that implements lfun::_sprintf()
, that
callback will be called with the operator as the first argument, and
the current modifiers as the second. The callback is expected to return
a string.
sprintf-style formatting is applied by many formatting functions, such
write()
and werror()
. It is also possible to get sprintf-style
compile-time argument checking by using the type-attributes
sprintf_format
or strict_sprintf_format
in combination
with sprintf_args
.
Most formats are available in all versions of Pike; the exceptions are:
Format | Version | Availability constant | Notes |
'*' | Pike 7.8.238 | String.__HAVE_SPRINTF_STAR_MAPPING__ | Support for specifying modifiers via a mapping. |
'b' | Pike 0.7.62 | ||
'c' | Pike 0.7.3 | Support for wide characters. | |
'c' | Pike 0.7.64 | Support for little endian output. | |
'E' | Pike 0.6.38 | ||
'F' | Pike 0.6.38 | ||
'F' | Pike 7.8.242 | String.__HAVE_SPRINTF_NEGATIVE_F__ | Support for litte endian byte order. |
'G' | Pike 0.6.38 | ||
'H' | Pike 7.7.31 | ||
'p' | Pike 7.5.4 | Implemented but disabled (#if 0 -block). | |
'p' | Pike 8.1.14 | Enabled. | |
'q' | Pike 7.7.28 | ||
'x' | Pike 8.1.5 | Support for hex-formatting strings. | |
'X' | Pike 8.1.5 | Support for hex-formatting strings. | |
'[n]' | Pike 7.1.5 |
Pike v7.8 release 263 running Hilfe v3.5 (Incremental Pike Frontend) > sprintf("The unicode character %c has character code %04X.", 'A', 'A'); (1) Result: "The unicode character A has character code 0041." > sprintf("#%@02X is the HTML code for purple.", Image.Color.purple->rgb()); (2) Result: "#A020F0 is the HTML code for purple." > int n=4711; > sprintf("%d = hexadecimal %x = octal %o = %b binary", n, n, n, n); (3) Result: "4711 = hexadecimal 1267 = octal 11147 = 1001001100111 binary" > write(#"Formatting examples: Left adjusted [%-10d] Centered [%|10d] Right adjusted [%10d] Zero padded [%010d] ", n, n, n, n);
Formatting examples: Left adjusted [4711 ] Centered [ 4711 ] Right adjusted [ 4711] Zero padded [0000004711]
(5) Result: 142 int screen_width=70; > write("%-=*s\n", screen_width, >> "This will wordwrap the specified string within the "+ >> "specified field size, this is useful say, if you let "+ >> "users specify their screen size, then the room "+ >> "descriptions will automagically word-wrap as appropriate.\n"+ >> "slosh-n's will of course force a new-line when needed.\n");
This will wordwrap the specified string within the specified field size, this is useful say, if you let users specify their screen size, then the room descriptions will automagically word-wrap as appropriate. slosh-n's will of course force a new-line when needed.
(6) Result: 355 > write("%-=*s %-=*s\n", screen_width/2, >> "Two columns next to each other (any number of columns will "+ >> "of course work) independantly word-wrapped, can be useful.", >> screen_width/2-1, >> "The - is to specify justification, this is in addherence "+ >> "to std sprintf which defaults to right-justification, "+ >> "this version also supports centre and right justification.");
Two columns next to each other (any The - is to specify justification, number of columns will of course this is in addherence to std work) independantly word-wrapped, sprintf which defaults to can be useful. right-justification, this version also supports centre and right justification.
(7) Result: 426 > write("%-$*s\n", screen_width, >> "Given a\nlist of\nslosh-n\nseparated\n'words',\nthis option\n"+ >> "creates a\ntable out\nof them\nthe number of\ncolumns\n"+ >> "be forced\nby specifying a\npresision.\nThe most obvious\n"+ >> "use is for\nformatted\nls output.");
Given a list of slosh-n separated 'words', this option creates a table out of them the number of columns be forced by specifying a presision. The most obvious use is for formatted ls output.
(8) Result: 312 > write("%-#*s\n", screen_width, >> "Given a\nlist of\nslosh-n\nseparated\n'words',\nthis option\n"+ >> "creates a\ntable out\nof them\nthe number of\ncolumns\n"+ >> "be forced\nby specifying a\npresision.\nThe most obvious\n"+ >> "use is for\nformatted\nls output.");
Given a creates a by specifying a list of table out presision. slosh-n of them The most obvious separated the number of use is for 'words', columns formatted this option be forced ls output.
(9) Result: 312 > sample = ([ "align":"left", "valign":"middle" ]); (10) Result: ([ /* 2 elements */ "align":"left", "valign":"middle" ]) > write("<td%{ %s='%s'%}>\n", (array)sample);
<td valign='middle' align='left'>
(11) Result: 34 > write("Of course all the simple printf options "+ >> "are supported:\n %s: %d %x %o %c\n", >> "65 as decimal, hex, octal and a char", >> 65, 65, 65, 65);
Of course all the simple printf options are supported: 65 as decimal, hex, octal and a char: 65 41 101 A
(12) Result: 106 > write("%[0]d, %[0]x, %[0]X, %[0]o, %[0]c\n", 75);
75, 4b, 4B, 113, K
(13) Result: 19 > write("#%|*s\n#%|*s\n", screen_width, "THE END", >> ([ "width":screen_width ]), "ALTERNATIVE END");
# THE END # ALTERNATIVE END
(14) Result: 144
lfun::_sprintf()
, strict_sprintf_format
, sprintf_format
,
sprintf_args
, String.__HAVE_SPRINTF_STAR_MAPPING__
,
String.__HAVE_SPRINTF_NEGATIVE_F__
.
float
sqrt(float
f
)
int(0..)
sqrt(int(0..)
i
)
mixed
sqrt(object
o
)
Returns the square root of f
, or in the integer case, the square root
truncated to the closest lower integer. If the argument is an object,
the lfun _sqrt in the object will be called.
pow()
, log()
, exp()
, floor()
, lfun::_sqrt
int
sscanf(string
data
, string
format
, mixed
... lvalues
)
The purpose of sscanf is to match a string data
against a format
string and place the matching results into a list of variables. The list
of lvalues
are destructively modified (which is only possible because
sscanf really is a special form, rather than a pike function) with the values
extracted from the data
according to the format
specification. Only
the variables up to the last matching directive of the format string are
touched.
The format
string may contain strings separated by special matching
directives like %d, %s %c and %f. Every such
directive corresponds to one of the lvalues
, in the order they are listed.
An lvalue is the name of a variable, a name of a local variable, an index
into an array, mapping or object. It is because of these lvalues that sscanf
can not be implemented as a normal function.
Whenever a percent character is found in the format string, a match is performed, according to which operator and modifiers follow it:
| Reads a binary integer ( |
| Reads a decimal integer ( |
| Reads an octal integer ( |
| Reads a hexadecimal integer ( |
| Reads an integer that is either octal (leading zero),
hexadecimal (leading |
| Reads one character and returns it as an integer
( |
| Returns the current character offset in |
| Reads a float ("0101" makes 101.0). |
| Reads a float encoded according to the IEEE single precision
binary format ( |
| Reads a string. If followed by %d, %s will only read non-numerical characters. If followed by a %[], %s will only read characters not present in the set. If followed by normal text, %s will match all characters up to but not including the first occurrence of that text. |
| Reads a Hollerith-encoded string, i.e. first reads the length
of the string and then that number of characters. The size and
byte order of the length descriptor can be modified in the
same way as %c. As an example |
| Matches a string containing a given set of characters (those given
inside the brackets). Ranges of characters can be defined by using
a minus character between the first and the last character to be
included in the range. Example: |
| Repeatedly matches 'format' as many times as possible and assigns an array of arrays with the results to the lvalue. |
| Match a Pike constant, such as string or integer (currently only integer, string and character constants are functional). |
| Match a single percent character (hence this is how you quote the % character to just match, and not start an lvalue matcher directive). |
Similar to sprintf
, you may supply modifiers between the % character
and the operator, to slightly change its behaviour from the default:
| The operator will only match its argument, without assigning any variable. |
| You may define a field width by supplying a numeric modifier.
This means that the format should match that number of
characters in the input data; be it a number characters
long string, integer or otherwise ( |
| Supplying a minus sign toggles the decoding to read the data encoded in little-endian byte order, rather than the default network (big-endian) byte order. |
| Interpret the data as a signed entity. In other words,
|
| Ignore the matched characters with respect to any following
|
Sscanf does not use backtracking. Sscanf simply looks at the format string up to the next % and tries to match that with the string. It then proceeds to look at the next part. If a part does not match, sscanf immediately returns how many % were matched. If this happens, the lvalues for % that were not matched will not be changed.
// a will be assigned "oo" and 1 will be returned sscanf("foo", "f%s", a); // a will be 4711 and b will be "bar", 2 will be returned sscanf("4711bar", "%d%s", a, b); // a will be 4711, 2 will be returned sscanf("bar4711foo", "%*s%d", a); // a will become "test", 2 will be returned sscanf(" \t test", "%*[ \t]%s", a); // Remove "the " from the beginning of a string // If 'str' does not begin with "the " it will not be changed sscanf(str, "the %s", str); // It is also possible to declare a variable directly in the sscanf call; // another reason for sscanf not to be an ordinary function: sscanf("abc def", "%s %s", string a, string b);
The number of directives matched in the format string. Note that a string directive (%s or %[]) counts as a match even when matching just the empty string (which either may do).
sprintf
, array_sscanf
string(1..255)
strftime(string(1..255)
format
, mapping
(string
:int
) tm
)
Convert the structure to a string.
The abbreviated weekday name according to the current locale
The full weekday name according to the current locale.
The abbreviated month name according to the current locale.
The full month name according to the current locale.
The preferred date and time representation for the current locale.
The century number (year/100) as a 2-digit integer.
The day of the month as a decimal number (range 01 to 31).
Equivalent to %m/%d/%y
. (for Americans only.
Americans should note that in other countries %d/%m/%y
is rather common. This means that in international context
this format is ambiguous and should not be used.)
Like %d
, the day of the month as a decimal number,
but a leading zero is replaced by a space.
Modifier: use alternative format, see below.
Equivalent to %Y-%m-%d (the ISO 8601 date format). (C99)
The ISO 8601 week-based year (see NOTES) with century as a
decimal number. The 4-digit year corresponding to the ISO
week number (see %V
). This has the same format and
value as %Y
, except that if the ISO week number
belongs to the previous or next year, that year is used instead.
Like %G
, but without century, that is,
with a 2-digit year (00-99). (TZ)
Equivalent to %b.
The hour as a decimal number using a 24-hour clock (range 00 to 23).
The hour as a decimal number using a 12-hour clock (range 01 to 12).
The day of the year as a decimal number (range 001 to 366).
The month as a decimal number (range 01 to 12).
The minute as a decimal number (range 00 to 59).
A newline character. (SU)
Modifier: use alternative format, see below. (SU)
Either "AM"
or "PM"
according to the given time
value, or the corresponding strings for the current locale.
Noon is treated as "PM"
and midnight as "AM"
.
Like %p
but in lowercase: "am"
or "pm"
or a corresponding string for the current locale.
The time in a.m. or p.m. notation. In the POSIX locale this is
equivalent to %I:%M:%S %p
.
The time in 24-hour notation (%H:%M
). (SU)
For a version including the seconds, see %T
below.
The number of seconds since the Epoch, 1970-01-01 00:00:00 +0000 (UTC). (TZ)
The second as a decimal number (range 00 to 60). (The range is up to 60 to allow for occasional leap seconds.)
A tab character. (SU)
The time in 24-hour notation (%H:%M:%S
). (SU)
The day of the week as a decimal, range 1 to 7, Monday being 1.
See also %w
. (SU)
The week number of the current year as a decimal number,
range 00 to 53, starting with the first Sunday as the first
day of week 01. See also %V
and %W
.
The ISO 8601 week number of the current year as a decimal number,
range 01 to 53, where week 1 is the first week that has at least
4 days in the new year. See also %U
and %W
.
The day of the week as a decimal, range 0 to 6, Sunday being 0.
See also %u
.
ctime()
, mktime()
, strptime()
, Gettext.setlocale
string(1..)
string_filter_non_unicode(string
s
)
Replace the most obviously non-unicode characters from s
with
the unicode replacement character.
This will replace characters outside the ranges
0x00000000-0x0000d7ff
and 0x0000e000-0x0010ffff
with 0xffea (the replacement character).
Charset.encoder()
, string_to_unicode()
,
unicode_to_string()
, utf8_to_string()
, string_to_utf8()
string(8bit)
string_to_unicode(string
s
, int(0..2)
|void
byteorder
)
Converts a string into an UTF16 compliant byte-stream.
s
String to convert to UTF16.
byteorder
Byte-order for the output. One of:
| Network (aka big-endian) byte-order (default). |
| Little-endian byte-order. |
| Native byte-order. |
Throws an error if characters not legal in an UTF16 stream are encountered. Valid characters are in the range 0x00000 - 0x10ffff, except for characters 0xfffe and 0xffff.
Characters in range 0x010000 - 0x10ffff are encoded using surrogates.
Charset.decoder()
, string_to_utf8()
, unicode_to_string()
,
utf8_to_string()
utf8_string
string_to_utf8(string
s
)
utf8_string
string_to_utf8(string
s
, int
extended
)
Convert a string into a UTF-8 compliant byte-stream.
s
String to encode into UTF-8.
extended
Bitmask with extension options.
| Accept and encode the characters outside the valid ranges using the same algorithm. Such encoded characters are however not UTF-8 compliant. |
| Encode characters outside the BMP with UTF-8 encoded UTF-16 (ie split them into surrogate pairs and encode). |
Throws an error if characters not valid in an UTF-8 stream are
encountered. Valid characters are in the ranges
0x00000000-0x0000d7ff
and 0x0000e000-0x0010ffff
.
Charset.encoder()
, string_to_unicode()
,
unicode_to_string()
, utf8_to_string()
int
stringp(mixed
arg
)
Returns 1
if arg
is a string, 0
(zero) otherwise.
intp()
, programp()
, arrayp()
, multisetp()
, objectp()
,
mappingp()
, floatp()
, functionp()
mapping
(string
:int
) strptime(string(1..255)
data
, string(1..255)
format
)
Parse the given data
using the format in format
as a date.
The % character.
The weekday name according to the C locale, in abbreviated form or the full name.
The month name according to the C locale, in abbreviated form or the full name.
The date and time representation for the C locale.
The century number (0-99).
The day of month (1-31).
Equivalent to %m/%d/%y.
The hour (0-23).
The hour on a 12-hour clock (1-12).
The day number in the year (1-366).
The month number (1-12).
The minute (0-59).
Arbitrary whitespace.
The C locale's equivalent of AM or PM.
Equivalent to %H:%M.
The second (0-60; 60 may occur for leap seconds; earlier also 61 was allowed).
Arbitrary whitespace.
Equivalent to %H:%M:%S.
The week number with Sunday the first day of the week (0-53).
The weekday number (0-6) with Sunday = 0.
The week number with Monday the first day of the week (0-53).
The date, using the C locale's date format.
The time, using the C locale's time format.
The year within century (0-99). When a century is not otherwise specified, values in the range 69-99 refer to years in the twentieth century (1969-1999); values in the range 00-68 refer to years in the twenty-first century (2000-2068).
The year, including century (for example, 1991).
localtime()
, gmtime()
, strftime()
float
tan(int
|float
f
)
Returns the tangent value for f
.
f
should be specified in radians.
atan()
, sin()
, cos()
float
tanh(int
|float
f
)
Returns the hyperbolic tangent value for f
.
atanh()
, sinh()
, cosh()
object
this_object(void
|int
level
)
Returns the object we are currently evaluating in.
level
level
may be used to access the object of a surrounding
class: The object at level 0 is the current object, the object
at level 1 is the one belonging to the class that surrounds
the class that the object comes from, and so on.
As opposed to a qualified this
reference such as
global::this
, this function doesn't always access the
objects belonging to the lexically surrounding classes. If the
class containing the call has been inherited then the objects
surrounding the inheriting class are accessed.
Thread.Local
thread_local()
Returns Thread.Local()
.
This is primarily intended as a convenience function and detection symbol for use by the master before the module system has been fully initiated.
Thread.Local
mixed
|void
throw(mixed
value
)
Throw value
to a waiting catch
.
If no catch
is waiting the global error handling will send the
value to master()->handle_error()
.
If you throw an array with where the first index contains an error
message and the second index is a backtrace, (the output from
backtrace()
) then it will be treated exactly like a real error
by overlying functions.
catch
int
time()
int
time(int(1)
one
)
float
time(int(2..)
t
)
This function returns the number of seconds since 00:00:00 UTC, 1 Jan 1970.
The second syntax does not query the system for the current
time, instead the last time value used by the pike process is returned
again. It avoids a system call, and thus is slightly faster,
but can be wildly inaccurate. Pike
queries the time internally when a thread has waited for
something, typically in sleep
or in a backend (see
Pike.Backend
).
The third syntax can be used to measure time more precisely than one
second. It returns how many seconds have passed since t
. The precision
of this function varies from system to system.
ctime()
, localtime()
, mktime()
, gmtime()
,
System.gettimeofday()
, gethrtime()
int
ualarm(int
useconds
)
Set an alarm clock for delivery of a signal.
alarm()
arranges for a SIGALRM signal to be delivered to the
process in useconds
microseconds.
If useconds
is 0
(zero), no new alarm will be scheduled.
Any previous alarms will in any case be canceled.
Returns the number of microseconds remaining until any previously scheduled alarm was due to be delivered, or zero if there was no previously scheduled alarm.
This function is only available on platforms that support signals.
alarm()
, signal()
, call_out()
string
unicode_to_string(string(8bit)
s
, int(0..2)
|void
byteorder
)
Converts an UTF16 byte-stream into a string.
s
String to convert to UTF16.
byteorder
Default input byte-order. One of:
| Network (aka big-endian) byte-order (default). |
| Little-endian byte-order. |
| Native byte-order. |
Note that this argument is disregarded if s
starts with a BOM.
Charset.decoder()
, string_to_unicode()
, string_to_utf8()
,
utf8_to_string()
string
upper_case(string
s
)
int
upper_case(int
c
)
Convert a string or character to upper case.
Returns a copy of the string s
with all lower case characters
converted to upper case, or the character c
converted to upper
case.
Assumes the string or character to be coded according to
ISO-10646 (aka Unicode). If they are not, Charset.decoder
can
do the initial conversion for you.
Prior to Pike 7.5 this function only accepted strings.
lower_case()
, Charset.decoder
string
utf8_to_string(utf8_string
s
)
string
utf8_to_string(utf8_string
s
, int
extended
)
Converts an UTF-8 byte-stream into a string.
s
String of UTF-8 encoded data to decode.
extended
Bitmask with extension options.
| Accept and decode the extension used by |
| Accept and decode UTF-8 encoded UTF-16 (ie accept and decode valid surrogates). |
Throws an error if the stream is not a legal UTF-8 byte-stream.
In conformance with RFC 3629 and Unicode 3.1 and later, non-shortest forms are not decoded. An error is thrown instead.
Charset.encoder()
, string_to_unicode()
, string_to_utf8()
,
unicode_to_string()
, validate_utf8()
bool
validate_utf8(utf8_string
s
)
bool
validate_utf8(utf8_string
s
, int
extended
)
Checks whether a string is a valid UTF-8 byte-stream.
s
String of UTF-8 encoded data to validate.
extended
Bitmask with extension options.
| Accept the extension used by |
| Accept UTF-8 encoded UTF-16 (ie accept valid surrogate-pairs). |
Returns 0
(zero) if the stream is not a legal
UTF-8 byte-stream, and 1
if it is.
In conformance with RFC 3629 and Unicode 3.1 and later, non-shortest forms are considered invalid.
Charset.encoder()
, string_to_unicode()
, string_to_utf8()
,
unicode_to_string()
, utf8_to_string()
int
werror(string
fmt
, mixed
... args
)
Writes a string on stderr. Works just like Stdio.File.write
on Stdio.stderr
.
int
write(string
fmt
, mixed
... args
)
Writes a string on stdout. Works just like Stdio.File.write
on Stdio.stdout
.
mixed
yield(mixed
|void
val
)
Stop execution of the current restartable function for now,
and return the value val
.
val
Value to be returned from the restartable function.
May be omitted in functions returning void
(including asynchronous functions). For asynchronous
functions this means that Concurrent.Promise()->success()
in the implicit Concurrent.Promise
will not be called.
Evaluates to the first argument passed to the restartable function on restart, or if it has already been called, the value passed at that time.
Calling this special form is similar to the statement:
continue return val;
This syntax is however an expression and can thus be used to pass a value back.
Use of this function is only valid in restartable functions.
The second argument to a restartable function may be
a function that throws a value. That value will appear
to have been thrown via yield()
.
await()
, Restartable functions
Boolean datatype.
constant
false
constant
true
An Encoder
and a Decoder
lumped into a single instance which
can be used for both encoding and decoding.
inherit Decoder : Decoder
inherit Encoder : Encoder
Objects used by the compiler to handle references to global symbols, modules, external files, etc.
There can be up to three compilation handlers active at the same time during a compilation. They are in order of precedence:
The error handler
This is the object passed to compile()
as
the second argument (if any). This object is returned by
get_active_error_handler()
during a compilation.
The compatibility handler
This is the object returned by
master()->get_compilation_handler()
(if any), which
the compiler calls when it sees #pike-directives,
or expressions using the version scope
(eg 7.4::rusage
). This object is returned by
get_active_compilation_handler()
during a compilation.
The master object.
This is returned by master()
at any time.
Any of the objects may implement a subset of the CompilationHandler
functions, and the first object that implements a function will be
used. The error handler object can thus be used to block certain
functionality (eg to restrict the number of available functions).
master()->get_compilation_handler()
, get_active_error_handler()
,
get_active_compilation_handler()
, compile()
void
compile_error(string
filename
, int
line
, string
msg
)
Called by compile()
and cpp()
when they encounter
errors in the code they compile.
filename
File where the error was detected.
line
Line where the error was detected.
msg
Description of error.
compile_warning()
.
void
compile_exception(mixed
exception
)
Called by compile()
and cpp()
if they trigger
exceptions.
void
compile_warning(string
filename
, int
line
, string
msg
)
Called by compile()
to report warnings.
filename
File which triggered the warning.
line
Line which triggered the warning.
msg
Warning message.
compile_error()
mapping
(string
:mixed
)|object
get_default_module()
Returns the default module from which global symbols will be fetched.
Returns the default module, or 0
(zero).
If 0
(zero) is returned the compiler use the mapping
returned by all_constants()
as fallback.
get_predefines()
mapping
(string
:mixed
) get_predefines()
Called by cpp()
to get the set of global symbols.
Returns a mapping from symbol name to symbol value. Returns zero on failure.
resolv()
, get_default_module()
mapping
(string
:mixed
)|object
|program
|zero
handle_import(string
path
, string
filename
, CompilationHandler
handler
)
Called by compile()
and cpp()
to handle import
directives specifying specific paths.
Returns the resolved value, or UNDEFINED
on failure.
resolv()
string
handle_include(string
header_file
, string
current_file
, bool
is_local_ref
)
Called by cpp()
to resolv #include
and #string
directives.
header_file
File that was requested for inclusion.
current_file
File where the directive was found.
is_local_ref
Specifies reference method.
| Directive was |
| Directive was |
Returns the filename to pass to read_include()
if found,
and 0
(zero) on failure.
read_include()
string
read_include(string
filename
)
Called by cpp()
to read included files.
filename
Filename as returned by handle_include()
.
Returns a string with the content of the header file on success,
and 0
(zero) on failure.
handle_include()
mixed
resolv(string
symbol
, string
filename
, CompilationHandler
handler
)
Called by compile()
and cpp()
to resolv
module references.
Returns the resolved value, or UNDEFINED
on failure.
get_predefines()
predef::CompilerEnvironment
that supports handlers.
The compiler environment.
By inheriting this class and overloading the functions, it is possible to make a custom Pike compiler.
Prior to Pike 7.8 this sort of customization has to be done
either via custom master objects, or via CompilationHandler
s.
CompilationHandler
, MasterObject
, master()
, replace_master()
inherit predef::CompilerEnvironment : OrigCompilerEnvironment
inherit Reporter : Reporter
Implements the Reporter
API.
Reporter()->report()
, Reporter()->SeverityLevel
program
compile(string
source
, CompilationHandler
|void
handler
, int
|void
major
, int
|void
minor
, program
|void
target
, object
|void
placeholder
)
Compile a string to a program.
This function takes a piece of Pike code as a string and compiles it into a clonable program.
The optional argument handler
is used to specify an alternative
error handler. If it is not specified the current master object will
be used.
The optional arguments major
and minor
are used to tell the
compiler to attempt to be compatible with Pike major
.minor
.
This function essentially performs
program compile(mixed ... args)
{
return PikeCompiler(@args)->compile();
}
Note that source
must contain the complete source for a program.
It is not possible to compile a single expression or statement.
Also note that compile()
does not preprocess the program.
To preprocess the program you can use compile_string()
or
call the preprocessor manually by calling cpp()
.
compile_string()
, compile_file()
, cpp()
, master()
,
CompilationHandler
int
compile_exception(mixed
err
)
string
|zero
format_exception(mixed
err
)
object
get_compilation_handler(int
major
, int
minor
)
Get compatibility handler for Pike major
.minor
.
The default implementation calls the corresponding function in the master object.
This function is typically called by
PikeCompiler()->get_compilation_handler()
.
MasterObject()->get_compilation_handler()
.
mapping
(string
:mixed
)|object
get_default_module()
Get the default module for the current compatibility level
(ie typically the value returned by predef::all_constants()
).
The default implementation calls the corresponding function in the master object.
| Constant table to use. |
| Use the builtin constant table. |
This function is typically called by
Pike_compiler()->get_default_module()
.
MasterObject()->get_default_module()
.
program
handle_import(string
module
, string
current_file
, object
|void
handler
)
Look up an import module
.
The default implementation calls the corresponding function in the master object.
MasterObject()->handle_import()
.
program
handle_inherit(string
inh
, string
current_file
, object
|void
handler
)
Look up an inherit inh
.
The default implementation calls the corresponding function in the master object.
MasterObject()->handle_inherit()
.
mixed
resolv(string
identifier
, string
filename
, object
|void
handler
, object
|void
compat_handler
)
Look up identifier
in the current context.
The default implementation calls the corresponding function in the handlers (if any), falling back to the master object.
Returns the value of the identifier
if found, and
UNDEFINED
if not.
The state for an instance of the preprocessor.
predef::cpp()
inherit ::this_program : this_program
CompilationHandler
CompilerEnvironment.CPP.handler
CompilationHandler
CompilerEnvironment.CPP.compat_handler
protected
mixed
apply_handler(string
fun
, mixed
... args
)
void
change_cpp_compatibility(int
major
, int
minor
)
Change the pike compatibility level for this preprocessor to the specified version of Pike.
major
Major version of Pike to attempt to be compatible with.
Specifying a major version of -1
is a short hand
for specifying __REAL_MAJOR__
and __REAL_MINOR__
.
minor
Minor version of Pike to attempt to be compatible with.
This function is called by the preprocessor to set the compatibility level.
The default implementation performs some normalization, and
then sets compat_major
and compat_minor
to their
respective values (which in turn affects symbols such as
__MAJOR__
and __MINOR__
).
void
clear_macros()
Clear the set of macros.
It is recomended to call this function when the CPP
object
is no longer to be used.
define_macro()
int
compile_exception(mixed
err
)
void
cpp_error(sprintf_format
msg
, sprintf_args
... arguments
)
Convenience function for reporting a cpp error at the current position.
This function calls report()
with the same arguments,
but prefixed with suitable defaults.
report()
CompilerEnvironment.CPP CompilerEnvironment.CPP(
string
|void
current_file
, int
|string
|void
charset
, object
|void
handler
, void
|int
compat_major
, void
|int
compat_minor
, void
|int
picky_cpp
)
CompilerEnvironment.CPP CompilerEnvironment.CPP(
mapping
(string
:mixed
) options
)
Initialize the preprocessor.
options
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:
| Name of the current file. It is used for generating #line directives and for locating include files. |
| Charset to use when processing |
| Compilation handler. |
| Sets the major pike version used for compat handling. |
| Sets the minor pike version used for compat handling. |
| Generate more warnings. |
| This option keeps |
| If a prefix is given, only prefixed directives will be
processed. For example, if the prefix is |
| Mapping of predefined macros in addition to those
returned by |
current_file
If the current_file
argument has not been specified,
it will default to "-"
.
charset
Turn on automatic character set detection if 1
, otherwise
specifies the character set used by the input.
Defaults to "ISO-10646"
.
compile()
CompilerEnvironment.CPP CompilerEnvironment.CPP(
string
|void
current_file
, int
|string
|void
charset
, CompilationHandler
|void
handler
, void
|int
compat_major
, void
|int
compat_minor
, void
|int
picky_cpp
)
CompilerEnvironment.CPP CompilerEnvironment.CPP(
mapping
(string
:mixed
) options
)
Initialize the preprocessor.
options
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:
| Name of the current file. It is used for generating #line directives and for locating include files. |
| Charset to use when processing |
| Compilation handler. |
| Sets the major pike version used for compat handling. |
| Sets the minor pike version used for compat handling. |
| Generate more warnings. |
| This option keeps |
| If a prefix is given, only prefixed directives will be
processed. For example, if the prefix is |
current_file
If the current_file
argument has not been specified,
it will default to "-"
.
charset
Turn on automatic character set detection if 1
, otherwise
specifies the character set used by the input.
Defaults to "ISO-10646"
.
compile()
void
define_ansi_macros()
Adds some cpp macros defined by the ANSI-C standards,
such as __FILE__
, __LINE__
, etc.
define_macro()
, define_pike_macros()
void
define_macro(string
name
, string
|object
|array
|function
(:void
)|void
value
, int(-1..)
|void
numargs
, int(2bit)
|void
flags
)
Define a cpp macro.
name
Name of macro to define. Ending the name with "()"
changes the defaults for numargs
and flags
to
0
and 3
respectively.
value
Macro definition. Defaults to "1"
.
numargs
Number of required arguments to a function-style macro.
-1
indicates not function-style.
Defaults to -1
.
flags
Bit-wise or of flags affecting the macro behavior:
| Function style macro with a variable number of arguments.
Invalid if |
| Keep newlines emitted by the macro. |
Defaults to 0
.
define_multiple_macros()
void
define_multiple_macros(mapping
(string
:string
|function
(:void
)|object
|array
(string
|int
))|void
predefs
)
Define multiple macros in one operation.
predefs
Macros to define.
The values predefs
mapping may get updated by the function
in order to improve performance of a second call.
define_macro()
, CompilationHandler()->get_predefines()
,
_take_over_initial_predefines()
void
define_pike_macros()
Adds some pike-specific cpp macros,
such as __DIR__
, __VERSION__
, [__PIKE__], etc.
define_macro()
, define_ansi_macros()
string
format_exception(mixed
err
)
Format an exception caught by cpp as a suitable cpp error message.
err
Caught value.
Returns one of:
| Generate a cpp error using the default format (ie call
|
| Cpp error message to |
The default implementation just returns 0
.
object
get_compilation_handler(int
major
, int
minor
)
mapping
(string
:string
|function
(:void
)|object
|array
(string
|int
)) get_predefines()
Get the predefined macros for this preprocessor.
This function is called by init_pike_cpp()
to
retrieve the set of macros to define at initialization.
The default implementation returns the internal set of
predefined macros unless _take_over_initial_predefines()
has been called, in which case it instead calls the
corresponding function in the master.
This function does NOT return the set of currently defined macros.
init_pike_cpp()
, define_multiple_macros()
,
_take_over_initial_predefines()
string
handle_include(string
header_file
, string
current_file
, bool
is_local_ref
)
void
init_pike_cpp()
Convenience function for initializing the preprocessor to Pike defaults.
The default implementation is essentially:
{
define_ansi_macros();
define_pike_macros();
define_multiple_macros(get_predefines());
}
string
read_include(string
filename
)
void
report(SeverityLevel
severity
, string
filename
, int(1..)
linenumber
, string
subsystem
, sprintf_format
message
, sprintf_args
... extra_args
)
Report a diagnostic from the preprocessor.
severity
The severity of the diagnostic.
filename
linenumber
Location which triggered the diagnostic.
subsystem
Typically "cpp"
.
message
String with the diagnostic message, with optional
sprintf()
-style formatting (if any extra_args
).
extra_args
Extra arguments to sprintf()
.
The default implementation does the following:
If there's a handler which implements Reporter()->report()
,
call it with the same arguments.
Otherwise if there's a handler which implements
compile_warning()
or compile_error()
that matches
severity
, call it with suitable arguments.
Otherwise if there's a compat handler, use it in the same manner as the handler.
Otherwise fall back to calling ::report()
with the
same arguments.
In Pike 8.0 and earlier MasterObject()->report()
was not called.
Reporter()->report()
void
report(SeverityLevel
severity
, string
filename
, int(1..)
linenumber
, string
subsystem
, string
message
, mixed
... extra_args
)
Report a diagnostic from the preprocessor.
severity
The severity of the diagnostic.
filename
linenumber
Location which triggered the diagnostic.
subsystem
Always "cpp"
.
message
String with the diagnostic message, with optional
sprintf()
-style formatting (if any extra_args
).
extra_args
Extra arguments to sprintf()
.
The default implementation just calls
CompilerEnviroment::report()
in the parent with the
same arguments.
Reporter()->report()
, cpp_error()
mixed
resolv(string
sym
)
Attempt to resolve a symbol.
The default implementation calls CompilerEnvironment()->resolv()
in the parent object, with the remaining arguments taken from the
current CPP
context.
Returns the value of sym
if found, and UNDEFINED
if not.
The Pike compiler.
An object of this class compiles a single string of Pike code.
inherit ::this_program : this_program
CompilationHandler
CompilerEnvironment.PikeCompiler.handler
CompilationHandler
CompilerEnvironment.PikeCompiler.compat_handler
string
CompilerEnvironment.PikeCompiler.current_file
The name of the file currently being compiled (during an active compilation).
int
CompilerEnvironment.PikeCompiler.current_line
The current line number (during an active compilation).
type
apply_attribute_constant(string
attr
, mixed
value
, type
arg_type
, void
cont_type
, mapping
state
)
Handle constant arguments to attributed function argument types.
attr
Attribute that arg_type
had.
value
Constant value sent as parameter.
arg_type
Declared type of the function argument.
cont_type
Continuation function type after the current argument.
state
Mapping intended to hold state during checking of multiple arguments.
This function is called when a function is called
with the constant value value
and it has been
successfully matched against arg_type
,
and arg_type
had the type attribute attr
.
This function is typically used to perform specialized
argument checking and to allow for a strengthening
of the function type based on value
.
The default implementation handles the following attributes:
sprintf_args
This marks the arguments to sprintf()
.
sprintf_format
and strict_sprintf_format
These mark arguments that will be sent as the first argument
to sprintf()
.
sprintf_result
This marks the return value for sprintf()
.
sscanf_format
and sscanf_76_format
These mark arguments that will be sent as the second argument
to sscanf()
.
sscanf_input
This is the input for sscanf()
.
Returns a continuation type if it succeeded in strengthening the type.
Returns UNDEFINED otherwise (this is not an error indication).
pop_type_attribute()
, push_type_attribute()
protected
mixed
apply_handler(string
fun
, mixed
... args
)
bool
apply_type_attribute(string
attribute
, type
a
, mapping
|void
state
)
Type attribute handler.
attribute
Attribute that a
had.
a
Continuation of the function being called or UNDEFINED
indicating that there are no further arguments.
state
Mapping intended to hold state during checking of multiple arguments.
Called during type checking when there has been successfull
partial evaluation of a function type that had the type
attribute attribute
before the evaluation.
The default implementation implements the attributes:
__deprecated__
__experimental__
Returns 1
if the type check should be allowed
(ie __attribute__(attribute, a)(b)
) is valid,
and 0
(zero) otherwise.
pop_type_attribute()
, push_type_attribute()
void
change_compiler_compatibility(int
major
, int
minor
)
Change compiler to attempt to be compatible with Pike major
.minor
.
program
compile()
Compile the current source into a program.
This function compiles the current Pike source code into a clonable program.
compile_string()
, compile_file()
, cpp()
, master()
,
CompilationHandler
, create()
CompilerEnvironment.PikeCompiler CompilerEnvironment.PikeCompiler(
string
|void
source
, CompilationHandler
|void
handler
, int
|void
major
, int
|void
minor
, program
|void
target
, object
|void
placeholder
)
Create a PikeCompiler object for a source string.
This function takes a piece of Pike code as a string and initializes a compiler object accordingly.
source
Source code to compile.
handler
The optional argument handler
is used to specify an alternative
error handler. If it is not specified the current master object
at compile time will be used.
major
minor
The optional arguments major
and minor
are used to tell the
compiler to attempt to be compatible with Pike major
.minor
.
target
__empty_program()
program to fill in. The virgin program
returned by __empty_program()
will be modified and returned
by compile()
on success.
placeholder
__null_program()
placeholder object to fill in. The object
will be modified into an instance of the resulting program
on successfull compile. Note that lfun::create()
in the
program will be called without any arguments.
Note that source
must contain the complete source for a program.
It is not possible to compile a single expression or statement.
Also note that no preprocessing is performed.
To preprocess the program you can use compile_string()
or
call the preprocessor manually by calling cpp()
.
Note that all references to target
and placeholder
should
removed if compile()
failes. On failure the placeholder
object will be destructed.
compile_string()
, compile_file()
, cpp()
, master()
,
CompilationHandler
type
eval_type_attribute(string
attribute
, type
t
, mapping
state
)
object
get_compilation_handler(int
major
, int
minor
)
Get compatibility handler for Pike major
.minor
.
This function is called by change_compiler_compatibility()
.
mapping
(string
:mixed
)|object
get_default_module()
Get the default module for the current compatibility level
(ie typically the value returned by predef::all_constants()
).
The default implementation calls the corresponding function
in the current handler, the current compatibility handler
or in the parent CompilerEnvironment
in that order.
| Constant table to use. |
| Use the builtin constant table. |
This function is called by change_compiler_compatibility()
.
program
handle_import(string
module
)
Look up an import module
.
program
handle_inherit(string
inh
)
Look up an inherit inh
in the current program.
bool
index_type_attribute(string
attribute
, type
a
, type
i
)
Type attribute handler.
Called during type checking when a value of the type a
is
indexed with a value of type i
and a
had the type
attribute attribute
before the comparison.
The default implementation implements the "deprecated"
and "experimental"
attributes.
Returns 1
if the type check should be allowed
(ie __attribute__(attribute, a)[i]
), and
0
(zero) otherwise.
pop_type_attribute()
, push_type_attribute()
bool
|type
pop_type_attribute(string
attribute
, type
a
, type
b
, mapping
|void
state
)
Type attribute handler.
Called during type checking when a <= b
and
a
had the type attribute attribute
before the
comparison.
The default implementation implements the "deprecated"
and "experimental"
attributes.
Returns one of:
| An alternative type for |
| Allow the check (ie |
| Do not allow the check. |
push_type_attribute()
, index_type_attribute()
bool
|type
push_type_attribute(string
attribute
, type
a
, type
b
, mapping
|void
state
)
Type attribute handler.
Called during type checking when a <= b
and
b
had the type attribute attribute
before the
comparison.
The default implementation implements the "deprecated"
and "experimental"
attributes.
Returns one of:
| An alternative type for |
| Allow the check (ie |
| Do not allow the check. |
pop_type_attribute()
, index_type_attribute()
void
report(SeverityLevel
severity
, string
filename
, int
linenumber
, string
subsystem
, string
message
, mixed
... extra_args
)
Report a diagnostic from the compiler.
The default implementation attempts to call the first corresponding function in the active handlers in priority order:
Call handler->report().
Call handler->compile_warning() or handler->compile_error()
depending on severity
.
Call compat->report().
Call compat->compile_warning() or compat->compile_error()
depending on severity
.
Fallback: Call CompilerEnvironment()->report()
in the parent object.
The arguments will be as follows:
The report() function will be called with the same arguments as this function.
Depending on the severity
either compile_warning()
or compile_error() will be called.
They will be called with the filename
, linenumber
and formatted message
as arguments.
Note that these will not be called for the NOTICE
severity,
and that compile_error() will be used for both ERROR
and
FATAL
.
In Pike 7.8 and earlier the report() function was not called in the handlers.
CompilerEnvironment()->report()
mixed
resolv(string
identifier
)
Resolve the symbol identifier
.
The default implementation calls CompilerEnvironment()->resolv()
in the parent object, with the remaining arguments taken from the
current PikeCompiler
context.
Returns the value of sym
if found, and UNDEFINED
if not.
int(0..2)
suppress_deprecation_warnings()
Allows to query whether (during an active compilation) deprecation and experimental warnings are supposed to be suppressed.
2
if deprecation and experimental warnings should be suppressed,
1
if experimental warnings should be suppressed,
0
otherwise.
Keeps the state of a single program/class during compilation.
Not in use yet!
string
res = CompilerEnvironment.define()
()
arguments
Array of arguments to the macro. Zero if no parenthesis.
context
CPP context we are evaluating in.
Returns the expansion of the macro on success, and 0
(zero)
on failure (typically due to invalid arguments
).
This class acts as a lock against other threads accessing the compiler.
The lock is released when the object is destructed.
Codec used by decode_value()
to decode objects, functions and
programs which have been encoded by Encoder.nameof
in the
corresponding Encoder
object.
object
__register_new_program(program
p
)
Called to register the program that is being decoded. Might get called repeatedly with several other programs that are being decoded recursively. The only safe assumption is that when the top level thing being decoded is a program, then the first call will be with the unfinished embryo that will later become that program.
Returns either zero or a placeholder object. A placeholder
object must be a clone of __null_program
. When the program is
finished, the placeholder object will be converted to a clone of
it. This is used for pike module objects.
function
(:void
) functionof(string
data
)
Decode function encoded in data
.
This function is called by decode_value()
when it encounters
encoded functions.
data
Encoding of some function as returned by Encoder.nameof()
.
Returns the decoded function.
objectof()
, programof()
object
objectof(string
data
)
Decode object encoded in data
.
This function is called by decode_value()
when it encounters
encoded objects.
data
Encoding of some object as returned by Encoder.nameof()
.
Returns the decoded object.
functionof()
, programof()
program
programof(string
data
)
Decode program encoded in data
.
This function is called by decode_value()
when it encounters
encoded programs.
data
Encoding of some program as returned by Encoder.nameof()
.
Returns the decoded program.
functionof()
, objectof()
Codec used by encode_value()
to encode objects, functions and
programs. Its purpose is to look up some kind of identifier for
them, so they can be mapped back to the corresponding instance
by decode_value()
, rather than creating a new copy.
mixed
nameof(object
|function
(:void
)|program
x
)
Called by encode_value()
to encode objects, functions and programs.
Returns something encodable on success, typically a string.
The returned value will be passed to the corresponding
objectof()
, functionof()
or programof()
by
decode_value()
.
If it returns UNDEFINED
then encode_value
starts to encode
the thing recursively, so that decode_value
later will
rebuild a copy.
encode_value()
has fallbacks for some classes of objects,
functions and programs.
Decoder.objectof()
, Decoder.functionof()
,
Decoder.objectof()
This is the interface for iterator objects. They implement an interface to a collection or stream of data items and a cursor that can be used to iterate over and examine individual items in the data set.
Iterators are typically created to access a data set in some
specific object, array, mapping, multiset or string. An object can
have several iterators that access different data sets in it, or
the same in different ways. E.g. strings have both an iterator for
access char-by-char (String.Iterator
), and another for access
over splitted substrings (String.SplitIterator
).
lfun::_get_iterator
may be defined in an object to get an
instance of the canonical iterator type for it. It's used by e.g.
foreach
to iterate over objects conveniently.
It's not an error to advance an iterator past the beginning or end
of the data set; _iterator_index
and _iterator_value
will
just return UNDEFINED
then. An iterator in that state
need not keep track of positions, so it's undefined what happens
if it's "moved back" into the set of items.
Backward movement for iterators is currently not supported.
predef::get_iterator
, lfun::_get_iterator
,
Array.Iterator
, Mapping.Iterator
, Multiset.Iterator
,
String.Iterator
, String.SplitIterator
, 8.0::Iterator
.
optional
protected
mixed
_iterator_index()
Returns the current index, or UNDEFINED
if the iterator
doesn't point to any item.
If there's no obvious index set then the index is the current
position in the data set, counting from 0
(zero).
_iterator_value()
, lfun::_iterator_index()
,
iterator_index()
protected
mixed
_iterator_next()
This function advances the iterator one step.
This is the only function that is required in the Pike 9.0 and later iterator API. Presence of this function indicates that the iterator implements the Pike 9.0 API.
Returns UNDEFINED
if there are no more values in the set
of elements. It may return any other value if it succeeded in
advancing to a new element. The returned value is used as the
result for _iterator_index()
and _iterator_value()
if
they are not implemented.
_iterator_prev()
, lfun::_iterator_next()
, iterator_next()
,
_iterator_index()
, _iterator_value()
optional
protected
mixed
_iterator_prev()
This function advances the iterator one step backwards.
Returns UNDEFINED
if there are no more values in the set
of elements. It may return any other value if it succeeded in
advancing to the previous element. The returned value may be used
as the result for _iterator_index()
and _iterator_value()
if
they are not implemented.
_iterator_next()
, lfun::_iterator_prev()
, iterator_prev()
,
_iterator_index()
, _iterator_value()
optional
protected
mixed
_iterator_value()
Returns the current value, or UNDEFINED
if the iterator
doesn't point to any item.
_iterator_index()
, lfun::_iterator_value()
,
iterator_value()
void
random( Iterator arg )
If this function is defined then it sets the iterator to point
to before a random item in the accessible set. The random
distribution should be rectangular within that set, and the
pseudorandom sequence provided by random
should be used.
random()
int
sizeof( Iterator arg )
Returns the total number of items in the data set according to this iterator. If the size of the data set is unlimited or unknown then this function shouldn't be defined.
Iterator
res = Iterator()
+ steps
Returns a clone of this iterator which is advanced the specified number of steps. The amount may be negative to move backwards.
If the iterator doesn't support backward movement it should throw an exception in that case.
_iterator_next
, `-
Iterator
res = Iterator()
- steps
Returns a clone of this iterator which is backed up the specified number of steps. The amount may be negative to move forward.
_iterator_next
, `+
,
Iterator Iterator(
void
|mixed
data
)
Initialize this iterator to access a data set in data
. The
type of data
is specific to the iterator implementation. An
iterator may also access some implicit data set, in which case
data
isn't specified at all.
The iterator initially points to before the first item in the data set, if there is any.
The iterator does not need to support being reused, so this
function is typically declared protected
.
In the iterator API in Pike 8.0 and earlier the iterators initially pointed to the first element.
CompatIterator
optional
bool
first()
If this function is defined then it resets the iterator to point to before the first item.
Returns zero if there are no items at all in the data set, one otherwise.
It's not enough to set the iterator to the earliest accessible item. If the iterator doesn't support backing up to the original start position then this function should not be implemented.
optional
void
set_index(zero
index
)
If this function is defined it should set the iterator at the specified index.
It should be possible to set the index at the end of the iterator.
Wrapper for iterators implementing the Pike 8.0 and
earlier iterator API (8.0::Iterator
). Used transparently by
predef::get_iterator()
to provide an iterator suitable
for foreach()
.
This class provides only those functions that are required by the iterator API. It does not proxy any other functions.
get_iterator()
, 8.0::Iterator
inherit Iterator : Iterator
Iterator.CompatIterator Iterator.CompatIterator(
Iterator
old_style_iterator
)
Master control program for Pike.
predef::master()
, predef::replace_master()
inherit Codec : Codec
inherit CompatResolver : CompatResolver
inherit CompilationHandler : CompilationHandler
The master object acts as fallback compilation handler for
compile()
and cpp()
.
protected
inherit Pike_9_0_master : Pike_9_0_master
Namespaces for compat masters.
This inherit is used to provide compatibility namespaces
for get_compat_master()
.
get_compat_master()
inherit Builtin.__master : __master
constant
int
MasterObject.bt_max_string_len
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.
constant
int
MasterObject.out_of_date_warning
Should Pike complain about out of date compiled files. 1 means yes and 0 means no. Controlled by the OUT_OF_DATE_WARNING define.
program
MasterObject.Decoder
This program in the master is cloned and used as codec by
decode_value
if it wasn't given any codec. An instance is only
created on-demand the first time decode_value
encounters
something for which it needs a codec, i.e. the result of a call to
Pike.Encoder.nameof
.
Decoder
, Pike.Decoder
program
MasterObject.Encoder
This program in the master is cloned and used as codec by
encode_value
if it wasn't given any codec. An instance is only
created on-demand the first time encode_value
encounters
something for which it needs a codec, i.e. an object, program, or
function.
Encoder
, Pike.Encoder
string
MasterObject._pike_file_name
string
MasterObject._master_file_name
These are useful if you want to start other Pike processes with the same options as this one was started with.
string
MasterObject.cflags
Flags suitable for use when compiling Pike C modules
int
MasterObject.compat_major
Major pike version to emulate.
This is typically set via the option "-V"
.
compat_minor
int
MasterObject.compat_minor
Minor pike version to emulate.
This is typically set via the option "-V"
.
compat_major
Version
MasterObject.currentversion
Version information about the current Pike version.
string
MasterObject.doc_prefix
Prefix for autodoc files.
mapping
(string
:program
|NoValue
) MasterObject.programs
mapping
(program
:object
) MasterObject.documentation
mapping
(program
:string
) MasterObject.source_cache
Mapping containing the cache of currently compiled files.
This mapping currently has the following structure:
|
The filename path separator is / on both NT and UNIX.
Special cases: The current master program is available under the
name "/master"
, and the program containing the main
function under "/main"
.
string
MasterObject.include_prefix
Prefix for Pike-related C header files.
int
MasterObject.is_pike_master
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.
string
MasterObject.ldflags
Flags suitable for use when linking Pike C modules
int
MasterObject.no_precompile
Turn off loading of precompiled modules.
int
MasterObject.show_if_constant_errors
Show compilation warnings from compilation of cpp()
#if constant()
expressions.
This is typically set via the option "--picky-cpp"
.
int
MasterObject.want_warnings
If not zero compilation warnings will be written out on stderr.
void
_main(array
(string(8bit)
) orig_argv
)
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.
Filesystem.Base
|zero
add_filesystem_handler(string
mountpoint
, Filesystem.Base
|zero
filesystem
)
Mount a filesystem handler to be used by the resolver. On its own does
nothing, but may be used with add_module_path()
and friends to enable
modules to be loaded from Filesystem
objects.
mountpoint
The location in the filesystem to mount the handler
filesystem
A filesystem object that will handle requests for the given mountpoint.
master()->add_filesystem_handler("/foo/bar.zip", Filesystem.Zip("/foo/bar.zip")); master()->add_module_path("/foo/bar.zip/lib");
find_handler_for_path()
bool
asyncp()
Returns 1 if we're in async-mode, e.g. if the main method has returned a negative number.
object
backend_thread()
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.
object
cast_to_object(string
oname
, string
current_file
, CompilationHandler
|void
current_handler
)
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.
object
cast_to_object(string
str
, string
|void
current_file
)
Called by the Pike runtime to cast strings to objects.
str
String to cast to object.
current_file
Filename of the file that attempts to perform the cast.
Returns the resulting object.
cast_to_program()
program
cast_to_program(string
pname
, string
current_file
, CompilationHandler
|void
handler
)
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.
program
cast_to_program(string
str
, string
|void
current_file
)
Called by the Pike runtime to cast strings to programs.
str
String to cast to object.
current_file
Filename of the file that attempts to perform the cast.
Returns the resulting program.
cast_to_object()
void
compile_error(string
file
, int
line
, string
err
)
This function is called whenever a compile error occurs. line
is zero for errors that aren't associated with any specific line.
err
is not newline terminated.
compile_warning()
, compile_exception()
,
get_inhibit_compile_errors()
, set_inhibit_compile_errors()
,
int
compile_exception(array
|object
trace
)
This function is called when an exception is caught during
compilation. Its message is also reported to compile_error
if
this function returns zero.
compile_error()
, compile_warning()
,
get_inhibit_compile_errors()
, set_inhibit_compile_errors()
,
void
compile_warning(string
file
, int
line
, string
err
)
This function is called whenever a compile warning occurs. line
is zero for warnings that aren't associated with any specific
line. err
is not newline terminated.
compile_error()
, compile_exception()
,
get_inhibit_compile_errors()
, set_inhibit_compile_errors()
,
string
decode_charset(string
data
, string
charset
)
This function is called by cpp() when it wants to do character code conversion.
string
decode_charset(string
raw
, string
charset
)
Convert raw
from encoding charset
to UNICODE.
This function is called by cpp()
when it encounters
#charset
directives.
raw
String to convert.
charset
Name of encoding that raw
uses.
raw
decoded to UNICODE, or 0
(zero) if the decoding failed.
Charset
string
describe_backtrace(mixed
exception
)
Called by various routines to format a readable description of an exception.
exception
Something that was thrown. Usually an Error.Generic
object, or
an array with the following content:
Array | |
| Error message. |
| Backtrace to the point where the exception occurred. |
Returns a string describing the exeception.
Usually added by the initialization code the global name space
with add_constant()
.
predef::describe_backtrace()
string
|zero
describe_function(function
(:void
) f
)
Function called by describe_backtrace()
to describe
functions in the backtrace.
string
describe_module(object
|program
mod
, array
(object
)|void
ret_obj
)
Describe the path to the module mod
.
mod
If mod
is a program, attempt to describe the path
to a clone of mod
.
ret_obj
If an instance of mod
is found, it will be returned
by changing element 0
of ret_obj
.
The a description of the path.
The returned description will end with a proper indexing method
currently either "."
or "->"
.
string
|zero
describe_object(object
o
)
Function called by sprintf("%O")
for objects that don't
have an lfun::_sprintf()
, or have one that returns UNDEFINED
.
string
|zero
describe_program(program
|function
(:void
) p
)
Function called by sprintf("%O")
for programs.
void
enable_source_cache()
Enable caching of sources from compile_string()
string
fc_reverse_lookup(object
obj
)
Returns the path for obj
in fc
, if it got any.
string
|zero
find_handler_for_path(string
file
)
Return the mountpoint for the filesystem handler handling the
file
(if any).
add_filesystem_handler()
object
get_compat_master(int
major
, int
minor
)
Return a master object compatible with the specified version of Pike.
This function is used to implement the various compatibility versions
of master()
.
get_compilation_handler()
, master()
CompilationHandler
get_compilation_handler(int
major
, int
minor
)
Get compilation handler for simulation of Pike vmajor
.minor
.
This function is called by cpp()
when it encounters
#pike
directives.
major
Major version.
minor
Minor version.
Returns a compilation handler for Pike >= major
.minor
.
bool
|CompilationHandler
|function
(string
, int
, string
:void
) get_inhibit_compile_errors()
Get the current compile error, warning and exception behaviour.
See set_inhibit_compile_errors()
for details.
set_inhibit_compile_errors()
int
get_precompiled_mtime(string
id
)
Given an identifier returned by query_precompiled_names, returns the mtime of the precompiled entry. Returns -1 if there is no entry.
optional
bool
handle_attribute(mixed
value
, string
attribute
)
This function is called in runtime check_types mode (-rt), when encountering a soft cast to an attributed type.
value
Value that is about to receive the attribute.
attribute
Type attribute to validate.
Returns one of:
| If the attribute is valid for the value. |
| If the attribute is not valid for the value. |
| If the attribute is unsupported. |
The default master implements validation of the "utf8"
attribute.
void
handle_error(mixed
exception
)
Called by the Pike runtime if an exception isn't caught.
exception
Value that was throw()
'n.
describe_backtrace()
void
handle_error(array
|object
trace
)
This function is called when an error occurs that is not caught with catch().
program
handle_inherit(string
pname
, string
current_file
, CompilationHandler
|void
handler
)
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.
string
|zero
master_read_file(string
file
)
Read a file from the master filesystem.
The master filesystem defaults to the system filesystem,
but additional mountpoints may be added via
add_filesystem_handler()
.
All file I/O performed by the MasterObject
is performed
via this function and its related functions.
add_filesystem_handler()
, find_handler_for_path()
,
master_get_dir()
, master_file_stat()
array
(string
) module_defined(object
|program
mod
)
Find the files in which mod
is defined, as they may be hidden away in
joinnodes and dirnodes
mod
The module we are looking for.
An array of strings with filenames. (one for each file in a joinnode, or just one otherwise)
program
objects_reverse_lookup(object
obj
)
Returns the program for obj
, if known to the master.
string
program_path_to_name(string
path
, string
|void
module_prefix
, string
|void
module_suffix
, string
|void
object_suffix
)
Converts a module path on the form "Foo.pmod/Bar.pmod"
or
"/path/to/pike/lib/modules/Foo.pmod/Bar.pmod"
to a module
identifier on the form "Foo.Bar"
.
If module_prefix
or module_suffix
are given, they are
prepended and appended, respectively, to the returned string if
it's a module file (i.e. ends with ".pmod"
or
".so"
). If object_suffix
is given, it's appended to the
returned string if it's an object file (i.e. ends with
".pike"
).
string
programs_reverse_lookup(program
prog
)
Returns the path for prog
in programs
, if it got any.
array
(string
) query_precompiled_names(string
fname
)
Returns identifiers (e.g. file names) of potentially precompiled files in priority order.
string
read_precompiled(string
id
)
Given an identifier returned by query_precompiled_names, returns the precompiled entry. Can assume the entry exists.
void
runtime_warning(string
subsystem
, string
msg
, mixed
|void
data
)
Called by the Pike runtime to warn about data inconsistencies.
subsystem
Runtime subsystem where the warning was generated. Currently the following subsystems may call this function:
| The garbage collector. |
| The runtime itself. |
msg
Warning message.
data
Optional data that further describes the warning specified by msg
.
Currently the following subsystems and messages are defined:
subsystem | message | data |
"gc" | "bad_cycle" | array cycle |
A cycle where the destruction order isn't deterministic was detected by the garbage collector. cycle is an array of the elements in the cycle. | ||
"runtime" | "unsupported_compat" | Version
requested_version |
Compatibility with a version older than the oldest supported version was requested. requested_version is the requested version. |
void
runtime_warning(string
where
, string
what
, mixed
... args
)
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.
void
set_inhibit_compile_errors(bool
|CompilationHandler
|function
(string
, int
, string
:void
) behaviour
)
Set the compile error, warning and exception behaviour.
behaviour
The desired behaviour. One of:
| Output compilation errors and warnings to stderr. This is the default behaviour. |
| Inhibit output of compilator diagnostics. |
| Function to call for compilation errors. Compilation warnings and exceptions are inhibited. The function will be called with the same arguments
as those passed to |
| Compilation handler to use for diagnostics. |
Note that the behaviour is thread local, and is not copied to new threads when they are created.
get_inhibit_compile_errors()
object
show_doc(program
|object
|function
(:void
) obj
)
Show documentation for the item obj
obj
The object for which the documentation should be shown
an AutoDoc object
void
thread_quanta_exceeded(Thread.Thread
thread
, int
ns
)
Function called when a thread has exceeded the thread quanta.
thread
Thread that exceeded the thread quanta.
ns
Number of nanoseconds that the thread executed before allowing other threads to run.
The default master prints a diagnostic and the thread backtrace
to Stdio.stderr
.
This function runs in a signal handler context, and should thus avoid handling of mutexes, etc.
get_thread_quanta()
, set_thread_quanta()
void
unregister(program
p
)
Unregister a program that was only partially compiled.
Called by compile()
to clean up references to partially compiled
programs.
p
Partially compiled program that should no longer be referenced.
Shouldn't this function be in the compilation handler?
Encoder
and Decoder
rolled into one. This is for mainly
compatibility; there's typically no use combining encoding and
decoding into the same object.
inherit Decoder : Decoder
inherit Encoder : Encoder
MasterObject.Codec MasterObject.Codec(
void
|mixed
encoded
)
The optional argument is the thing to encode; it's passed on to
Encoder
.
Resolver of symbols not located in the program being compiled.
CompatResolver
MasterObject.CompatResolver.fallback_resolver
If we fail to resolv, try the fallback.
Typical configuration:
0.6->7.0->7.2-> ... ->master
mapping
(CompilationHandler
:joinnode
) MasterObject.CompatResolver.handler_root_modules
Lookup from handler module to corresponding root_module.
array
(string
) MasterObject.CompatResolver.pike_include_path
The complete include search path
array
(string
) MasterObject.CompatResolver.pike_module_path
The complete module search path
array
(string
) MasterObject.CompatResolver.pike_program_path
The complete program search path
joinnode
MasterObject.CompatResolver.root_module
Join node of the root modules for this resolver.
array
(string
) MasterObject.CompatResolver.system_module_path
The pike system module path, not including any set by the user.
void
add_include_path(string
tmp
)
Add a directory to search for include files.
This is the same as the command line option -I.
Note that the added directory will only be searched when using < > to quote the included file.
remove_include_path()
void
add_module_path(string
path
, string
|void
subpath
)
Add a directory to search for modules.
This is the same as the command line option -M.
remove_module_path()
path
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).
subpath
if path is a ZIP archive, this argument will determine the path within the archive to be searched.
void
add_predefine(string
name
, mixed
value
)
Add a define (without arguments) which will be implicitly
defined in cpp
calls.
void
add_program_path(string
tmp
)
Add a directory to search for programs.
This is the same as the command line option -P.
remove_program_path()
MasterObject.CompatResolver MasterObject.CompatResolver(
mixed
version
, CompatResolver
|void
fallback_resolver
)
The CompatResolver is initialized with a value that can be casted into a "%d.%d" string, e.g. a version object.
It can also optionally be initialized with a fallback resolver.
mapping
get_default_module()
Return the default module for the CompatResolver
.
This is the mapping that corresponds to the predef::
name space for the compatibility level, and is the
value returned by all_constants()
for the same.
mapping
get_predefines()
Returns a mapping with the current predefines.
string
|zero
handle_include(string
f
, string
current_file
, int
local_include
)
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.
read_include()
protected
mapping
(string
:mixed
) instantiate_static_modules(object
|mapping
static_modules
)
Instantiate static modules in the same way that dynamic modules are instantiated.
string
read_include(string
f
)
Read the file specified by handle_include()
.
handle_include()
void
remove_include_path(string
tmp
)
Remove a directory to search for include files.
This function performs the reverse operation of add_include_path()
.
add_include_path()
void
remove_module_path(string
tmp
)
Remove a directory to search for modules.
This function performs the reverse operation of add_module_path()
.
add_module_path()
void
remove_predefine(string
name
)
Remove a define from the set that are implicitly defined in
cpp
calls.
void
remove_program_path(string
tmp
)
Remove a directory to search for programs.
This function performs the reverse operation of add_program_path()
.
add_program_path()
mixed
resolv(string
identifier
, string
|void
current_file
, CompilationHandler
|void
current_handler
, CompilationHandler
|void
current_compat_handler
)
Resolve the identifier
expression.
Returns the value of the identifier
if it exists,
and UNDEFINED
otherwise.
mixed
resolv_base(string
identifier
, string
|void
current_file
, CompilationHandler
|void
current_handler
, CompilationHandler
|void
current_compat_handler
)
Look up identifier
in the root module.
mixed
resolv_or_error(string
identifier
, string
|void
current_file
, void
|CompilationHandler
current_handler
)
Same as resolv
, but throws an error instead of returning
UNDEFINED
if the resolv failed.
Codec for use with decode_value
. This is the decoder
corresponding to Encoder
. See that one for more details.
fname
Name of file being decoded.
placeholder
Make a singleton object of the program being decoded. One of:
| Do not make an object. |
| Object to alter into the singleton.
MUST be a clone of |
| Old API: Generate a singleton object. |
handler
Handler object to use.
void
|string
MasterObject.Decoder.fname
void
|__deprecated__
(int
)|object
MasterObject.Decoder.placeholder
void
|CompilationHandler
MasterObject.Decoder.handler
protected
local
void
__create__(void
|string
fname
, void
|__deprecated__
(int
)|object
placeholder
, void
|CompilationHandler
handler
)
MasterObject.Decoder MasterObject.Decoder(
void
|string
fname
, void
|__deprecated__
(int
)|object
placeholder
, void
|CompilationHandler
handler
)
array
(mixed
)|zero
decode_object(object
o
, mixed
data
)
Restore the state of an encoded object.
o
Object to modify.
data
State information from Encoder()->encode_object()
.
The default implementation calls o->_decode(data)
if the object has an _decode()
, otherwise if
data
is an array, returns it to indicate that lfun::create()
should be called.
This function is called before lfun::create()
in the object has been called, but after lfun::__INIT()
has been called.
Returns an array to indicate to the caller that
lfun::create()
should be called with the elements
of the array as arguments.
Returns 0
(zero) to inhibit calling of lfun::create()
.
Encoder()->encode_object()
Class used by describe_backtrace()
to describe values in backtraces.
inherit _static_modules.Builtin.DestructImmediate : DestructImmediate
Codec for use with encode_value
. It understands all the
standard references to builtin functions, pike modules, and the
main program script.
The format of the produced identifiers are documented here to allow extension of this class:
The produced names are either strings or arrays. The string variant specifies the thing to look up according to the first character:
'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.
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:
A string Look up this string in the result. 'm' Get module object in dirnode. 'p' Do object_program(result).
All lowercase letters and the symbols ':', '/' and '.' are reserved for internal use in both cases where characters are used above.
MasterObject.Encoder MasterObject.Encoder(
void
|mixed
encoded
)
Creates an encoder instance. If encoded
is specified, it's
encoded instead of being reverse resolved to a name. That's
necessary to encode programs.
string
|array
nameof(mixed
what
, void
|array
(object
) module_object
)
When module_object
is set and the name would end with an
object_program
step (i.e. 'p'
), then drop that
step so that the name corresponds to the object instead.
will receive the found object.module_object
[0]
Pike 7.8 master compatibility interface.
Most of the interface is implemented via mixin, or overloading by more recent masters.
This interface is used for compatibility with Pike 7.8.
Replaced by predef::MasterObject
.
get_compat_master()
, master()
, predef::MasterObject
Pike 8.0 master compatibility interface.
Most of the interface is implemented via mixin, or overloading by more recent masters.
This interface is used for compatibility with Pike 8.0.
Replaced by predef::MasterObject
.
get_compat_master()
, master()
, predef::MasterObject
inherit Pike_7_8_master : Pike_7_8_master
Pike 9.0 master compatibility interface.
Most of the interface is implemented via mixin, or overloading by more recent masters.
This interface is used for compatibility with Pike 9.0.
Replaced by predef::MasterObject
.
get_compat_master()
, master()
, predef::MasterObject
inherit Pike_8_0_master : Pike_8_0_master
Contains version information about a Pike version.
int
MasterObject.Version.major
int
MasterObject.Version.minor
The major and minor parts of the version.
int
res = MasterObject.Version()
< v
int
res = MasterObject.Version()
> v
int
res = MasterObject.Version()
== v
int
hash_value( MasterObject.Version arg )
Methods define so that version objects can be compared and ordered.
(int)MasterObject.Version()
(float)MasterObject.Version()
(string)MasterObject.Version()
(array)MasterObject.Version()
(mapping)MasterObject.Version()
(multiset)MasterObject.Version()
The version object can be casted into a string.
MasterObject.Version MasterObject.Version(
int
major
, int
minor
)
Set the version in the object.
Module node representing a single directory.
joinnode
string
MasterObject.dirnode.dirname
CompilationHandler
|void
MasterObject.dirnode.compilation_handler
string
|void
MasterObject.dirnode.name
protected
local
void
__create__(string
dirname
, CompilationHandler
|void
compilation_handler
, string
|void
name
)
Module node holding possibly multiple directories, and optionally falling back to another level.
dirnode
array
(object
|mapping
) MasterObject.joinnode.joined_modules
CompilationHandler
|void
MasterObject.joinnode.compilation_handler
joinnode
|mapping
(mixed
:int(0)
)|void
MasterObject.joinnode.fallback_module
string
|void
MasterObject.joinnode.name
protected
local
void
__create__(array
(object
|mapping
) joined_modules
, CompilationHandler
|void
compilation_handler
, joinnode
|mapping
(mixed
:int(0)
)|void
fallback_module
, string
|void
name
)
array
random(mapping
m
)
Returns a random index-value pair from the mapping.
Array | |
| The index of the mapping entry. |
| The value f the mapping entry. |
Throws an exception if the mapping is empty.
float
random(float
max
)
This function returns a random number in the range
0 ..
.max
-É›
Random
int
random(int
max
)
This function returns a random number in the range
0 ..
.max
-1
Random
mixed
random(object
o
)
If random is called with an object, lfun::_random
will be
called in the object.
Throws an exception if the object doesn't have a _random method.
lfun::_random()
mixed
random(array
|multiset
x
)
Returns a random element from x
.
Throws an exception if the array or multiset is empty.
string(8bit)
random_string(int(0..)
)
Prototype for the randomness generating function.
Override this symbol to implement a usable class.
inherit RandomInterface : RandomInterface
string(8bit)
random_string(int(0..)
len
)
Return a string of random data from the system randomness pool.
On POSIX platforms this reads random data from /dev/urandom on other platforms it may use other methods.
May throw errors on unexpected state.
API for reporting parse errors and similar.
void
report(SeverityLevel
severity
, string
filename
, int(1..)
linenumber
, string
subsystem
, string
message
, mixed
... extra_args
)
Report a diagnostic from the compiler.
severity
The severity of the diagnostic.
filename
linenumber
Location which triggered the diagnostic.
subsystem
Compiler subsystem that generated the diagnostic.
message
sprintf()
-style formatting string with the diagnostic message.
extra_args
Extra arguments to sprintf()
.
The default implementation does the following:
If there's a MasterObject()->report()
, call it
with the same arguments as ourselves.
Otherwise depending on severity
:
| Ignored. |
| Calls |
| Calls |
|
If there's no master object yet, the diagnostic is UTF8-encoded
and output to Stdio.stderr
.
In Pike 7.8 and earlier MasterObject()->report()
was not called.
In Pike 8.0 the fallback output was not UTF8-encoded.
PikeCompiler()->report()
Message severity level. { NOTICE, WARNING, ERROR, FATAL }
report()
constant
Reporter.NOTICE
constant
Reporter.WARNING
constant
Reporter.ERROR
constant
Reporter.FATAL
inherit MasterObject.dirnode : dirnode
inherit MasterObject.joinnode : joinnode
mapping
(string
:array
(array
(Parser.C.Token
))) parse(array
(Parser.C.Token
) tokens
)
Returns a mapping from symbol to a tuple of return type and parameters.
array
(string
) mklibpike.C_Include_Handler.search_path
protected
local
void
__create__(array
(string
) search_path
)
mklibpike.C_Include_Handler mklibpike.C_Include_Handler(
array
(string
) search_path
)
int
res = string_assignment()
[ i
]
String index operator.
string_assignment()
[ i
] = j
String assign index operator.
Argument parsing module
This module supports two rather different methods of argument parsing. The first is suitable quick argument parsing without much in the way of checking:
int main( int c, array(string) argv )
{
mapping arguments = Arg.parse(argv);
array files = arguments[Arg.REST];
if( arguments->help ) print_help();
...
}
The Arg.parse
method will return a mapping from argument name
to the argument value, if any.
Non-option arguments will be placed in the index Arg.REST
The second way to use this module is to inherit the Options class and add supported arguments.
class MyArguments {
inherit Arg.Options;
string help_pre = "Usage: somecommand";
Opt verbose = NoOpt("-v")|NoOpt("--verbose");
string verbose_help = "Turn on verbose output";
Opt help = MaybeOpt("--help");
Opt output = HasOpt("--output")|HasOpt("-o");
string output_help = "Determine where output goes to";
string help_post = "Command aborted";
};
Then, in main:
MyArguments args = MyArguments(argv);
See the documentation for OptLibrary
for details about the various
Opt classes.
constant
Arg.APP
Constant used to represent the name of the application from the
command line. Can be used when indexing an Options
object.
constant
Arg.PATH
Constant used to represent the full path of the application from
the command line. Can be used when indexing an Options
object.
constant
Arg.REST
Constant used to represent command line arguments not identified
as options. Can be used both in the response mapping from parse
and when indexing an Options
object.
mapping
(string
:string
|int(1..)
) parse(array
(string
) argv
)
Convenience function for simple argument parsing.
Handles the most common cases.
The return value is a mapping from option name to the option value.
The special index Arg.REST will be set to the remaining arguments after all options have been parsed.
The following argument syntaxes are supported:
--foo -> "foo":1
--foo=bar -> "foo":"bar"
-bar -> "b":1,"a":1,"r":1
-bar=foo -> "b":1,"a":1,"r":"foo" (?)
--foo --bar -> "foo":1,"bar":1
--foo - --bar -> "foo":1
--foo x --bar -> "foo":1 (?)
-foo -> "f":1,"o":2
-x -x -x -> "x":3
void main(int n, array argv) { mapping opts = Arg.parse(argv); argv = opts[Arg.REST]; if( opts->help ) /*... */ }
protected
inherit OptLibrary : OptLibrary
protected
string
Arg.LowOptions.application
protected
array
(string
) Arg.LowOptions.argv
protected
mapping
(string
:Opt
) Arg.LowOptions.opts
protected
mapping
(string
:int(1)
|string
) Arg.LowOptions.values
(int)Arg.LowOptions()
(float)Arg.LowOptions()
(string)Arg.LowOptions()
(array)Arg.LowOptions()
(mapping)Arg.LowOptions()
(multiset)Arg.LowOptions()
Arg.LowOptions Arg.LowOptions(
array
(string
) _argv
, void
|mapping
(string
:string
) env
)
protected
bool
unhandled_argument(array
(string
) argv
, mapping
(string
:string
) env
)
This class contains a library of parser for different type of options.
Default value for a setting.
Opt output = HasOpt("-o")|Default("a.out");
inherit Opt : Opt
Environment fallback for an option. Can of course be used as only Opt source.
Opt debug = NoOpt("--debug")|Env("MY_DEBUG");
inherit Opt : Opt
Parses an option that has a parameter. --foo=bar, -x
bar and -x=bar will set the variable to bar
.
Opt user = HasOpt("--user")|HasOpt("-u");
inherit NoOpt : NoOpt
Wrapper class that converts the option argument to an integer.
Opt foo = Int(HasOpt("--foo")|Default(4711));
inherit Opt : Opt
Opt
Arg.OptLibrary.Int.opt
protected
local
void
__create__(Opt
opt
)
Arg.OptLibrary.Int Arg.OptLibrary.Int(
Opt
opt
)
Parses an option that may have a parameter. --foo,
-x and x in a sequence like -axb will set the
variable to 1
. --foo=bar, -x bar and
-x=bar will set the variable to bar
.
Opt debug = MaybeOpt("--debug");
inherit NoOpt : NoOpt
Wrapper class that allows multiple instances of an option.
Opt filter = Multiple(HasOpt("--filter"));
inherit Opt : Opt
Opt
Arg.OptLibrary.Multiple.opt
protected
local
void
__create__(Opt
opt
)
Arg.OptLibrary.Multiple Arg.OptLibrary.Multiple(
Opt
opt
)
Parses an option without parameter, such as --help, -x or "x" from -axb.
Opt verbose = NoOpt("-v")|NoOpt("--verbose");
inherit Opt : Opt
Base class for parsing an argument. Inherit this class to create custom made option types.
protected
string
__sprintf()
This function will be called by _sprintf
, which
handles formatting of chaining between objects.
array
(string
) get_opts()
Should return a list of options that are parsed. To properly
chain argument parsers, return your_opts +
::get_opts()
.
mixed
get_value(array
(string
) argv
, mapping
(string
:string
) env
, mixed
previous
)
The overloading method should calculate the value of the
option and return it. Methods processing argv
should only
look at argv[0] and if it matches, set it to 0. Returning
UNDEFINED
means the option was not set (or
matched). To properly chain arguments parsers, return
::get_value(argv, env, previous)
instead of
UNDEFINED
, unless you want to explicitly stop the
chain and not set this option.
The option parser class that contains all the argument objects.
inherit LowOptions : LowOptions
Opt
Arg.Options.help
protected
string
Arg.Options.help_help
Options that trigger help output.
protected
bool
unhandled_argument(array
(string
) argv
, mapping
(string
:string
) env
)
Options parser with a unhandled_argument implementation that parses most common argument formats.
inherit LowOptions : LowOptions
bool
unhandled_argument(array
(string
) argv
, mapping
(string
:string
) env
)
Handles arguments as described in Arg.parse
Decoder object.
It needs _Ffmpeg.ffmpeg
module for real work.
Audio.Codec.decoder Audio.Codec.decoder(
string
|void
codecname
, object
|void
_codec
)
Creates decoder object
codecnum
Some of supported codec, like _Ffmpeg.CODEC_ID_*
_codec
The low level object will be used for decoder.
By default _Ffmpeg.ffmpeg
object will be used.
Until additional library is implemented the second
parameter _codec
hasn't effect.
_Ffmpeg.ffmpeg
, _Ffmpeg.CODEC_ID_MP2
mapping
|int
decode(int
|void
partial
)
Decodes audio data
partial
Only one frame will be decoded per call.
If successfull a mapping with decoded data and byte number of used input data is returned, 0 otherwise.
this_program
|zero
from_file(Audio.Format.ANY
file
)
Set codec type from file
It uses Audio.Format.ANY
's method get_map()
to determine which codec should be used.
file
The object Audio.Format.ANY
.
mapping
get_status()
Returns decoder status
Audio data format handling
API remains marked "unstable".
int
check_format()
Check if data are correctly formated.
string
get_data()
Returns data only.
The operation is destructive. Ie. current data cursor is moved over.
get_frame
, get_sample
string
get_frame()
Returns frame for current position and moves cursor forward.
The operation is destructive. Ie. current data cursor is moved over.
get_data
, get_sample
mapping
get_map()
mapping
get_sample()
Returns sample for current position and moves cursor forward.
The operation is destructive. Ie. current data cursor is moved over.
get_frame
, get_data
this_program
read_file(string
filename
, int
|void
nocheck
)
Reads data from file
read_streamed
this_program
read_streamed(string
filename
, int
|void
nocheck
)
Reads data from stream
Ie. for packetized data source the beggining of data is searched.
read_file
this_program
read_string(string
data
, int
|void
nocheck
)
Reads data from string
A MP3 file parser with ID3 tag support.
inherit .module.ANY : ANY
mapping
|int
get_frame()
Gets next frame from file
Frame is represented by the following mapping. It contains from parsed frame headers and frame data itself.
([ "bitrate": int "copyright": int(0..1), "data": frame_data, "emphasis": emphasis, "extension": "channels":0, "id":1, "layer":3, "original": int(0..1), "padding": int(0..1), "private": int(0..1), "sampling": int ])
CObj
CreateObject(string
prog_id
)
mapping
GetConstants(string
typelib
)
mapping
GetConstants(CObj
cobj
)
object
GetObject(string
|void
filename
, string
|void
prog_id
)
mixed
GetTypeInfo(CObj
cobj
)
protected
string
_sprintf(int
c
, mapping
opts
)
Common Caching implementation
This module serves as a front-end to different kinds of caching systems. It uses two helper objects to actually store data, and to determine expiration policies.
To create a new cache, do Cache.cache
( Cache.Storage.Base
storage_type, Cache.Policy.Base
expiration_policy )
The cache store instances of Cache.Data
.
Base stored object for the cache system.
int
Cache.Data.atime
last-access time.
float
Cache.Data.cost
relative preciousness scale
int
Cache.Data.ctime
creation-time
int
Cache.Data.etime
expiry-time (if supplied). 0 otherwise
Cache.Data Cache.Data(
void
|mixed
value
, void
|int
expire_time
, void
|float
preciousness
)
expire_time is relative and in seconds.
mixed
data()
A method in order to allow for lazy computation
int
recursive_low_size(mixed
whatfor
)
Attempts a wild guess of an object's size. It's left here as a common utility. Some classes won't even need it.
int
size()
A method in order to allow for lazy computation. Used by some Policy Managers
This module serves as a front-end to different kinds of caching systems. It uses two helper objects to actually store data, and to determine expiration policies. Mechanisms to allow for distributed caching systems will be added in time, or at least that is the plan.
void
alookup(string
key
, function
(string
, mixed
, mixed
... :void
) callback
, int
|float
timeout
, mixed
... args
)
Asynchronously look the cache up. The callback will be given as arguments the key, the value, and then any user-supplied arguments. If the timeout (in seconds) expires before any data could be retrieved, the callback is called anyways, with 0 as value.
void
async_cleanup_cache()
Cache.cache Cache.cache(
Cache.Storage.Base
storage_mgr
, Cache.Policy.Base
policy_mgr
, void
|int
cleanup_cycle_delay
)
Creates a new cache object. Required are a storage manager, and an expiration policy object.
void
delete(string
key
, void
|bool
hard
)
Forcibly removes some key.
If the 'hard' parameter is supplied and true, deleted objects will also
have their lfun::_destruct
method called upon removal by some
backends (i.e. memory)
mixed
lookup(string
key
)
Looks in the cache for an element with the given key and, if available, returns it. Returns 0 if the element is not available
void
start_cleanup_cycle()
void
store(string
key
, mixed
value
, void
|int
max_life
, void
|float
preciousness
, void
|multiset
(string
) dependants
)
Sets some value in the cache. Notice that the actual set operation might even not happen at all if the set data doesn't make sense. For instance, storing an object or a program in an SQL-based backend will not be done, and no error will be given about the operation not being performed.
Notice that while max_life will most likely be respected (objects will be garbage-collected at pre-determined intervals anyways), the preciousness . is to be seen as advisory only for the garbage collector If some data was stored with the same key, it gets returned. Also notice that max_life is relative and in seconds. dependants are not fully implemented yet. They are implemented after a request by Martin Stjerrholm, and their purpose is to have some weak form of referential integrity. Simply speaking, they are a list of keys which (if present) will be deleted when the stored entry is deleted (either forcibly or not). They must be handled by the storage manager.
void
threaded_cleanup_cycle()
Base class for cache expiration policies.
void
expire(Cache.Storage.Base
storage
)
Expire callback.
This function is called to expire parts
of storage
.
All Storage.Policy classes must MUST implement this method.
A multiple-policies expiration policy manager.
Thanks to Francesco Chemolli <kinkie@roxen.com> for the contribution.
inherit Cache.Policy.Base : Base
Cache.Policy.Multiple Cache.Policy.Multiple(
Cache.Policy.Base
... policies
)
void
expire(Cache.Storage.Base
storage
)
This expire function calls the expire functions in all of the sub-policies in turn.
Null policy-manager for the generic Caching system
This is a policy manager that doesn't actually expire anything. It is useful in multilevel and/or network-based caches.
Thanks to Francesco Chemolli <kinkie@roxen.com> for the contribution.
inherit Cache.Policy.Base : Base
void
expire(Cache.Storage.Base
storage
)
This is an expire function that does nothing.
An LRU, size-constrained expiration policy manager.
Thanks to Francesco Chemolli <kinkie@roxen.com> for the contribution.
inherit Cache.Policy.Base : Base
Cache.Policy.Sized Cache.Policy.Sized(
int
max
, void
|int
min
)
void
expire(Cache.Storage.Base
storage
)
An access-time-based expiration policy manager.
inherit Cache.Policy.Base : Base
Base class for cache storage managers.
All Cache.Storage
managers must provide these methods.
void
aget(string
key
, function
(string
, int(0)
|Cache.Data
, mixed
... :void
) callback
, mixed
... extra_callback_args
)
Fetch some data from the cache asynchronously.
callback()
will get as first argument key
, and as second
argument 0 (cache miss) or an Cache.Data
object, plus any
additional argument that the user may have supplied.
mixed
delete(string
key
, void
|bool
hard
)
Delete the entry specified by key
from the cache (if present).
If hard
is 1, some backends may force a destruct()
on the deleted value.
Dependants (if present) are automatically deleted.
Returns the deleted entry.
int(0)
|string
first()
int(0)
|string
next()
These two functions are an iterator over the cache. There is an
internal cursor, which is reset by each call to first()
. Subsequent
calls to next()
will iterate over all the contents of the cache.
These functions are not meant to be exported to the user, but are solely for the policy managers' benefit.
int(0)
|Cache.Data
get(string
key
, void
|bool
notouch
)
Fetch some data from the cache synchronously.
Be careful, as with some storage managers it might block the calling thread for some time.
void
set(string
key
, mixed
value
, void
|int
max_life
, void
|float
preciousness
, void
|multiset
(string
) dependants
)
Data-object creation is performed here if necessary, or in get()
depending on the backend.
This allows the storage managers to have their own data class implementation.
A GBM-based storage manager.
This storage manager provides the means to save data to memory. In this manager I'll add reference documentation as comments to interfaces. It will be organized later in a more comprehensive format
Settings will be added later.
Thanks to Francesco Chemolli <kinkie@roxen.com> for the contribution.
inherit Cache.Storage.Base : Base
Cache.Storage.Gdbm Cache.Storage.Gdbm(
string
path
)
A GDBM storage-manager must be hooked to a GDBM Database.
inherit Cache.Data : Data
A RAM-based storage manager.
This storage manager provides the means to save data to memory. In this manager I'll add reference documentation as comments to interfaces. It will be organized later in a more comprehensive format
Settings will be added later.
Thanks to Francesco Chemolli <kinkie@roxen.com> for the contribution.
inherit Cache.Storage.Base : Base
int(0)
|Cache.Data
get(string
key
, void
|int
notouch
)
Fetches some data from the cache. If notouch is set, don't touch the data from the cache (meant to be used by the storage manager only)
inherit Cache.Data : Data
An SQL-based storage manager
This storage manager provides the means to save data to an SQL-based backend.
For now it's mysql only, dialectization will be added at a later time. Serialization should be taken care of by the low-level SQL drivers.
An administrator is supposed to create the database and give the user enough privileges to write to it. It will be care of this driver to create the database tables itself.
Thanks to Francesco Chemolli <kinkie@roxen.com> for the contribution.
inherit Cache.Storage.Base : Base
Cache.Storage.MySQL Cache.Storage.MySQL(
string
sql_url
)
Database manipulation is done externally. This class only returns values, with some lazy decoding.
inherit Cache.Data : Data
A Yabu-based storage manager.
Settings will be added later.
Thanks to Francesco Chemolli <kinkie@roxen.com> for the contribution.
inherit Cache.Storage.Base : Base
Cache.Storage.Yabu Cache.Storage.Yabu(
string
path
)
inherit Cache.Data : Data
The CommonLog module is used to parse the lines in a www server's logfile, which must be in "common log" format -- such as used by default for the access log by Roxen, Caudium, Apache et al.
int
read(function
(array
(int
|string
), int
:void
) callback
, Stdio.File
|string
logfile
, void
|int
offset
)
Reads the log file and calls the callback function for every parsed line. For lines that fails to be parsed the callback is not called not is any error thrown. The number of bytes read are returned.
callback
The callbacks first argument is an array with the different parts of the log entry.
Array | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| One of "GET", "POST", "HEAD" etc. |
| |
| E.g. "HTTP/1.0" |
| One of 200, 404 etc. |
|
The second callback argument is the current offset to the end of the current line.
logfile
The logfile to parse. Either an open Stdio.File
object, or
a string with the path to the logfile.
offset
The absolute position in the file where the parser should begin.
Note that the offset defaults to 0 (zero), NOT the current offset
of logfile
.
Implements Digital Video Broadcasting interface
Only Linux version is supported.
Object for controlling an audio subsystem on full featured cards.
DVB.Audio DVB.Audio(
int
card_number
)
DVB.Audio DVB.Audio()
Create a Audio object.
card_number
The number of card equipment.
int
mixer(int
left
, int
right
)
int
mixer(int
both
)
Sets output level on DVB audio device.
mute()
int
mute(int
mute
)
int
mute()
Mute or unmute audio device.
mixer()
mapping
status()
Returns mapping of current audio device status.
Represents an elementary data stream (PES).
int
_destruct()
Purge a stream reader.
DVB.dvb()->stream()
, read()
void
close()
Closes an open stream.
read()
string
|int
read()
Read data from a stream. It reads up to read buffer size data.
Read buffer size is 4096 by default.
DVB.dvb()->stream()
, close()
int
set_buffer(int
len
)
Sets stream's internal buffer.
The size is 4096 by default.
read()
Main class.
mapping
analyze_pat()
Return mapping of all PMT.
sid:prognum
array
(mapping
)|int
analyze_pmt(int
sid
, int
prognum
)
Parse PMT table.
analyze_pat()
DVB.dvb DVB.dvb(
int
card_number
)
Create a DVB object.
card_number
The number of card equipment.
The number specifies which device will be opened. Ie. /dev/ost/demux0, /dev/ost/demux1 ... for DVB v0.9.4 or /dev/dvb/demux0, /dev/dvb/demux1 ... for versions 2.0+
mapping
fe_info()
Return info of a frondend device.
The information heavily depends on driver. Many fields contain dumb values.
mapping
|int
fe_status()
Return status of a DVB object's frondend device.
The resulting mapping contains the following fields:
| If 1 the frontend is powered up and is ready to be used. |
| If 1 the frontend detects a signal above a normal noise level |
| If 1 the frontend successfully locked to a DVB signal |
| If 1 carrier dectected in signal |
| If 1 then lock at viterbi state |
| If 1 then TS sync byte detected |
| If 1 then tuner has a frequency lock |
mapping
|int
get_pids()
Returns mapping with info of currently tuned program's pids.
tune()
DVB.Stream
stream(int
pid
, int
|function
(:void
) rcb
, int
ptype
)
DVB.Stream
stream(int
pid
, int
|function
(:void
) rcb
)
DVB.Stream
stream(int
pid
)
Create a new stream reader object for PID.
pid
PID of stream.
rcb
Callback function called whenever there is the data to read from stream. Only for nonblocking mode.
ptype
Type of payload data to read. By default, audio data is fetched.
Setting async callback doesn't set the object to nonblocking state.
DVB.Stream()->read()
int
tune(int(2bit)
lnb
, int
freq
, bool
|string
pol
, int
sr
)
Tunes to apropriate transponder's parameters.
lnb
DiSeQc number of LNB.
freq
Frequency divided by 1000.
pol
Polarization. 0
or "v"
for vertical type,
1
or "h"
for horizontal one.
sr
The service rate parameter.
inherit _Debug : _Debug
mapping
Debug.globals
Can be custom filled from within your program in order to
have global references to explore live datastructures using
Inspect
; comes preinitialised with the empty mapping, ready for use.
void
add_to_perf_map(program
p
)
Updates the perf map file with new program p
.
generate_perf_map()
Expects generate_perf_map()
to have been called before.
int(0..)
assembler_debug(int(0..)
level
)
Set the assembler debug level.
The old assembler debug level will be returned.
This function is only available if the Pike runtime has been compiled with RTL debug.
int(0..)
compiler_trace(int(0..)
level
)
Set the compiler trace level.
The old compiler trace level will be returned.
This function is only available if the Pike runtime has been compiled with RTL debug.
mapping
(string
:int
) count_objects()
Returns the number of objects of every kind in memory.
int(0..)
debug(int(0..)
level
)
Set the run-time debug level.
The old debug level will be returned.
This function is only available if the Pike runtime has been compiled with RTL debug.
mixed
describe(mixed
x
)
Prints out a description of the thing x
to standard error.
The description contains various internal info associated with
x
.
This function only exists if the Pike runtime has been compiled with RTL debug.
int
describe_encoded_value(string
data
)
Describe the contents of an encode_value()
string.
Returns the number of encoding errors that were detected (if any).
array
(array
(int
|string
|type
)) describe_program(program
p
)
Debug function for showing the symbol table of a program.
Returns an array of arrays with the following information
for each symbol in p
:
Array | |
| Bitfield with the modifiers for the symbol. |
| Name of the symbol. |
| Value type for the symbol. |
| Type of symbol. |
| Offset into the code or data area for the symbol. |
| Offset in the inherit table to the inherit containing the symbol. |
| Depth in the inherit tree for the inherit containing the symbol. |
The API for this function is not fixed, and has changed since Pike 7.6. In particular it would make sense to return an array of objects instead, and more information about the symbols might be added.
void
disassemble(function
(:void
) fun
)
Disassemble a Pike function to Stdio.stderr
.
This function is only available if the Pike runtime has been compiled with debug enabled.
void
dmalloc_set_name()
Only available when compiled with dmalloc.
void
dmalloc_set_name(string
filename
, int(1..)
linenumber
)
Only available when compiled with dmalloc.
void
dump_backlog()
Dumps the 1024 latest executed opcodes, along with the source
code lines, to standard error. The backlog is only collected on
debug level 1 or higher, set with _debug
or with the -d
argument on the command line.
This function only exists if the Pike runtime has been compiled with RTL debug.
void
dump_dmalloc_locations(string
|array
|mapping
|multiset
|function
(:void
)|object
|program
|type
o
)
Only available when compiled with dmalloc.
void
dump_program_tables(program
p
, int(0..)
|void
indent
)
Dumps the internal tables for the program p
on stderr.
p
Program to dump.
indent
Number of spaces to indent the output.
array
(object
) find_all_clones(program
p
, bool
|void
include_subclasses
)
Return an array with all objects that are clones of p
.
p
Program that the objects should be a clone of.
include_subclasses
If true, include also objects that are clones of programs
that have inherited p
. Note that this adds significant
overhead.
This function is only intended to be used for debug purposes.
map_all_objects()
void
gc_set_watch(array
|multiset
|mapping
|object
|function
(:void
)|program
|string
x
)
Sets a watch on the given thing, so that the gc will print a message whenever it's encountered. Intended to be used together with breakpoints to debug the garbage collector.
This function only exists if the Pike runtime has been compiled with RTL debug.
mapping
(string
:int
|float
) gc_status()
Get statistics from the garbage collector.
A mapping with the following content will be returned:
| Number of arrays, mappings, multisets, objects and programs. |
| Number of memory allocations since the last gc run. |
| Threshold for "num_allocs" when another automatic gc run is scheduled. |
| Estimation of the current amount of garbage. |
| Decaying average over the number of allocated objects between gc runs. |
| Decaying average over the number of freed objects in each gc run. |
| Garbage ratio in the last gc run. |
| Decaying average over the interval between gc runs, measured in real time nanoseconds. |
| Decaying average over the length of the gc runs, measured in real time nanoseconds. |
| The garbage accumulation goal that the gc aimed for when
setting "alloc_threshold" in the last run. The value is
either "garbage_ratio_low", "garbage_ratio_high" or
"garbage_max_interval". The first two correspond to the gc
parameters with the same names in |
| Time when the garbage-collector last ran. |
| The total amount of CPU time that has been consumed in implicit GC runs, in nanoseconds. 0 on systems where Pike lacks support for CPU time measurement. |
| The total amount of real time that has been spent in implicit GC runs, in nanoseconds. |
gc()
, Pike.gc_parameters()
, Pike.implicit_gc_real_time
void
generate_perf_map()
Generates a perf
map file of all Pike code and writes it to
/tmp/perf-<pid>.map
. This is useful only if pike has been
compiled with machine code support. It allows the linux perf tool to
determine the correct name of Pike functions that were compiled to
machine code by pike.
mapping
(string
:int
) get_program_layout(program
p
)
Returns a mapping which describes the layout of compiled machine
code in the program p
. The indices of the returned mapping
are function names, the values the starting address of the compiled
function. The total size of the program code is stored with index
0
.
void
hexdump(string(8bit)
raw
)
Write a hexadecimal dump of the contents of raw
to Stdio.stderr
.
void
list_open_fds()
Only available when compiled with dmalloc.
mixed
locate_references(string
|array
|mapping
|multiset
|function
(:void
)|object
|program
|type
o
)
This function is mostly intended for debugging. It will search through
all data structures in Pike looking for o
and print the
locations on stderr. o
can be anything but int
or
float
.
This function only exists if the Pike runtime has been compiled with RTL debug.
int(0..)
map_all_objects(function
(object
:void
) cb
)
Call cb for all objects that currently exist. The callback will not be called with destructed objects as it's argument.
Objects might be missed if cb
creates new objects or destroys
old ones.
This function is only intended to be used for debug purposes.
The total number of objects
next_object()
, find_all_clones()
int(0..)
map_all_programs(function
(program
:void
) cb
)
Call cb for all programs that currently exist.
Programs might be missed if cb
creates new programs.
This function is only intended to be used for debug purposes.
The total number of programs
map_all_objects()
int(0..)
map_all_strings(function
(string
:void
) cb
)
Call cb for all strings that currently exist.
strings might be missed if cb
creates new strings or destroys
old ones.
This function is only intended to be used for debug purposes.
The total number of strings
next_object()
mapping
(string
:int
) memory_usage()
Check memory usage.
This function is mostly intended for debugging. It delivers a mapping with information about how many arrays/mappings/strings etc. there are currently allocated and how much memory they use.
The entries in the mapping are typically paired, with one
named "num_" + SYMBOL + "s"
containing a count,
and the other named SYMBOL + "_bytes"
containing
a best effort approximation of the size in bytes.
Exactly what fields this function returns is version dependant.
_verify_internals()
mixed
next(mixed
x
)
Find the next object/array/mapping/multiset/program or string.
All objects, arrays, mappings, multisets, programs and strings are stored in linked lists inside Pike. This function returns the next item on the corresponding list. It is mainly meant for debugging the Pike runtime, but can also be used to control memory usage.
next_object()
, prev()
object
next_object(object
o
)
object
next_object()
Returns the next object from the list of all objects.
All objects are stored in a linked list.
If no arguments have been given next_object()
will return the first
object from the list.
If o
has been specified the object after o
on the list will be
returned.
This function is not recomended to use.
destruct()
int(0..)
optimizer_debug(int(0..)
level
)
Set the optimizer debug level.
The old optimizer debug level will be returned.
This function is only available if the Pike runtime has been compiled with RTL debug.
string
pp_memory_usage()
Returns a pretty printed version of the
output from memory_usage
.
string
pp_object_usage()
Returns a pretty printed version of the output from
count_objects
(with added estimated RAM usage)
mixed
prev(mixed
x
)
Find the previous object/array/mapping/multiset or program.
All objects, arrays, mappings, multisets and programs are stored in linked lists inside Pike. This function returns the previous item on the corresponding list. It is mainly meant for debugging the Pike runtime, but can also be used to control memory usage.
Unlike next()
this function does not work on strings.
next_object()
, next()
int
refs(string
|array
|mapping
|multiset
|function
(:void
)|object
|program
o
)
Return the number of references o
has.
It is mainly meant for debugging the Pike runtime, but can also be used to control memory usage.
Note that the number of references will always be at least one since the value is located on the stack when this function is executed.
next()
, prev()
void
remove_from_perf_map(program
p
)
Removed p
from the perf map file.
void
reset_dmalloc()
Only available when compiled with dmalloc.
int
size_object(object
o
)
Return the aproximate size of the object, in bytes. This might not work very well for native objects
The function tries to estimate the memory usage of variables belonging to the object.
It will not, however, include the size of objects assigned to variables in the object.
If the object has a lfun::_size_object()
it will be called
without arguments, and the return value will be added to the final
size. It is primarily intended to be used by C-objects that
allocate memory that is not normally visible to pike.
lfun::_size_object()
, sizeof()
void
verify_internals()
Perform sanity checks.
This function goes through most of the internal Pike structures and generates a fatal error if one of them is found to be out of order. It is only used for debugging.
This function does a more thorough check if the Pike runtime has been compiled with RTL debug.
constant
Debug.FP_SNAN
constant
Debug.FP_QNAN
constant
Debug.FP_NINF
constant
Debug.FP_PINF
constant
Debug.FP_ZERO
constant
Debug.FP_PZERO
constant
Debug.FP_NZERO
constant
Debug.TAG_DELAYED
constant
Debug.TAG_AGAIN
constant
Debug.TAG_ARRAY
constant
Debug.TAG_MAPPING
constant
Debug.TAG_MULTISET
constant
Debug.TAG_OBJECT
constant
Debug.TAG_FUNCTION
constant
Debug.TAG_PROGRAM
constant
Debug.TAG_STRING
constant
Debug.TAG_FLOAT
constant
Debug.TAG_INT
constant
Debug.TAG_TYPE
constant
Debug.TAG_NEG
constant
Debug.TAG_SMALL
constant
Debug.ID_ENTRY_TYPE_CONSTANT
constant
Debug.ID_ENTRY_EFUN_CONSTANT
constant
Debug.ID_ENTRY_RAW
constant
Debug.ID_ENTRY_EOT
constant
Debug.ID_ENTRY_VARIABLE
constant
Debug.ID_ENTRY_FUNCTION
constant
Debug.ID_ENTRY_CONSTANT
constant
Debug.ID_ENTRY_INHERIT
constant
Debug.ID_ENTRY_ALIAS
constant
Debug.T_ATTRIBUTE
constant
Debug.T_NSTRING
constant
Debug.T_NAME
constant
Debug.T_SCOPE
constant
Debug.T_ASSIGN
constant
Debug.T_UNKNOWN
constant
Debug.T_MIXED
constant
Debug.T_NOT
constant
Debug.T_AND
constant
Debug.T_OR
constant
Debug.T_ARRAY
constant
Debug.T_MAPPING
constant
Debug.T_MULTISET
constant
Debug.T_OBJECT
constant
Debug.T_FUNCTION
constant
Debug.T_PROGRAM
constant
Debug.T_STRING
constant
Debug.T_TYPE
constant
Debug.T_VOID
constant
Debug.T_MANY
constant
Debug.T_INT
constant
Debug.T_FLOAT
constant
Debug.T_ZERO
Stdio.Buffer
Debug.Decoder.input
protected
local
void
__create__(Stdio.Buffer
input
)
Debug.Decoder Debug.Decoder(
Stdio.Buffer
input
)
Allows for interactive debugging and live data structure inspection
in both single- and multi-threaded programs.
Creates an independent background thread that every pollinterval
will show a list of running threads.
Optionally, a triggersignal
can be specified which allows the dump to
be triggered by a signal.
Example: In the program you'd like to inspect, insert the following one-liner:
Debug.Inspect("/tmp/test.pike");
Then start the program and keep it running. Next you create a /tmp/test.pike with the following content:
void create() {
werror("Only once per modification of test.pike\n");
}
int main() {
werror("This will run every iteration\n");
werror("By returning 1 here, we disable the stacktrace dumps\n");
return 0;
}
void _destruct() {
werror("_destruct() runs just as often as create()\n");
}
Whenever you edit /tmp/test.pike, it will automatically reload the file.
string
|function
(void
:void
) Debug.Inspect._callback
Either the callback function which is invoked on each iteration, or the name of a file which contains a class which is (re)compiled automatically and called on each iteration.
create
Thread.Thread
Debug.Inspect._loopthread
The inspect-thread. It will not appear in the displayed thread-list.
int
Debug.Inspect.pollinterval
The polling interval in seconds, defaults to 4.
int
Debug.Inspect.triggersignal
If assigned to, it will allow the diagnostics inspection to be triggered by this signal.
Debug.Inspect Debug.Inspect(
string
|function
(void
:void
)|void
cb
)
Starts up the background thread.
cb
Specifies either the callback function which is invoked on each iteration,
or the
name of a file which contains a class which is (re)compiled automatically
with an optional main()
method, which will be called on each
iteration.
If the main()
method returns 0, new stacktraces will be dumped
every iteration; if it returns 1, stacktrace dumping will be suppressed.
The compilation and the running of the callback is guarded by a catch(), so that failures (to compile) in that section will not interfere with the running program.
If the list of running threads did not change, displaying the list again will be suppressed.
triggersignal
, pollinterval
, _loopthread
, _callback
,
Debug.globals
void
inspect()
The internal function which does all the work each pollinterval. Run it directly to force a thread-dump.
Allows for rapid collection of logdata, which is then fed to the real werror() at idle moments. This allows for logging to occur with minimal timing interference.
void
werror(string
format
, mixed
... args
)
Overloads the predef::werror()
function
to allow floods of logentries while introducing minimal latency.
Logs are buffered, and periodically flushed from another thread.
If the arrival rate of logs is excessive, it simply skips
part of the logs to keep up.
When parts are skipped, records are skipped in whole and will never be split up.
werror_options()
void
werror_options(int
options
, void
|int
pollinterval
, void
|int
drainrate
, void
|int
maxbufentries
)
options
Defaults to 0
, reserved for future enhancements.
pollinterval
Pollinterval in seconds for the log-flush thread; defaults to 1
.
Logs will only be flushed out, if during the last pollinterval
no new logs have been added.
drainrate
Maximum number of lines per second that will be dumped to stderr.
Defaults to 10
.
maxbufentries
Maximum number of buffered logrecords which have not been flushed to stderr
yet. If this number is exceeded, the oldest maxbufentries/2
entries
will be skipped; a notice to that effect is logged to stderr.
werror()
This is a probe subject which you can send in somewhere to get probed (not to be confused with a probe object, which does some active probing). All calls to LFUNs will be printed to stderr. It is possible to name the subject by passing a string as the first and only argument when creating the subject object.
> object s = Debug.Subject(); create() > random(s); _random() (1) Result: 0 > abs(s); `<(0) _sprintf(79, ([ ])) (2) Result: Debug.Subject > abs(class { inherit Debug.Subject; int `<(mixed ... args) { return 1; } }()); create() `-() _destruct() (3) Result: 0 > pow(s,2); `[]("pow") Attempt to call the NULL-value Unknown program: 0(2)
A class that when instatiated will turn on trace, and when it's destroyed will turn it off again.
Debug.Tracer Debug.Tracer(
int
level
)
Sets the level of debug trace to level
.
This wrapper can be placed around another object to get printouts about what is happening to it. Only a few LFUNs are currently supported.
> object x=Debug.Wrapper(Crypto.MD5()); Debug.Wrapper is proxying ___Nettle.MD5_State() > x->name(); ___Nettle.MD5_State()->name (1) Result: "md5" > !x; !___Nettle.MD5_State() (2) Result: 0
array
indices( Debug.Wrapper arg )
int
sizeof( Debug.Wrapper arg )
string sprintf(string format, ... Debug.Wrapper arg ... )
array
values( Debug.Wrapper arg )
bool
res = !Debug.Wrapper()
mixed
res = Debug.Wrapper()
->X
mixed
res = Debug.Wrapper()
[ x
]
Debug.Wrapper Debug.Wrapper(
object
x
)
void
display(int
|void
num
, string
|array
(string
)|void
pattern
, string
|array
(string
)|void
exclude
)
Show profiling information in a more-or-less readable manner. This only works if pike has been compiled with profiling support.
The function will print to stderr using werror.
This is mainly here for use from the Debug.Watchdog
class, if
you want to do your own formatting or output to some other channel
use get_prof_info
instead.
array
(array
(string
|float
|int
)) get_prof_info(string
|array
(string
)|void
include
, string
|array
(string
)|void
exclude
)
Collect profiling data.
This will return the CPU usage, by function, since the last time the function was called.
The returned array contains the following entries per entry:
Array | |
| The name of the function. |
| The number of calls. |
| Total self CPU time in milliseconds. |
| Total self CPU time in milliseconds, including children. |
| Average self CPU time in microseconds. |
| Average self CPU time in microseconds, including children. |
| The self CPU time as percentage of total time. |
| The self CPU time, including children, as percentage of total time. |
| Function's definition source location. |
The CompilerEnvironment
object that is used
for loading C-modules and by predef::compile()
.
predef::compile()
is essentially an alias for the
CompilerEnvironment()->compile()
in this object.
CompilerEnvironment
, predef::compile()
inherit CompilerEnvironment : CompilerEnvironment
object
mkerror(mixed
error
)
Returns an Error object for any argument it receives. If the argument already is an Error object or is empty, it does nothing.
Class for exception objects for errors of unspecified type.
array
(backtrace_frame
|array
(mixed
)) Error.Generic.error_backtrace
The backtrace as returned by backtrace
where the error
occurred.
Code that catches and rethrows errors should ensure that this remains the same in the rethrown error.
string
Error.Generic.error_message
The error message. It always ends with a newline ('\n'
)
character and it might be more than one line.
Code that catches and rethrows errors may extend this with more error information.
bool
res = is_type(Error.Generic()
)
Claims that the error object is an array, for compatibility with old style error handling code.
string sprintf(string format, ... Error.Generic arg ... )
array
|string
res = Error.Generic()
[ index
]
Index operator.
Simulates an array
Array | |
| Error message as returned by |
| Backtrace as returned by |
The error message is always terminated with a newline.
backtrace()
array
backtrace()
Return the backtrace where the error occurred. Normally simply
returns error_backtrace
.
predef::backtrace()
(
array
)Error.Generic()
Cast operator.
The only supported type to cast to is "array"
, which
generates an old-style error ({
.message
(),
backtrace
()})
Error.Generic Error.Generic(
string
message
, void
|array
(backtrace_frame
|array
(mixed
)) backtrace
)
string
describe()
Return a readable error report that includes the backtrace.
string
message()
Return a readable message describing the error. Normally simply
returns error_message
.
If you override this function then you should ensure that
error_message
is included in the returned message, since there
might be code that catches your error objects, extends
error_message
with more info, and rethrows the error.
protected
function
(:void
) `()(void
|string
path
)
FIXME: Document this function
program
get_filesystem(string
what
)
FIXME: Document this function
int
parse_mode(int
old
, int
|string
mode
)
FIXME: Document this function
Baseclass that can be extended to create new filesystems. Is used by the Tar and System filesystem classes.
int
apply()
FIXME: Document this function
Base
cd(string
|void
directory
)
Change directory within the filesystem. Returns a new filesystem object with the given directory as cwd.
void
chmod(string
filename
, int
|string
mode
)
Change mode of a file or directory.
void
chown(string
filename
, int
|object
owner
, int
|object
group
)
Change ownership of the file or directory
Base
chroot(void
|string
directory
)
Change the root of the filesystem.
string
cwd()
Returns the current working directory within the filesystem.
array
find(void
|function
(Stat
:int
) mask
, mixed
... extra
)
FIXME: Document this function
array
(string
) get_dir(void
|string
directory
, void
|string
|array
glob
)
Returns an array of all files and directories within a given directory.
directory
Directory where the search should be made within the filesystem. CWD is assumed if none (or 0) is given.
glob
Return only files and dirs matching the glob (if given).
[get_stats]
array
(Stat
) get_stats(void
|string
directory
, void
|string
|array
glob
)
Returns stat-objects for the files and directories matching the given glob within the given directory.
[get_dir]
int
mkdir(string
directory
, void
|int
|string
mode
)
Create a new directory
Stdio.File
open(string
filename
, string
mode
)
Open a file within the filesystem
A Stdio.File object.
int
rm(string
filename
)
Remove a file from the filesystem.
Stat
stat(string
file
, int
|void
lstat
)
Return a stat-object for a file or a directory within the filesystem.
Describes the stat of a file
bool
Filesystem.Stat.isblk
Is the file a FIFO?
Is the file a character device?
Is the file (?) a directory?
Is the file a block device?
Is the file a regular file?
Is the file a link to some other file or directory?
Is the file a socket?
FIXME: Document this function.
1 if the file is of a specific type 0 if the file is not.
[set_type]
Read only
bool
Filesystem.Stat.ischr
Is the file a FIFO?
Is the file a character device?
Is the file (?) a directory?
Is the file a block device?
Is the file a regular file?
Is the file a link to some other file or directory?
Is the file a socket?
FIXME: Document this function.
1 if the file is of a specific type 0 if the file is not.
[set_type]
Read only
bool
Filesystem.Stat.isdir
Is the file a FIFO?
Is the file a character device?
Is the file (?) a directory?
Is the file a block device?
Is the file a regular file?
Is the file a link to some other file or directory?
Is the file a socket?
FIXME: Document this function.
1 if the file is of a specific type 0 if the file is not.
[set_type]
Read only
bool
Filesystem.Stat.isdoor
Is the file a FIFO?
Is the file a character device?
Is the file (?) a directory?
Is the file a block device?
Is the file a regular file?
Is the file a link to some other file or directory?
Is the file a socket?
FIXME: Document this function.
1 if the file is of a specific type 0 if the file is not.
[set_type]
Read only
bool
Filesystem.Stat.isfifo
Is the file a FIFO?
Is the file a character device?
Is the file (?) a directory?
Is the file a block device?
Is the file a regular file?
Is the file a link to some other file or directory?
Is the file a socket?
FIXME: Document this function.
1 if the file is of a specific type 0 if the file is not.
[set_type]
Read only
bool
Filesystem.Stat.islnk
Is the file a FIFO?
Is the file a character device?
Is the file (?) a directory?
Is the file a block device?
Is the file a regular file?
Is the file a link to some other file or directory?
Is the file a socket?
FIXME: Document this function.
1 if the file is of a specific type 0 if the file is not.
[set_type]
Read only
bool
Filesystem.Stat.isreg
Is the file a FIFO?
Is the file a character device?
Is the file (?) a directory?
Is the file a block device?
Is the file a regular file?
Is the file a link to some other file or directory?
Is the file a socket?
FIXME: Document this function.
1 if the file is of a specific type 0 if the file is not.
[set_type]
Read only
bool
Filesystem.Stat.issock
Is the file a FIFO?
Is the file a character device?
Is the file (?) a directory?
Is the file a block device?
Is the file a regular file?
Is the file a link to some other file or directory?
Is the file a socket?
FIXME: Document this function.
1 if the file is of a specific type 0 if the file is not.
[set_type]
Read only
void
attach_statarray(array
(int
) a
)
Fills the stat-object with data from a Stdio.File.stat() call.
object
|zero
cd()
Change to the stated directory.
the directory if the stated object was a directory, 0 otherwise.
string
nice_date()
Returns the date of the stated object as cleartext.
Stdio.File
open(string
mode
)
Open the stated file within the filesystem
a [Stdio.File] object
[Stdio.File]
void
set_type(string
x
)
Set a type for the stat-object.
This call doesnot change the filetype in the underlaying filesystem.
x
Type to set. Type is one of the following:
[isfifo], [ischr], [isdir], [isblk], [isreg], [islnk], [issock], [isdoor]
Implements an abstraction of the normal filesystem.
inherit Filesystem.Base : Base
Filesystem.System Filesystem.System(
void
|string
directory
, void
|string
root
, void
|int
fast
, void
|Filesystem.Base
parent
)
Instanciate a new object representing the filesystem.
directory
The directory (in the real filesystem) that should become the root of the filesystemobject.
root
Internal
fast
Internal
parent
Internal
Iterator object that traverses a directory tree and returns files as values and paths as indices. Example that uses the iterator to create a really simple sort of make:
object i=Filesystem.Traversion("."); foreach(i; string dir; string file) { if(!has_suffix(file, ".c")) continue; file = dir+file; string ofile = file; ofile[-1]='o'; object s=file_stat(ofile); if(s && i->stat()->mtime<s->mtime) continue; // compile file }
Filesystem.Traversion Filesystem.Traversion(
string
path
, void
|bool
symlink
, void
|bool
ignore_errors
, void
|function
(array
:array
) sort_fun
)
path
The root path from which to traverse.
symlink
Don't traverse symlink directories.
ignore_errors
Ignore directories that can not be accessed.
sort_fun
Sort function to be applied to directory entries before traversing. Can also be a filter function.
float
progress(void
|float
share
)
Returns the current progress of the traversion as a value between 0.0 and 1.0. Note that this value isn't based on the number of files, but the directory structure.
Stdio.Stat
|zero
stat()
Returns the stat for the current index-value-pair.
Basic filesystem monitor.
This module is intended to be used for incremental scanning of a filesystem.
Supports FSEvents on MacOS X and Inotify on Linux to provide low overhead monitoring; other systems use a less efficient polling approach.
Filesystem.Monitor.symlinks
, System.FSEvents
, System.Inotify
protected
constantint
Filesystem.Monitor.basic.default_file_interval_factor
The default factor to multiply default_max_dir_check_interval
with to get the maximum number of seconds between checks of files.
The value can be changed by calling create()
.
The value can be overridden for individual files or directories
by calling monitor()
.
Overload this constant to change the default.
protected
constantint
Filesystem.Monitor.basic.default_max_dir_check_interval
The default maximum number of seconds between checks of directories in seconds.
This value is multiplied with default_file_interval_factor
to
get the corresponding default maximum number of seconds for files.
The value can be changed by calling create()
.
The value can be overridden for individual files or directories
by calling monitor()
.
Overload this constant to change the default.
protected
constantint
Filesystem.Monitor.basic.default_stable_time
The default minimum number of seconds without changes for a change
to be regarded as stable (see stable_data_change()
.
protected
Pike.Backend
Filesystem.Monitor.basic.backend
Backend to use.
If 0
(zero) - use the default backend.
protected
mixed
Filesystem.Monitor.basic.co_id
Call-out identifier for backend_check()
if in
nonblocking mode.
set_nonblocking()
, set_blocking()
protected
Thread.Mutex
Filesystem.Monitor.basic.monitor_mutex
Mutex controlling access to monitor_queue
.
protected
ADT.Heap
Filesystem.Monitor.basic.monitor_queue
Heap containing active Monitor
s that need polling.
The heap is sorted on Monitor()->next_poll
.
protected
mapping
(string
:Monitor
) Filesystem.Monitor.basic.monitors
Mapping from monitored path to corresponding Monitor
.
The paths are normalized to canonic_path(path)
,
All filesystems are handled as if case-sensitive. This should not be a problem for case-insensitive filesystems as long as case is maintained.
protected
void
adjust_monitor(Monitor
m
)
Update the position in the monitor_queue
for the monitor m
to account for an updated next_poll value.
void
attr_changed(string
path
, Stdio.Stat
st
)
File attribute changed callback.
path
Path of the file or directory which has changed attributes.
st
Status information for path
as obtained by file_stat(path, 1)
.
This function is called when a change has been detected for an attribute for a monitored file or directory.
Called by check()
and check_monitor()
.
If there is a data_changed()
callback, it may supersede this
callback if the file content also has changed.
Overload this to do something useful.
protected
void
backend_check()
Backend check callback function.
This function is intended to be called from a backend,
and performs a check()
followed by rescheduling
itself via a call to set_nonblocking()
.
check()
, set_nonblocking()
protected
string
canonic_path(string
path
)
Canonicalize a path.
path
Path to canonicalize.
The default implementation returns combine_path(path, ".")
,
i.e. no trailing slashes.
int
check(int
|void
max_wait
, int
|void
max_cnt
, mapping
(string
:int
)|void
ret_stats
)
Check for changes.
max_wait
Maximum time in seconds to wait for changes. -1
for infinite wait.
max_cnt
Maximum number of paths to check in this call. 0
(zero) for unlimited.
ret_stats
Optional mapping that will be filled with statistics (see below).
A suitable subset of the monitored files will be checked for changes.
The function returns when either a change has been detected
or when max_wait
has expired. The returned value indicates
the number of seconds until the next call of check()
.
If ret_stats
has been provided, it will be filled with
the following entries:
| The total number of active monitors when the scan completed. |
| The number of monitors that were scanned for updates during the call. |
| The number of monitors that were updated during the call. |
| The number of seconds that the call slept. |
Any callbacks will be called from the same thread as the one
calling check()
.
check_all()
, monitor()
void
check_all(mapping
(string
:int
)|void
ret_stats
)
Check all monitors for changes.
ret_stats
Optional mapping that will be filled with statistics (see below).
All monitored paths will be checked for changes.
You typically don't want to call this function, but instead
check()
.
Any callbacks will be called from the same thread as the one
calling check()
.
check()
, monitor()
protected
bool
check_monitor(Monitor
m
, MonitorFlags
|void
flags
)
Check a single Monitor
for changes.
m
Monitor
to check.
flags
| Don't recurse. |
| Check all monitors for the entire subtree rooted in |
This function is called by check()
for the Monitor
s
it considers need checking. If it detects any changes an
appropriate callback will be called.
Returns 1
if a change was detected and 0
(zero)
otherwise.
Any callbacks will be called from the same thread as the one
calling check_monitor()
.
The return value can not be trusted to return 1
for all
detected changes in recursive mode.
check()
, data_changed()
, attr_changed()
, file_created()
,
file_deleted()
, stable_data_change()
void
clear()
Clear the set of monitored files and directories.
Due to circular datastructures, it's recomended to call this function prior to discarding the object.
Filesystem.Monitor.basic Filesystem.Monitor.basic(
int
|void
max_dir_check_interval
, int
|void
file_interval_factor
, int
|void
stable_time
)
Create a new monitor.
max_dir_check_interval
Override of default_max_dir_check_interval
.
file_interval_factor
Override of default_file_interval_factor
.
stable_time
Override of default_stable_time
.
void
data_changed(string
path
)
File content changed callback.
path
Path of the file which has had content changed.
This function is called when a change has been detected for a monitored file.
Called by check()
and check_monitor()
.
Overload this to do something useful.
void
file_created(string
path
, Stdio.Stat
st
)
File creation callback.
path
Path of the new file or directory.
st
Status information for path
as obtained by file_stat(path, 1)
.
This function is called when either a monitored path has started existing, or when a new file or directory has been added to a monitored directory.
Called by check()
and check_monitor()
.
Overload this to do something useful.
This callback has similar semantics to file_exists()
, but
is called at run time.
file_exists()
, file_deleted()
, stable_data_change()
void
file_deleted(string
path
)
File deletion callback.
path
Path of the new file or directory that has been deleted.
This function is called when either a monitored path has stopped to exist, or when a file or directory has been deleted from a monitored directory.
Called by check()
and check_monitor()
.
Overload this to do something useful.
file_created()
, file_exists()
, stable_data_change()
void
file_exists(string
path
, Stdio.Stat
st
)
File existance callback.
path
Path of the file or directory.
st
Status information for path
as obtained by file_stat(path, 1)
.
This function is called during initialization for all monitored paths, and subpaths for monitored directories. It represents the initial state for the monitor.
For directories, file_exists()
will be called for the subpaths
before the call for the directory itself. This can be used to detect
when the initialization for a directory is finished.
Called by check()
and check_monitor()
the first time a monitored
path is checked (and only if it exists).
Overload this to do something useful.
This callback has similar semantics to file_created()
, but
is called at initialization time.
file_created()
, file_deleted()
, stable_data_change()
protected
void
inotify_event(int
wd
, int
event
, int
cookie
, string(8bit)
path
)
Event callback for Inotify.
bool
is_monitored(string
path
)
Check whether a path is monitored or not.
path
Path to check.
Returns 1
if there is a monitor on path
,
and 0
(zero) otherwise.
monitor()
, release()
protected
void
low_eventstream_callback(string
path
, int
flags
, int
event_id
)
This function is called when the FSEvents EventStream detects a change in one of the monitored directories.
Monitor
|void
monitor(string
path
, MonitorFlags
|void
flags
, int(0..)
|void
max_dir_check_interval
, int(0..)
|void
file_interval_factor
, int(0..)
|void
stable_time
)
Register a path
for monitoring.
path
Path to monitor.
flags
| Don't recurse. |
| Monitor the entire subtree, and any directories or files that may appear later. |
| Monitor the entire subtree, and any directories
or files that may appear later. Remove the monitor
automatically when |
max_dir_check_interval
Override of default_max_dir_check_interval
for this path
or subtree.
file_interval_factor
Override of default_file_interval_factor
for this path
or subtree.
stable_time
Override of default_stable_time
for this path
or subtree.
release()
protected
DefaultMonitor
monitor_factory(string
path
, MonitorFlags
|void
flags
, int(0..)
|void
max_dir_check_interval
, int(0..)
|void
file_interval_factor
, int(0..)
|void
stable_time
)
Create a new Monitor
for a path
.
This function is called by monitor()
to create a new Monitor
object.
The default implementation just calls DefaultMonitor
with the
same arguments.
monitor()
, DefaultMonitor
void
release(string
path
, MonitorFlags
|void
flags
)
Release a path
from monitoring.
path
Path to stop monitoring.
flags
| Don't recurse. |
| Release the entire subtree. |
| Release the entire subtree, but only those paths that were added automatically by a recursive monitor. |
monitor()
protected
void
release_monitor(Monitor
m
)
Release a single Monitor
from monitoring.
release()
protected
void
report(SeverityLevel
level
, string(7bit)
fun
, sprintf_format
format
, sprintf_args
... args
)
Event tracing callback.
level
Severity level of the event.
fun
Name of the function that called report()
.
format
sprintf()
formatting string describing the event.
args
Optional extra arguments for the format
string.
This function is called in various places to provide granular tracing of the monitor state.
The default implementation calls werror()
with
format
and args
if level
is ERROR
or higher,
or if FILESYSTEM_MONITOR_DEBUG has been defined.
protected
void
reschedule_backend_check(int
|void
suggested_t
)
Reschedule beckend check.
suggested_t
Suggested time in seconds until next call of check()
.
Register suitable callbacks with the backend to automatically
call check()
.
check()
and thus all the callbacks will be called from the
backend thread.
void
set_backend(Pike.Backend
|void
backend
)
Change backend.
backend
Backend to use. 0
(zero) for the default backend.
void
set_blocking()
Turn off nonblocking mode.
set_nonblocking()
void
set_file_interval_factor(int
file_interval_factor
)
Set the file_interval_factor
.
void
set_max_dir_check_interval(int
max_dir_check_interval
)
Set the max_dir_check_interval
.
void
set_nonblocking(int
|void
suggested_t
)
Turn on nonblocking mode.
suggested_t
Suggested time in seconds until next call of check()
.
Register suitable callbacks with the backend to automatically
call check()
.
check()
and thus all the callbacks will be called from the
backend thread.
If nonblocking mode is already active, this function will be a noop.
set_blocking()
, check()
.
void
set_stable_time(int
stable_time
)
Set the stable_time
.
void
stable_data_change(string
path
, Stdio.Stat
st
)
Stable change callback.
path
Path of the file or directory that has stopped changing.
st
Status information for path
as obtained by file_stat(path, 1)
.
This function is called when previous changes to path
are
considered "stable".
"Stable" in this case means that there have been no detected
changes for at lease stable_time
seconds.
Called by check()
and check_monitor()
.
Overload this to do something useful.
This callback being called does not mean that the contents
or inode has changed, just that they don't seem to change any
more. In particular it is called for paths found during
initialization after stable_time
seconds have passed.
file_created()
, file_exists()
, file_deleted()
Flags for Monitor
s.
constant
Filesystem.Monitor.basic.MF_RECURSE
constant
Filesystem.Monitor.basic.MF_AUTO
constant
Filesystem.Monitor.basic.MF_INITED
constant
Filesystem.Monitor.basic.MF_HARD
This symbol evaluates to the Monitor
class used by
the default implementation of monitor_factory()
.
It is currently one of the values Monitor
, EventStreamMonitor
or InotifyMonitor
.
monitor_factory()
inherit Monitor : Monitor
FSEvents EventStream-accelerated Monitor
.
inherit Monitor : Monitor
Inotify-accelerated Monitor
.
inherit Monitor : Monitor
Monitoring information for a single filesystem path.
monitor()
inherit ADT.Heap.Element(<
Monitor
>) : Element
string
Filesystem.Monitor.basic.Monitor.path
MonitorFlags
Filesystem.Monitor.basic.Monitor.flags
int
Filesystem.Monitor.basic.Monitor.max_dir_check_interval
int
Filesystem.Monitor.basic.Monitor.file_interval_factor
int
Filesystem.Monitor.basic.Monitor.stable_time
protected
local
void
__create__(string
path
, MonitorFlags
flags
, int
max_dir_check_interval
, int
file_interval_factor
, int
stable_time
)
protected
void
attr_changed(string
path
, Stdio.Stat
st
)
File attribute or content changed callback.
st
Status information for path
as obtained by
file_stat(path, 1)
.
This function is called when a change has been detected for an attribute for a monitored file or directory.
Called by check()
and check_monitor()
.
The default implementation calls global::attr_changed()
or
global::data_changed()
depending on the state.
If there is a data_changed()
callback, it may supersede this
callback if the file content also has changed.
void
bump(MonitorFlags
|void
flags
, int
|void
seconds
)
Bump the monitor to an earlier scan time.
flags
| Don't recurse. |
| Check all monitors for the entire subtree. |
seconds
Number of seconds from now to run next scan. Defaults to half of the remaining interval.
protected
void
call_callback(function
(string
, Stdio.Stat
|void
:void
) cb
, string
path
, Stdio.Stat
|void
st
)
Call a notification callback.
cb
Callback to call or UNDEFINED
for no operation.
path
Path to notify on.
st
Stat for the path
.
bool
check(MonitorFlags
|void
flags
)
Check for changes.
flags
| Don't recurse. |
| Check all monitors for the entire subtree rooted in |
This function is called by check()
for the Monitor
s
it considers need checking. If it detects any changes an
appropriate callback will be called.
Returns 1
if a change was detected and 0
(zero)
otherwise.
Any callbacks will be called from the same thread as the one
calling check_monitor()
.
The return value can not be trusted to return 1
for all
detected changes in recursive mode.
check()
, data_changed()
, attr_changed()
, file_created()
,
file_deleted()
, stable_data_change()
void
check_for_release(int
mask
, int
flags
)
Check if this monitor should be removed automatically.
protected
void
file_created(string
path
, Stdio.Stat
st
)
File creation callback.
st
Status information for path
as obtained by
file_stat(path, 1)
.
This function is called when either a monitored path has started existing, or when a new file or directory has been added to a monitored directory.
Called by check()
and check_monitor()
.
The default implementation registers the path, and
calls global::file_deleted()
.
This callback has similar semantics to file_exists()
, but
is called at run time.
file_exists()
, file_deleted()
, stable_data_change()
protected
void
file_deleted(string
path
, Stdio.Stat
|void
old_st
)
File deletion callback.
path
Path of the new file or directory that has been deleted.
old_st
Stat for the file prior to deletion (if known). Note that this argument is not passed along to top level function.
This function is called when either a monitored path has stopped to exist, or when a file or directory has been deleted from a monitored directory.
Called by check()
and check_monitor()
.
The default implementation unregisters the path, and
calls global::file_deleted()
.
file_created()
, file_exists()
, stable_data_change()
protected
void
file_exists(string
path
, Stdio.Stat
st
)
File existance callback.
st
Status information for path
as obtained by
file_stat(path, 1)
.
This function is called during initialization for all monitored paths, and subpaths for monitored directories. It represents the initial state for the monitor.
For directories, file_created()
will be called for the subpaths
before the call for the directory itself. This can be used to detect
when the initialization for a directory is finished.
Called by check()
and check_monitor()
the first time a monitored
path is checked (and only if it exists).
The default implementation registers the path, and
calls global::file_exists()
.
This callback has similar semantics to file_created()
, but
is called at initialization time.
file_created()
, file_deleted()
, stable_data_change()
protected
void
monitor(string
path
, int
flags
, int
max_dir_interval
, int
file_interval_factor
, int
stable_time
)
Called to create a sub monitor.
this_program
parent()
Returns the parent monitor, or UNDEFINED if no such monitor exists.
protected
void
register_path(int
|void
initial
)
Register the Monitor
with the monitoring system.
initial
Indicates that the Monitor
is newly created.
protected
void
report(SeverityLevel
level
, string(7bit)
fun
, sprintf_format
format
, sprintf_args
... args
)
Event tracing callback.
level
Severity level of the event.
fun
Name of the function that called report()
.
format
sprintf()
formatting string describing the event.
args
Optional extra arguments for the format
string.
This function is called in various places to provide granular tracing of the monitor state.
The default implementation just calls global::report()
with the same arguments.
protected
void
stable_data_change(string
path
, Stdio.Stat
st
)
Stable change callback.
st
Status information for path
as obtained by
file_stat(path, 1)
.
This function is called when previous changes to path
are
considered "stable".
"Stable" in this case means that there have been no detected
changes for at lease stable_time
seconds.
Called by check()
and check_monitor()
.
The default implementation calls global::stable_data_change()
.
This callback being called does not mean that the contents
or inode has changed, just that they don't seem to change any
more. In particular it is called for paths found during
initialization after stable_time
seconds have passed.
file_created()
, file_exists()
, file_deleted()
protected
bool
status_change(Stdio.Stat
old_st
, Stdio.Stat
st
, int
orig_flags
, int
flags
)
Called when the status has changed for an existing file.
void
submonitor_released(this_program
submon
)
To be called when a (direct) submonitor is released.
protected
void
unregister_path(int
|void
dying
)
Unregister the Monitor
from the monitoring system.
dying
Indicates that the Monitor
is being destructed.
It is the destruction cause value offset by one.
protected
void
update(Stdio.Stat
st
)
Calculate and set a suitable time for the next poll of this monitor.
st
New stat for the monitor.
This function is called by check()
to schedule the
next check.
Debugging filesystem monitor.
This module behaves as symlinks
, but has default implementations
of all callbacks that call report()
, as well as an implementation
of [report()] that logs everything to Stdio.stderr
.
Filesystem.Monitor.basic
, Filesystem.Monitor.symlinks
inherit "symlinks.pike" : "symlinks.pike"
mapping
(string
:Monitor
) get_monitors()
Return the set of active monitors.
Filesystem monitor with support for symbolic links.
This module extends Filesystem.Monitor.basic
with
support for symbolic links.
For operating systems where symbolic links aren't supported,
this module will behave exactly like Filesystem.Monitor.basic
.
Filesystem.Monitor.basic
inherit Filesystem.Monitor.basic : basic
protected
int
Filesystem.Monitor.symlinks.available_ids
Bitmask of all unallocated symlink ids.
protected
mapping
(string
:int
) Filesystem.Monitor.symlinks.symlink_ids
Mapping from symlink name to symlink id.
protected
mapping
(string
:string
) Filesystem.Monitor.symlinks.symlink_targets
Mapping from symlink name to symlink target.
protected
int
allocate_symlink(string
sym
)
Allocates a symlink id for the link sym
.
void
attr_changed(string
path
, Stdio.Stat
st
)
File attribute changed callback.
path
Path of the file or directory which has changed attributes.
st
Status information for path
as obtained by file_stat(path)
.
This function is called when a change has been detected for an attribute for a monitored file or directory.
Called by check()
and check_monitor()
.
If there is a data_changed()
callback, it may supersede this
callback if the file content also has changed.
It differs from the Filesystem.Monitor.basic
version in that
symbolic links have the st
of their targets.
Overload this to do something useful.
void
file_created(string
path
, Stdio.Stat
st
)
File creation callback.
path
Path of the new file or directory.
st
Status information for path
as obtained by file_stat(path)
.
This function is called when either a monitored path has started existing, or when a new file or directory has been added to a monitored directory.
It differs from the Filesystem.Monitor.basic
version in that
symbolic links have the st
of their targets.
Called by check()
and check_monitor()
.
Overload this to do something useful.
void
file_exists(string
path
, Stdio.Stat
st
)
File existance callback.
path
Path of the file or directory.
st
Status information for path
as obtained by file_stat(path)
.
This function is called during initialization for all monitored paths, and subpaths for monitored directories. It represents the initial state for the monitor.
For directories, file_created()
will be called for the subpaths
before the call for the directory itself. This can be used to detect
when the initialization for a directory is finished.
It differs from the Filesystem.Monitor.basic
version in that
symbolic links have the st
of their targets.
Called by check()
and check_monitor()
the first time a monitored
path is checked (and only if it exists).
Overload this to do something useful.
void
stable_data_change(string
path
, Stdio.Stat
st
)
Stable change callback.
path
Path of the file or directory that has stopped changing.
st
Status information for path
as obtained by file_stat(path)
.
This function is called when previous changes to path
are
considered "stable".
"Stable" in this case means that there have been no detected
changes for at lease stable_time
seconds.
It differs from the Filesystem.Monitor.basic
version in that
symbolic links have the st
of their targets.
Called by check()
and check_monitor()
.
Overload this to do something useful.
Monitoring information for a single filesystem path.
With support for expansion of symbolic links.
monitor()
inherit basic::DefaultMonitor : DefaultMonitor
Based on Filesystem.Monitor.basic.DefaultMonitor
.
int
Filesystem.Monitor.symlinks.DefaultMonitor.symlinks
Mask of symlink ids that can reach this monitor.
protected
void
attr_changed(string
path
, Stdio.Stat
st
)
File attribute or content changed callback.
st
Status information for path
as obtained by
file_stat(path, 1)
.
This function is called when a change has been detected for an attribute for a monitored file or directory.
Called by check()
and check_monitor()
.
If there is a data_changed()
callback, it may supersede this
callback if the file content also has changed.
protected
void
call_callback(function
(string
, __unknown__
... :void
) cb
, string
path
, Stdio.Stat
|void
st
)
Call a notification callback and handle symlink expansion.
cb
Callback to call or UNDEFINED
for no operation.
extras
Extra arguments after the path
argument to cb
.
void
check_for_release(int
mask
, int
flags
)
Check if this monitor should be removed automatically.
protected
void
check_symlink(string
path
, Stdio.Stat
|zero
st
, int
|void
inhibit_notify
)
Check whether a symlink has changed.
protected
void
file_created(string
path
, Stdio.Stat
st
)
File creation callback.
st
Status information for path
as obtained by
file_stat(path, 1)
.
This function is called when either a monitored path has started existing, or when a new file or directory has been added to a monitored directory.
Called by check()
and check_monitor()
.
protected
void
file_deleted(string
path
, Stdio.Stat
old_st
)
File deletion callback.
path
Path of the new file or directory that has been deleted.
This function is called when either a monitored path has stopped to exist, or when a file or directory has been deleted from a monitored directory.
Called by check()
and check_monitor()
.
protected
void
file_exists(string
path
, Stdio.Stat
st
)
File existance callback.
st
Status information for path
as obtained by
file_stat(path, 1)
.
This function is called during initialization for all monitored paths, and subpaths for monitored directories. It represents the initial state for the monitor.
For directories, file_created()
will be called for the subpaths
before the call for the directory itself. This can be used to detect
when the initialization for a directory is finished.
Called by check()
and check_monitor()
the first time a monitored
path is checked (and only if it exists).
void
low_call_callback(function
(string
, __unknown__
... :void
) cb
, mapping
(string
:int
) state
, mapping
(string
:string
) symlink_targets
, string
path
, Stdio.Stat
|void
st
, string
|void
symlink
)
Call a notification callback and handle symlink expansion.
cb
Callback to call or UNDEFINED
for no operation.
state
State mapping to avoid multiple notification and infinite loops. Call with an empty mapping.
symlinks
Symlinks that have not been expanded yet.
path
Path to notify on.
extras
Extra arguments to cb
.
symlink
Symbolic link that must have been followed for the callback to be called.
protected
void
monitor(string
path
, int
flags
, int
max_dir_interval
, int
file_interval_factor
, int
stable_time
)
Called to create a sub monitor.
protected
void
stable_data_change(string
path
, Stdio.Stat
st
)
Stable change callback.
st
Status information for path
as obtained by
file_stat(path, 1)
.
This function is called when previous changes to path
are
considered "stable".
"Stable" in this case means that there have been no detected
changes for at lease stable_time
seconds.
Called by check()
and check_monitor()
.
protected
bool
status_change(Stdio.Stat
old_st
, Stdio.Stat
st
, int
orig_flags
, int
flags
)
Called when the status has changed for an existing file.
protected
void
zap_symlink(string
path
)
Called when the symlink path
is no more.
Filesystem which can be used to mount a Tar file.
Two kinds of extended tar file records are supported:
| POSIX ustar (Version 0?). |
| GNU tar (POSIX draft) |
For a quick start, you probably want to use `()()
.
`()()
constant
int
Filesystem.Tar.EXTRACT_CHOWN
Set owning user and group from the tar records.
constant
int
Filesystem.Tar.EXTRACT_ERR_ON_UNKNOWN
Throw an error if an entry of an unsupported type is encountered. This is ignored otherwise.
constant
int
Filesystem.Tar.EXTRACT_SKIP_EXT_MODE
Don't set set-user-ID, set-group-ID, or sticky bits from the tar records.
constant
int
Filesystem.Tar.EXTRACT_SKIP_MODE
Don't set any permission bits from the tar records.
constant
int
Filesystem.Tar.EXTRACT_SKIP_MTIME
Don't set mtime from the tar records.
Low-level Tar Filesystem.
void
extract(string
src_dir
, string
dest_dir
, void
|string
|function
(string
, Filesystem.Stat
:int
|string
) filter
, void
|int
flags
)
Extracts files from the tar file in sequential order.
src_dir
The root directory in the tar file system to extract.
dest_dir
The root directory in the real file system that will receive
the contents of src_dir
. It is assumed to exist and be
writable.
filter
A filter for the entries under src_dir
to extract. If it's
a string then it's taken as a glob pattern which is matched
against the path below src_dir
. That path always begins
with a /
. For directory entries it ends with a
/
too, otherwise not.
If it's a function then it's called for every entry under
src_dir
, and those where it returns nonzero are extracted.
The function receives the path part below src_dir
as the
first argument, which is the same as in the glob case above,
and the stat struct as the second. If the function returns a
string, it's taken as the path below dest_dir
where this
entry should be extracted (any missing directories are created
automatically).
If filter
is zero, then everything below src_dir
is
extracted.
flags
Bitfield of flags to control the extraction:
| Don't set any permission bits from the tar records. |
| Don't set set-user-ID, set-group-ID, or sticky bits from the tar records. |
| Don't set mtime from the tar records. |
| Set owning user and group from the tar records. |
| Throw an error if an entry of an unsupported type is encountered. This is ignored otherwise. |
Files and directories are supported on all platforms, and
symlinks are supported whereever symlink
exists. Other record
types are currently not supported.
I/O errors are thrown.
inherit Filesystem.System : System
void
chmod(string
filename
, int
|string
mode
)
Not implemented yet.
void
chown(string
filename
, int
|object
owner
, int
|object
group
)
Not implemented yet.
Filesystem.Tar._TarFS Filesystem.Tar._TarFS(
_Tar
_tar
, string
_wd
, string
_root
, Filesystem.Base
_parent
)
int
rm(string
filename
)
Not implemented yet.
inherit _TarFS : _TarFS
Filesystem.Tar.`() Filesystem.Tar.`()(
string
filename
, void
|Filesystem.Base
parent
, void
|object
file
)
filename
The tar file to mount.
parent
The parent filesystem. If none is given, the normal system filesystem is assumed. This allows mounting a TAR-file within a tarfile.
file
If specified, this should be an open file descriptor. This object
could e.g. be a Stdio.File
, Gz.File
or Bz2.File
object.
void
Filesystem.Zipcreate(string
filename
, void
|Filesystem.Base
parent
, void
|object
file
)
Filesystem which can be used to mount a ZIP file.
filename
The tar file to mount.
parent
The parent filesystem. If non is given, the normal system filesystem is assumed. This allows mounting a ZIP-file within a zipfile.
file
If specified, this should be an open file descriptor. This object
could e.g. be a Stdio.File
or similar object.
traditional Zip encryption is CRC32 based, and rather insecure. support here exists to ease transition and to work with legacy files.
string
decrypt(string
x
)
decrypt a string
x
encrypted string to decrypt
A class for reading and writing ZIP files.
Note that this class does not support the full ZIP format specification, but does support the most common features.
Storing, Deflating and Bzip2 (if the Bz2 module is available) are supported storage methods.
This class is able to extract data from traditional ZIP password encrypted archives.
Notably, advanced PKware encryption (beyond reading traditional password protected archives) and multi-part archives are not currently supported.
void
add_dir(string
path
, int
recurse
, string
|void
archiveroot
)
adds a directory to an archive
void
add_file(string
filename
, string
|Stdio.File
|zero
data
, int
|object
|void
stamp
, int
|void
no_compress
)
add a file to an archive.
Filesystem.Zip._Zip Filesystem.Zip._Zip(
object
|void
fd
, string
|void
filename
, object
|void
parent
)
int
date_dos2unix(int
time
, int
date
)
Convert MS-DOS time/date pair to a linear UNIX date.
array
date_unix2dos(int
unix_date
)
Convert linear UNIX date to a MS-DOS time/date pair.
an array containing ({time, date})
string
generate()
generate the zip archive
int
is_zip64()
is this archive using zip64 extensions?
void
set_compression_value(int(0..9)
v
)
sets the compression value (0 to 9)
void
set_password(string
pw
)
sets the password to be used for files encrypted using traditional PKZip encryption.
void
set_zip64(int
flag
)
enable zip64 extensions (large files) for this archive
This setting may be used to force zip64 for files that do not otherwise require its use. If a file whose properties requires the use of zip65 is added to an archive, zip64 extensions will be enabled automatically.
void
unzip(string
todir
)
inherit Filesystem.System : System
void
set_password(string
pw
)
Fuse - Filesystem in USErspace
FUSE (Filesystem in USErspace) provides a simple interface for userspace programs to export a virtual filesystem to the Linux kernel. FUSE also aims to provide a secure method for non privileged users to create and mount their own filesystem implementations.
See http://sourceforge.net/projects/fuse/ for more information
This module maps the Fuse library more or less directly to pike.
In order to create a filesystem, create a subclass of the
Operations
class, clone it and pass it to the run
method.
You do not need to implemnent all functions, but at least getattr, readdir and read are needed to make a useable filesystem.
A tip: ERRNO constants are available in the System module, and if one is missing /usr/include/asm[-generic]/errno.h can be included in pike programs on Linux.
inherit "___Fuse" : "___Fuse"
constant
Fuse.FUSE_MAJOR_VERSION
constant
Fuse.FUSE_MINOR_VERSION
The version of FUSE
void
run(Operations
handler
, array
(string
) args
)
Start fuse. Args is as in argv in main(). This function will not return.
The first argument (argv[0], program name) is used as the filesystem name. The first non-flag argument after argv[0] is used as the mountpoint. Otherwise these arguments are supported:
-d enable debug output (implies -f) -f foreground operation -s disable multithreaded operation -r mount read only (equivalent to '-o ro') -o opt,[opt...] mount options -h print help
Mount options:
rootmode=M permissions of the '/' directory in the filesystem (octal) user_id=N user of '/' (numeric) group_id=N group of '/' (numeric) default_permissions enable permission checking By default FUSE doesn't check file access permissions, the filesystem is free to implement it's access policy or leave it to the underlying file access mechanism (e.g. in case of network filesystems). This option enables permission checking, restricting access based on file mode. It is usually useful together with the 'allow_other' mount option. allow_other allow access to other users This option overrides the security measure restricting file access to the user mounting the filesystem. This option is by default only allowed to root, but this restriction can be removed with a (userspace) configuration option (in fuse.ini). large_read issue large read requests (2.4 only) max_read=N set maximum size of read requests (default 128K) hard_remove immediate removal (don't hide files) debug enable debug output fsname=NAME set filesystem name in mtab (overrides argv[0])
This is the interface you have to implement to write a FUSE filesystem If something goes wrong in your callback, always return errno. Unless the function returns a specific value (Stat, string or similar), return 0 if all is well.
You do not have to implement all functions. Unimplemented functions have a default implementation that returns -ENOIMPL.
final
constantint
Fuse.Operations.DT_BLK
Block special directory entry
final
constantint
Fuse.Operations.DT_CHR
Character special directory entry
final
constantint
Fuse.Operations.DT_DIR
Directory directory entry
final
constantint
Fuse.Operations.DT_FIFO
FIFO directory entry
final
constantint
Fuse.Operations.DT_LNK
Symlink directory entry
final
constantint
Fuse.Operations.DT_REG
Normal file directory entry
final
constantint
Fuse.Operations.DT_SOCK
Socket directory entry
final
constantint
Fuse.Operations.DT_UNKNOWN
Unkown directory entry type
Fuse.Operations.final
constantF_GETLK
Fuse.Operations.final
constantF_SETLK
Fuse.Operations.final
constantF_SETLKW
Fuse.Operations.final
constantF_RDLCK
Fuse.Operations.final
constantF_WRLCK
Fuse.Operations.final
constantF_UNLCK
lock() mode operations.
final
constantint
Fuse.Operations.O_ACCMODE
Mask for read/write/rdwr
final
constantint
Fuse.Operations.O_APPEND
Open for append
final
constantint
Fuse.Operations.O_RDONLY
Open read only
final
constantint
Fuse.Operations.O_RDWR
Open read/write only
final
constantint
Fuse.Operations.O_WRONLY
Open write only
int
access(string
path
, int
mode
)
Return if the user is allowed to access the path
. If the
'default_permissions' mount option is given, this method is not
called.
int
chmod(string
path
, int
mode
)
Change the permission of a file or directory
errno or 0
int
chown(string
path
, int
uid
, int
gid
)
Change the owner of a file or directory
errno or 0
int
creat(string
path
, int
mode
, int
flag
)
Create and open or just open the given path
int
flush(string
path
, int
flags
)
Write unwritten data.
int
fsync(string
path
, int
datasync
)
Flush data and user-data to disk. Not required.
If the datasync
parameter is non-zero, then only the user data
should be flushed, not the meta data.
Stdio.Stat
|int(1..)
getattr(string
path
)
Stat a file.
This function is required.
A Stdio.Stat
object or an errno.
string
getxattr(string
path
, string
name
)
Get the extended attribute name
on path
int
link(string
source
, string
destination
)
Create a hard link from source to destination.
errno or 0
array
(string
)|int
listxattr(string
path
)
Return a list of all available extended attributes on path
mapping
(string
:int
)|int
lock(string
path
, int
mode
, mapping
(string
:int
) how
)
Lock, unlock or test for the existence of record locks (POSIX
file locking). The owner of the lock is identified by how->owner
If you only need local file-locking on the computer the filesystem is mounted on you do not need to implement this interface. This is only needed for network filesystems that want locking to work over the network.
The operation mode depends on the mode argument.
F_SETLK
Acquire a lock (when how->type
is F_RDLCK
or F_WRLCK
) or
release a lock (when how->type
is F_UNLCK
) on the bytes
specified by the how->whence, how->start, and how->len fields
of lock. If a conflicting lock is held by another process,
you should return EACCES or EAGAIN.
F_SETLKW
Identical to SETLK, but if a lock is held on the file, wait for it to be released before returning. You are allowed to return EINTR, to signal that the waiting has been interrupted and must be restarted.
F_GETLK
Identical to SETLK, but do not actually aquire the lock if it
can be aquired. If one or more incompatible locks would
prevent this lock being placed, then fcntl() returns details
about one of these locks in the type, whence, start, and len
fields of how
and set pid
to be the PID of the process
holding that lock. Then return the mapping.
int
mkdir(string
path
, int
mode
)
Create a directory.
errno or 0
int
mknod(string
path
, int
mode
, int
rdev
)
Create a node (file, device special, or named pipe). See man 2 mknod
errno or 0
int
open(string
path
, int
mode
)
Open path
. mode
is as for the system call open.
(mode & O_ACCMODE) is one of O_RDONLY, O_WRONLY and O_RDWR.
The mode can also contain other flags, most notably O_APPEND.
You do not really have to implement this function. It's useful to start prefetch and to cache open files, and check that the user has permission to read/write the file.
errno or 0
string
|int(1..)
read(string
path
, int
len
, int
offset
)
Read data from a file. You have to return at most len
bytes, wunless an error occurs, or there is less than len bytes
of data still left to read.
errno or the data
int
readdir(string
path
, function
(string
:void
) callback
)
Get directory contents.
Call the callback once per file in the directory with the filename as the argument.
This function is required.
errno or 0
string
|int(1..)
readlink(string
path
)
Read a symlink.
The symlink contents or errno
int
release(string
path
)
The inverse of open.
The file might very well be openend multiple times. Keep reference counts.
int
removexattr(string
path
, string
name
)
Remove the extended attribute name
from path
int
rename(string
source
, string
destination
)
Rename source
to destination
.
errno or 0
int
rmdir(string
path
)
Remove a directory
errno or 0
int
setxattr(string
path
, string
name
, string
value
, int
flags
)
Set the extended attrbiute name
on path
to value
mapping
(string
:int
) statfs(string
path
)
Stat a filesystem.
Mapping as from filesystem_stat
required for 'df' support, without this function there is an error each time 'df' is run.
int
symlink(string
source
, string
destination
)
Create a symlink from source to destination.
errno or 0
int
truncate(string
path
, int
new_length
)
Shrink or enlarge a file
errno or 0
int
unlink(string
path
)
Remove a file
errno or 0
int
utime(string
path
, int
atime
, int
mtime
)
Set access and modification time. The arguments are the number of seconds since jan 1 1970 00:00.
This function is deprecated, utimens is the recommended method.
errno or 0
int
utimens(string
path
, int
atime
, int
mtime
)
Set access and modification time, with nanosecond resolution. The arguments are the number of nanoseconds since jan 1 1970 00:00.
errno or 0
int
write(string
path
, string
data
, int
offset
)
Write data to the file. Should write all data.
errno or amount written (bytes)
This class contains a geographical position, ie a point on the earths surface. The resulting position object implements comparision methods (__hash, `==, `< and `>) so that you can compare and sort positions as well as using them as index in mappings. Comparision is made primary on latidue and secondly on longitude. It does not currently take the ellipsoid into account.
It is possible to cast a position into an array, which will yield ({ float latitude, float longitude }), as well as into a string.
constant
Geography.Position.ellipsoids
A mapping with reference ellipsoids, which can be fed to the UTM converter. The mapping maps the name of the ellipsoid to an array where the first element is a float describing the equatorial radius and the second element is a float describing the polar radius.
float
Geography.Position.alt
Altitud of the position, in meters. Positive numbers is up. Zero is the shell of the current ellipsoid.
float
Geography.Position.equatorial_radius
The equatorial radius is how many meters the earth radius is at the equator (east-west direction).
float
Geography.Position.lat
Latitude (N--S) of the position, in degrees. Positive number is north, negative number is south.
float
Geography.Position.long
Longitude (W--E) of the position, in degrees. Positive number is east, negative number is west.
float
Geography.Position.polar_radius
The polar radius is how many meters the earth radius is at the poles (north-south direction).
array
(float
) ECEF()
Returns the current position as Earth Centered Earth Fixed Cartesian Coordinates.
({ X, Y, Z })
string
GEOREF()
Gives the full GEOREF position for the current position, e.g. "LDJA0511".
array
(float
) RT38()
string
UTM(int
precision
)
Returns the current UTM coordinates position. An example output is "32T 442063.562 5247479.500" where the parts are zone number + zone designator, easting and northing.
array
(float
) UTM_offset()
Returns the offset within the present UTM cell. The result will be returned in an array of floats, containing easting and northing.
string
UTM_zone_designator()
Returns the UTM letter designator for the current latitude. Returns "Z" if latitude is outside the UTM limits of 84N to 80S.
int
UTM_zone_number()
Returns the UTM zone number for the current longitude, with correction for the Svalbard deviations.
int
hash_value( Geography.Position arg )
string sprintf(string format, ... Geography.Position arg ... )
int
res = Geography.Position()
< pos
int
res = Geography.Position()
== pos
int
res = Geography.Position()
> pos
float
approx_height()
Returns a very crude approximation of where the ground level is at the current position, compared against the ellipsoid shell. WGS-84 is assumed, but the approximation is so bad that it doesn't matter which of the standard ellipsoids is used.
Geography.Position Geography.Position(
int
|float
lat
, int
|float
long
, void
|int
|float
alt
)
Geography.Position Geography.Position(
string
lat
, string
long
)
Geography.Position Geography.Position(
string
position
)
Geography.Position Geography.Position()
Constructor for this class. If fed with strings, it will perform a dwim scan on the strings. If they fails to be understood, there will be an exception.
float
eccentricity_squared()
Returns the first eccentricity squared for the selected earth approximation ellipsoid.
float
euclidian_distance(this_program
p
)
Calculate the euclidian distance between two Geography.Position. Result is in meter. This uses the ECEF function.
float
flattening()
Returns the flattening factor for the selected earth approximation ellipsoid.
string
latitude(void
|int
n
)
string
longitude(void
|int
n
)
Returns the nicely formatted latitude or longitude.
| "17°42.19'N" / "42°22.2'W" |
| "17.703°N" / "42.37°W" |
| "17°42.18'N" / "42°22.2'W" |
| "17°42'10.4"N" / "42°22'12"W" |
| "17.703" / "-42.37" |
bool
set_ellipsoid(string
name
)
bool
set_ellipsoid(float
equatorial_radius
, float
polar_radius
)
Sets the equatorial and polar radius to the provided values. A name can also be provided, in which case the radius will be looked up in the ellipsoid mapping. The function returns 1 upon success, 0 on failure.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
The longitude and lattitude are not converted to the new ellipsoid.
void
set_from_RT38(int
|float
|string
x_n
, int
|float
|string
y_e
)
Sets the longitude and lattitude from the given RT38 coordinates.
void
set_from_UTM(int
zone_number
, string
zone_designator
, float
UTME
, float
UTMN
)
Sets the longitude and lattitude from the given UTM coordinates.
string
standard_grid()
Returns the standard map grid system for the current position. Can either be "UPS" or "UTM".
Create a Position object from a RT38 coordinate
inherit .Position : Position
array
(Country
) Geography.Countries.countries
All known countries.
mixed
`[](string
what
)
mixed
`->(string
what
)
Convenience functions for getting a country the name-space way; it looks up whatever it is in the name- and domain-space and returns that country if possible:
> Geography.Countries.se;
Result: Country(Sweden)
> Geography.Countries.djibouti;
Result: Country(Djibouti)
> Geography.Countries.com;
Result: Country(United States)
> Geography.Countries.wallis_and_futuna_islands->iso2;
Result: "WF"
mapping
(string
:array
(Country
)) continents()
Gives back a mapping from continent name to an array of the countries on that continent.
The continents are:
"Europe" "Africa" "Asia" "North America" "South America" "Oceania" "Antarctica"
Some countries are considered to be on more than one continent.
Country
from_domain(string
domain
)
Look up a country from a domain name. Returns zero if the domain doesn't map to a country. Note that there are some valid domains that don't:
International
US Military
Network
Non-Profit Organization
Old style Arpanet
Nato field
And that US has five domains, Great Britain and france two: <dl compact> <dt>EDU <dd>US Educational <dt>MIL <dd>US Military <dt>GOV <dd>US Government <dt>UM <dd>US Minor Outlying Islands <dt>US <dd>US <dt>GB <dd>Great Britain (UK) <dt>UK <dd>United Kingdom <dt>FR <dd>France <dt>FX <dd>France, Metropolitan <dt>There's also three domains that for convinience maps to US: <dt>NET <dd>Network <dt>ORG <dd>Organization <dt>COM <dd>Commercial </dl>
Country
from_domain(string
name
)
Look up a country from its name or aka. The search is case-insensitive but regards whitespace and interpunctation.
Country
string
Geography.Countries.Country.name
array
(string
) Geography.Countries.Country.aka
Country name and also-known-as, if any
string
|zero
Geography.Countries.Country.fips10
FIPS 10-character code; "Federal Information Processing Standards 10-4" etc, previously used by some goverments in the US.
This character code is slightly different from iso2
,
and should only be used for compatibility with old code.
Replaced by iso2
.
FIPS 10-4 was withdrawn by NIST 2008-09-02.
int
Geography.Countries.Country.former
Flag that is set if this country doesn't exist anymore. (eg USSR.)
string
|zero
Geography.Countries.Country.iso2
ISO-3166-1 2-character code aka domain name.
May be zero in some obscure cases where the ISO-3166-1 grouping differs from the FIPS-10 grouping.
(
string
)Geography.Countries.Country()
It is possible to cast a country to a string,
which will be the same as performing
country->name;
.
string
continent()
Returns the continent of the country.
Some countries are geographically in more then one continent; any of the continents might be returned then, but probably the continent in which the capital is resident - Europe for Russia, for instance.
void
parse_77(string
line
, object
tree
)
Parsing function for geoip databases in the format used my http://software77.net/.
void
parse_maxmind(string
line
, object
tree
)
Parsing function for geoip databases in the format used my http://www.maxmind.com/.
Base class for GeoIP lookups. Use Geography.GeoIP.IPv4
.
mixed
from_ip(string
ip
)
Returns the geographical location of the given ip address ip
.
When this object has been created using one of the standard parsing
functions the locations are instances of
Geography.Countries.Country
.
Class for GeoIP lookups of ipv4 addresses.
Uses ADT.CritBit.IPv4Tree
objects internally to map IPv4 addresses to
a geographical region.
inherit IP : IP
Geography.GeoIP.IPv4 Geography.GeoIP.IPv4(
string
file_name
, function
(string
, ADT.CritBit.IPv4Tree
:void
) fun
)
Geography.GeoIP.IPv4 Geography.GeoIP.IPv4(
ADT.CritBit.IPv4Tree
tree
)
Objects of this class can either be created from a file
file_name
with an optional parsing function fun
.
When fun
is omitted, it defaults to
Geography.GeoIP.parse_maxmind
. fun
will be called for each line in
file_name
and the critbit tree to add the entry to.
Alternatively, an instance of ADT.CritBit.IPv4Tree
can be passed.
tree
is expected to map the first address of each range to
its geographical location.
Getopt
is a group of functions which can be used to find command
line options.
Command line options come in two flavors: long and short. The short ones consists of a dash followed by a character (-t), the long ones consist of two dashes followed by a string of text (--test). The short options can also be combined, which means that you can write -tda instead of -t -d -a.
Options can also require arguments, in which case they cannot be combined. To write an option with an argument you write -t argument or -targument or --test=argument.
constant
int
Getopt.HAS_ARG
Used with find_all_options()
to indicate that an option
requires an argument.
find_all_options()
constant
int
Getopt.MAY_HAVE_ARG
Used with find_all_options()
to indicate that an option
takes an optional argument.
find_all_options()
constant
int
Getopt.NO_ARG
Used with find_all_options()
to indicate that an option
does not take an argument.
find_all_options()
array
(array
) find_all_options(array
(string
|zero
) argv
, array
(array
(array
(string
)|string
|int
)) options
, void
|int(-1..1)
posix_me_harder
, void
|int
throw_errors
)
This function does the job of several calls to find_option()
.
The main advantage of this is that it allows it to handle the
POSIX_ME_HARDER environment variable better. When either
the argument posix_me_harder
or the environment variable
POSIX_ME_HARDER is true, no arguments will be parsed after
the first non-option on the command line.
argv
The should be the array of strings that was sent as the second
argument to your main()
function.
options
Each element in the array options
should be an array on the
following form:
Array | |
| Name is a tag used to identify the option in the output. |
| Type is one of |
| This is a string or an array of string of options that will be
looked for. Short and long options can be mixed, and short options
can be combined into one string. Note that you must include the
dashes so that |
| This is a string or an array of strings containing names of environment variables that can be used instead of the command line option. |
| This is the default value a |
Only the first three elements need to be included.
posix_me_harder
Don't scan for arguments after the first non-option.
throw_errors
If throw_errors
has been specified find_all_options()
will
throw errors on failure. If it has been left out, or is
0
(zero), it will instead print an error message on
Stdio.stderr
and exit the program with result code 1 on
failure.
The good news is that the output from this function is a lot simpler.
find_all_options()
returns an array where each element is an array on
this form:
Array | |
| Option identifier name from the input. |
| Value given. If no value was specified, and no default has been specified, the value will be 1. |
find_all_options()
modifies argv
.
Index 0
(zero) of argv
is not scanned for options,
since it is reserved for the program name.
Getopt.get_args()
, Getopt.find_option()
void
|string
|bool
find_option(array
(string
|zero
) argv
, array
(string
)|string
shortform
, array
(string
)|string
|void
longform
, array
(string
)|string
|void
envvars
, string
|bool
|void
def
, int
|void
throw_errors
)
This is a generic function to parse command line options of the type -f, --foo or --foo=bar.
argv
The first argument should be the array of strings that was sent as
the second argument to your main()
function.
shortform
The second is a string with the short form of your option. The short form must be only one character long. It can also be an array of strings, in which case any of the options in the array will be accepted.
longform
This is an alternative and maybe more readable way to give the
same option. If you give "foo"
as longform
your program
will accept --foo as argument. This argument can also be
an array of strings, in which case any of the options in the
array will be accepted.
envvars
This argument specifies an environment variable that can be used to specify the same option, to make it easier to customize program usage. It can also be an array of strings, in which case any of the mentioned variables in the array may be used.
def
This argument has two functions: It specifies if the option takes an
argument or not, and it informs find_option()
what to return if the
option is not present.
The value may be one of:
| The option does not require a value. |
| The option requires a value, and Note that a set option will always return a |
throw_errors
If throw_errors
has been specified find_option()
will
throw errors on failure. If it has been left out, or is
0
(zero), it will instead print an error message on
Stdio.stderr
and exit the program with result code 1 on
failure.
Returns the value the option has been set to if any.
If the option is present, but has not been set to anything
1
will be returned.
Otherwise if any of the environment variables specified in envvars
has
been set, that value will be returned.
If all else fails, def
will be returned.
If an option that requires an argument lacks an argument and
throw_errors
is set an error will be thrown.
find_option()
modifies argv
. Parsed options will be removed
from argv
. Elements of argv
that have been removed entirely will
be replaced with zeroes.
This function reads options even if they are written after the first non-option on the line.
Index 0
(zero) of argv
is not scanned for options,
since it is reserved for the program name.
Only the first ocurrance of an option will be parsed. To parse
multiple ocurrances, call find_option()
multiple times.
Getopt.get_args()
array
(string
) get_args(array
(string
|zero
) argv
, void
|int(-1..1)
posix_me_harder
, void
|int
throw_errors
)
This function returns the remaining command line arguments after
you have run find_option()
or find_all_options()
to find
all the options in the argument list. If there are any options
left not handled by find_option()
or find_all_options()
this function will fail.
If throw_errors
has been specified get_args()
will throw errors
on failure. If it has been left out, or is 0 (zero), it will
instead print an error message on Stdio.stderr
and exit the
program with result code 1 on failure.
On success a new argv
array without the parsed options is
returned.
Getopt.find_option()
, Getopt.find_all_options()
This is a module for interacting with the Git distributed version control system.
constant
int
Git.MODE_DIR
A subdirectory.
constant
int
Git.MODE_EXE
A normal, but executable file.
constant
int
Git.MODE_FILE
A normal (non-executable) file.
constant
int
Git.MODE_GITLINK
A gitlink (aka submodule reference).
constant
int
Git.MODE_SYMLINK
A symbolic link.
constant
string
Git.NULL_SHA1
The NULL SHA1.
string
Git.git_binary
The git binary to use.
Defaults to "git"
, but may be overridden
to select a different binary.
string
git(string
|zero
git_dir
, string
command
, string
... args
)
Run a git command, and get the output.
git_dir
Directory containing the Git repository. May be UNDEFINED
to specify the Git repository for the current directory.
command
Git subcommand to execute.
args
Arguemnts for command
.
Returns the output on stdout from running the command on success, and throws an error on failure.
try_git()
, low_git()
string
hash_blob(string
data
)
Hash algorithm for blobs that is compatible with git.
Process.Process
low_git(mapping
(string
:mixed
) options
, string
|zero
git_dir
, string
command
, string
... args
)
Start a git process.
options
Options for Process.Process()
.
git_dir
Directory containing the Git repository. May be UNDEFINED
to specify the Git repository for the current directory.
command
Git subcommand to execute.
args
Arguemnts for command
.
Returns the corresponding Process.Process
object.
git()
, try_git()
string
|zero
try_git(string
git_dir
, string
command
, string
... args
)
Attempt to run a git command and get its output.
git_dir
Directory containing the Git repository. May be UNDEFINED
to specify the Git repository for the current directory.
command
Git subcommand to execute.
args
Arguemnts for command
.
Returns the output on stdout from running the command
on success, and 0
(zero) on failure.
This is a convenience function, and there is no way to get
the specific cause for failures other than rerunning the
command with e.g. git()
.
git()
, low_git()
Framework for creating a command-stream suitable for git-fast-import.
void
blob(string
blob
, string
|void
marker
)
Upload data.
blob
Data to upload.
marker
Optional export marker for referring to the data.
void
cat_blob(string
dataref
)
Output a blob on the cat-blob-fd
.
dataref
Reference to the blob to output.
void
checkpoint()
Flush state to disk.
void
command(sprintf_format
cmd
, sprintf_args
... args
)
Send a raw command.
void
commit(string
ref
, string
|void
commit_marker
, string
|void
author_info
, string
committer_info
, string
message
, string
|void
... parents
)
Create a new commit on a branch.
ref
Reference to add the commit to.
Typically "refs/heads/"
followed by a branchname,
or "refs/notes/commits"
.
commit_marker
Optional export marker for referring to the new commit.
author_info
Optional author information. Defaults to committer_info
.
committer_info
Name, email and timestamp for the committer.
See format_author()
for details.
message
Commit message.
parents
The ordered set of parents for the commit.
Defaults to the current HEAD for ref
, if it exists,
and to the empty set otherwise.
The set of files for the commit defaults to the set
for the first of the parents
, and can be modified
with filemodify
, filedelete
, filecopy
, filerename
,
filedeleteall
and notemodify
.
Git.Export Git.Export()
Git.Export Git.Export(
Stdio.File
fd
)
Git.Export Git.Export(
string
git_dir
)
Create a new fast-import command-stream.
fd
File to write the command-stream to.
git_dir
Git directory to modify. If the directory doesn't exist, it will be created empty. A git-fast-import session will be started for the directory to receive the command-stream.
If neither fd
nor git_dir
has been specified, the
command stream will be output to Stdio.stdout
.
verbosity
The amount of verbosity on Stdio.stderr
for various commands.
int
done()
End the command-stream and wait for completion.
void
export(string
file_name
, string
|void
git_name
)
Convenience funtion for exporting a filesystem file or directory (recursively) to git.
file_name
Name of the file on disc.
git_name
Name of the file in git. Defaults to file_name
.
void
feature(string
feature
, string
|void
arg
)
Require that the backend for the stream supports a certian feature.
feature
Feature to require support for. Typically one of:
| Same as the corresponding command-line option. |
| |
| |
| |
| |
| |
| |
| Require the |
| |
| Require that the backend supports the |
| Require the stream to terminate with a |
void
filecopy(string
from
, string
to
)
Copy a file or directory.
void
filedelete(string
path
)
Delete a file.
void
filedeleteall()
Delete all files.
Used to start a commit from a clean slate.
void
filemodify(int
mode
, string
path
, string
|void
dataref
)
Create or modify a file.
mode
Mode for the file. See the MODE_* constants.
path
Path to the file relative to the repository root.
dataref
Reference to the data for the file. One of:
| A mark reference set by a prior |
| Left out, |
void
filerename(string
from
, string
to
)
Rename a file or directory.
void
ls(string
path
, string
|void
dataref
)
Output a file to the cat-blob-fd
.
path
Path to the file to output.
dataref
Marker, tag, commit or tree for the root. Defaults to the commit in progress.
void
notemodify(string
commit
, string
|void
dataref
)
Annotate a commit.
commit
Commit to annotate.
dataref
Reference to the data for the annotation. One of:
| A mark reference set by a prior |
| Left out, |
Note that this command is typically only used when
a commit on a ref under "refs/notes/"
is active.
void
option(string
option
)
Set backend options.
void
progress(string
message
)
Output a progress message.
message
Message to output.
Note that each line of the message will be prefixed
with "progress "
.
void
reset(string
ref
, string
|void
committish
)
Move a reference.
ref
Reference to move.
committish
Commit to reference.
This command can also be used to make light-weight tags.
tag
void
tag(string
name
, string
committish
, string
tagger_info
, string
message
)
Create an annotated tag referring to a specific commit.
name
Tag name. Note that it is automatically
prefixed with "refs/tags/"
.
committish
Commit to tag.
tagger_info
Name, email and timestamp for the tagger.
See format_author()
for details.
message
Message for the tag.
reset
GMP is a free library for arbitrary precision arithmetic, operating on signed integers, rational numbers, and floating point numbers. There is no practical limit to the precision except the ones implied by the available memory in the machine GMP runs on. http://www.swox.com/gmp/
constant
Gmp.version
The version of the current GMP library, e.g. "6.1.0"
.
Gmp.mpz
fac(int
x
)
Returns the factorial of x
(x
!).
This program is used by the internal auto-bignum conversion. It can be used to explicitly type integers that are too big to be INT_TYPE. Best is however to not use this program unless you really know what you are doing.
Due to the auto-bignum conversion, all integers can be treated as
Gmp.mpz
objects insofar as that they can be indexed with the
functions in the Gmp.mpz
class. For instance, to calculate the
greatest common divisor between 51
and 85
, you can
do 51->gcd(85)
. In other words, all the functions in
Gmp.mpz
are also available here.
GMP floating point number.
The mantissa of each float has a user-selectable precision, limited only by available memory. Each variable has its own precision, and that can be increased or decreased at any time.
The exponent of each float is a fixed precision, one machine word on most systems. In the current implementation the exponent is a count of limbs, so for example on a 32-bit system this means a range of roughly 2^-68719476768 to 2^68719476736, or on a 64-bit system this will be greater.
Each variable keeps a size for the mantissa data actually in use. This means that if a float is exactly represented in only a few bits then only those bits will be used in a calculation, even if the selected precision is high.
All calculations are performed to the precision of the destination variable. Each function is defined to calculate with "infinite precision" followed by a truncation to the destination precision, but of course the work done is only what's needed to determine a result under that definition.
The precision selected for a variable is a minimum value, GMP may increase it a little to facilitate efficient calculation. Currently this means rounding up to a whole limb, and then sometimes having a further partial limb, depending on the high limb of the mantissa. But applications shouldn't be concerned by such details.
The mantissa in stored in binary, as might be imagined from the fact precisions are expressed in bits. One consequence of this is that decimal fractions like 0.1 cannot be represented exactly. The same is true of plain IEEE double floats. This makes both highly unsuitable for calculations involving money or other values that should be exact decimal fractions. (Suitably scaled integers, or perhaps rationals, are better choices.)
mpf functions and variables have no special notion of infinity or not-a-number, and applications must take care not to overflow the exponent or results will be unpredictable. This might change in a future release.
Note that the mpf functions are not intended as a smooth extension to IEEE P754 arithmetic. In particular results obtained on one computer often differ from the results on a computer with a different word size.
This class will use mpfr if available, in which case the precision will be exact and IEEE rules will be followed.
mpf
Gmp.mpf.catalan
mpf
Gmp.mpf.euler
mpf
Gmp.mpf.ln2
mpf
Gmp.mpf.pi
int
hash_value( Gmp.mpf arg )
bool
res = is_type(Gmp.mpf()
)
The Gmp.mpf object will claim to be a "float"
.
Perhaps it should also return true for "object"
?
string sprintf(string format, ... Gmp.mpf arg ... )
bool
res = !Gmp.mpf()
Gmp.mpf
res = Gmp.mpf()
* a
Gmp.mpf
res = Gmp.mpf()
+ a
Gmp.mpf()
+= a
Gmp.mpf
res = Gmp.mpf()
- a
Gmp.mpf
res = Gmp.mpf()
/ a
bool
res = Gmp.mpf()
< q
bool
res = Gmp.mpf()
== q
bool
res = Gmp.mpf()
> q
Gmp.mpf
res = a
* Gmp.mpf()
Gmp.mpf
res = a
+ Gmp.mpf()
Gmp.mpf
res = sv
- Gmp.mpf()
Gmp.mpf
res = sv
/ Gmp.mpf()
Gmp.mpf
res = ~Gmp.mpf()
(
string
)Gmp.mpf()
(int
)Gmp.mpf()
(float
)Gmp.mpf()
mpf
ceil()
Gmp.mpf Gmp.mpf(
void
|int
|string
|float
|object
x
, void
|int(0..)
precision
)
Gmp.mpf Gmp.mpf(
string
x
, int(0..)
precision
, int(2..36)
base
)
mpf
exp()
mpf
exp10()
mpf
exp2()
mpf
floor()
mpf
frac()
float
get_float()
Returns the value of the object as a float.
int
|object
get_int()
int(0..)
get_precision()
Returns the current precision, in bits.
string
get_string()
mpf
log()
mpf
log10()
mpf
log2()
mpf
res = pow([Gmp.mpf]a, b) or mpf
pow(int
|float
|Gmp.mpz
|Gmp.mpf
exp
)
mpf
rint()
mpf
round()
Gmp.mpf
set_precision(int(0..)
prec
)
Sets the precision of the current object to be at
least prec
bits. The precision is limited to 128Kb.
The current object will be returned.
int
sgn()
mpf
sqr()
mpf
res = sqrt([Gmp.mpf]a) or mpf
sqrt()
mpf
trunc()
Rational number stored in canonical form. The canonical from means that the denominator and the numerator have no common factors, and that the denominator is positive. Zero has the unique representation 0/1. All functions canonicalize their result.
int
hash_value( Gmp.mpq arg )
bool
res = is_type(Gmp.mpq()
)
string sprintf(string format, ... Gmp.mpq arg ... )
bool
res = !Gmp.mpq()
Gmp.mpq
res = Gmp.mpq()
% a
a%b = a - floor(a/b)*b
Gmp.mpq
res = Gmp.mpq()
* a
Gmp.mpq
res = Gmp.mpq()
+ a
Gmp.mpq()
+= a
Gmp.mpq
res = Gmp.mpq()
- a
Gmp.mpq
res = Gmp.mpq()
/ a
bool
res = Gmp.mpq()
< q
bool
res = Gmp.mpq()
== q
bool
res = Gmp.mpq()
> q
Gmp.mpq
res = a
% Gmp.mpq()
Gmp.mpq
res = a
* Gmp.mpq()
Gmp.mpq
res = a
+ Gmp.mpq()
Gmp.mpq
res = sv
- Gmp.mpq()
Gmp.mpq
res = sv
/ Gmp.mpq()
Gmp.mpq
res = ~Gmp.mpq()
Defined as -1-x
.
(
int
)Gmp.mpq()
(string
)Gmp.mpq()
(float
)Gmp.mpq()
Casting to a string returns the number in the decimal fraction
format, where both decimal point and quotient is included only
if required. I.e. it is the same as calling get_string
with 1
as argument.
Gmp.mpq Gmp.mpq(
void
|string
|int
|float
|Gmp.mpz
|Gmp.mpq
x
)
Gmp.mpq Gmp.mpq(
int
|Gmp.mpz
numerator
, int
|Gmp.mpz
denominator
)
Gmp.mpq Gmp.mpq(
string
x
, int
base
)
int
den()
Returns the denominator. It is always positive.
float
get_float()
int
get_int()
string
get_string(void
|int
decimal_fraction
)
If decimal_fraction
is zero or left out, the number is
returned as a string on the form "numerator/denominator"
,
where both parts are decimal integers. The numerator may be
negative, but the denominator is always positive.
If decimal_fraction
is set, then the number is returned as a
(possibly negative) decimal fraction, i.e. a decimal number with
a decimal point somewhere inside. There is always at least one
digit before and after the decimal point.
If the number can be accurately described that way, i.e. without
an infinite number of decimals, then no denominator is included.
Otherwise the remaining denominator is added to the decimal
fraction after a "/". For example, 4711/100 is returned as
"47.11"
, 4711/200 as "23.555"
, and 4711/300 as
"47.11/3"
.
If decimal_fraction
is 1 then the decimal fraction contains a
'.' only if there are decimals in it. If it is 2 or higher then
the decimal fraction always contains a '.' with at least one
digit before and after it.
In any case, there are no unnecessary padding zeroes at the beginning or end of any decimal number.
Gmp.mpq
invert()
int
num()
Returns the numerator.
int(-1..1)
sgn()
Gmp.mpz implements very large integers. In fact, the only limitation on these integers is the available memory. The mpz object implements all the normal integer operations.
Note that the auto-bignum feature also makes these operations
available "in" normal integers. For instance, to calculate the
greatest common divisor between 51
and 85
, you can
do 51->gcd(85)
.
int
hash_value( Gmp.mpz arg )
Calculate a hash of the value.
Prior to Pike 7.8.359 this function returned the low 32-bits as an unsigned integer. This could in some common cases lead to very unbalanced mappings.
hash_value()
Gmp.mpz decode_value(string(8bit) data)
string(8bit) encode_value(Gmp.mpz data)
Gmp.mpz
random( Gmp.mpz arg )
string sprintf(string format, ... Gmp.mpz arg ... )
bool
res = !Gmp.mpz()
Gmp.mpz
res = Gmp.mpz()
% x
Gmp.mpz
res = Gmp.mpz()
& x
Gmp.mpz
res = Gmp.mpz()
* x
Gmp.mpz
res = Gmp.mpz()
+ x
Gmp.mpz
res = Gmp.mpz()
- x
Gmp.mpz
res = Gmp.mpz()
/ x
bool
res = Gmp.mpz()
< with
Gmp.mpz
res = Gmp.mpz()
<< x
bool
res = Gmp.mpz()
== with
bool
res = Gmp.mpz()
> with
Gmp.mpz
res = Gmp.mpz()
>> x
Gmp.mpz
res = Gmp.mpz()
^ x
Gmp.mpz
res = x
% Gmp.mpz()
Gmp.mpz
res = x
* Gmp.mpz()
Gmp.mpz
|Gmp.mpq
res = x
** Gmp.mpz()
Return x
raised to the value of this object. The case when zero is
raised to zero yields one. When this object has a negative value and
x
is not a float, a Gmp.mpq
object will be returned.
pow
Gmp.mpz
res = x
+ Gmp.mpz()
Gmp.mpz
res = x
- Gmp.mpz()
Gmp.mpz
res = x
/ Gmp.mpz()
Gmp.mpz
res = x
<< Gmp.mpz()
Gmp.mpz
res = x
>> Gmp.mpz()
Gmp.mpz
res = Gmp.mpz()
| x
Gmp.mpz
res = ~Gmp.mpz()
Gmp.mpz
bin(int
k
)
Return the binomial coefficient n
over k
, where
n
is the value of this mpz object. Negative values of
n
are supported using the identity
(-n)->bin(k) == (-1)->pow(k) * (n+k-1)->bin(k)
(See Knuth volume 1, section 1.2.6 part G.)
The k
value can't be arbitrarily large. An error is thrown if
it's too large.
(
string
)Gmp.mpz()
(int
)Gmp.mpz()
(float
)Gmp.mpz()
Cast this mpz object to another type. Allowed types are string, int and float.
Gmp.mpz Gmp.mpz()
Gmp.mpz Gmp.mpz(
string
|int
|float
|object
value
)
Gmp.mpz Gmp.mpz(
string
value
, int(2..62)
|int(256)
|int(-256)
base
)
Create and initialize a Gmp.mpz
object.
value
Initial value. If no value is specified, the object will be initialized to zero.
base
Base the value is specified in. The default base is base 10. The
base can be either a value in the range [2..36]
(inclusive), in which case the numbers are taken from the ASCII
range 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ
(case-insensitive), in the range [37..62] (inclusive), in
which case the ASCII range will be case sensitive, or either of
the values 256
or -256
, in which case value
is taken to be the unsigned binary representation in network
byte order or reversed byte order respectively.
Values in base [2..62] can be prefixed with "+"
or
"-"
. If no base is given, values prefixed with
"0b"
or "0B"
will be interpreted as binary.
Values prefixed with "0x"
or "0X"
will be
interpreted as hexadecimal. Values prefixed with "0"
will be interpreted as octal.
Leading zeroes in value
are not significant when a base is
explicitly given. In particular leading NUL characters are not
preserved in the base 256 modes.
Before GMP 5.0 only bases 2-36 and 256 were supported.
string
digits(void
|int(2..62)
|int(256)
|int(-256)
base
)
Convert this mpz object to a string. If a base
is given the
number will be represented in that base. Valid bases are 2-62 and
256
and -256
. The default base is 10.
The bases 37 to 62 are not available when compiled with GMP earlier than version 5.
cast
string
encode_json()
Gmp.mpz
fac()
Return the factorial of this mpz object.
Since factorials grow very quickly, only small integers are supported. An error is thrown if the value in this mpz object is too large.
Gmp.mpz
gcd(object
|int
|float
|string
... args
)
Return the greatest common divisor between this mpz object and all the arguments.
array
(Gmp.mpz
) gcdext(int
|float
|Gmp.mpz
x
)
Compute the greatest common divisor between this mpz object and
x
. An array ({g,s,t})
is returned where g
is
the greatest common divisor, and s
and t
are the
coefficients that satisfies
this * s + x * t = g
gcdext2
, gcd
array
(Gmp.mpz
) gcdext2(int
|float
|Gmp.mpz
x
)
Compute the greatest common divisor between this mpz object and
x
. An array ({g,s})
is returned where g
is the
greatest common divisor, and s
is a coefficient that
satisfies
this * s + x * t = g
where t
is some integer value.
gcdext
, gcd
int
hamdist(int
x
)
Calculates the hamming distance between this number and x
.
Gmp.mpz
invert(int
|float
|Gmp.mpz
x
)
Return the inverse of this mpz value modulo x
. The returned
value satisfies 0 <= result < x
.
An error is thrown if no inverse exists.
Gmp.mpz
next_prime()
Returns the next higher prime for positive numbers and the next lower for negative.
The prime number testing is using Donald Knuth's probabilistic primality test. The chance for a false positive is pow(0.25,25).
int
popcount()
For values >= 0, returns the population count (the number of set bits). For negative values (who have an infinite number of leading ones in a binary representation), -1 is returned.
Gmp.mpz
res = pow([Gmp.mpz]a, b) or Gmp.mpz
pow(int
|float
|Gmp.mpz
x
)
Return this mpz object raised to x
. The case when zero is
raised to zero yields one.
powm
Gmp.mpz
powm(int
|string
|float
|Gmp.mpz
exp
, int
|string
|float
|Gmp.mpz
mod
)
Return ( this->pow(
.exp
) ) % mod
pow
int(0..2)
probably_prime_p(void
|int
count
)
Return 2 if this mpz object is a prime, 1 if it probably is a prime, and 0 if it definitely is not a prime. Testing values below 1000000 will only return 2 or 0.
count
The prime number testing is using Donald Knuth's probabilistic primality test. The chance for a false positive is pow(0.25,count). Default value is 25 and resonable values are between 15 and 50.
int
sgn()
Return the sign of the integer, i.e. 1
for positive
numbers and -1
for negative numbers.
int(0..)
size(void
|int
base
)
Return how long this mpz would be represented in the specified
base
. The default base is 2.
int
small_factor(void
|int(1..)
limit
)
Gmp.mpz
res = sqrt([Gmp.mpz]a) or Gmp.mpz
sqrt()
Return the the truncated integer part of the square root of this mpz object.
array
(Gmp.mpz
) sqrtrem()
protected
inherit .create_pie : create_pie
Image.Image
pie(mapping
(string
:mixed
) diagram_data
)
Image.Image
bars(mapping
(string
:mixed
) diagram_data
)
Image.Image
sumbars(mapping
(string
:mixed
) diagram_data
)
Image.Image
line(mapping
(string
:mixed
) diagram_data
)
Image.Image
norm(mapping
(string
:mixed
) diagram_data
)
Image.Image
graph(mapping
(string
:mixed
) diagram_data
)
Generate a graph of the specified type. See check_mapping
for an explanation of diagram_data.
mapping
(string
:mixed
) check_mapping(mapping
(string
:mixed
) diagram_data
, string
type
)
This function sets all unset elements in diagram_data to its
default value as well as performing some simple sanity checks.
This function is called from within pie
, bars
, sumbars
,
line
, norm
and graph
.
diagram_data
| Default: "linear" Will be set to "2D" for pie below Only "linear" works for now. |
| Default: 0 If present a Pie-chart will be toned. |
| Default: 10 How much 3D-depth a graph will have in pixels Default is 10. |
| Default: ({({1.0}), ({2.0}), ({4.0})}) Will be set to something else with graph An array of arrays. Each array describing a data-set. The graph-function however should be fed with an array of arrays with X,Y-pairs. Example: ({({1.0, 2.0, 3.0}),({1.2, 2.2, 3.8})}) draws stuff in yellow with the values (1.0, 2.0, 3.0), and (1.2, 2.2, 3.8) in blue. |
| Default: 0 Should have four elements ({xquantity, yquantity, xunit, yunit}). The strings will be written on the axes. |
| Default: 0 An array(string) with the text that will be written under the X-axis. This should be the same size as sizeof(data). |
| Default: 0 An array(string) with the text that will be written to the left of the Y-axis. |
| Default: 10 The size of the text. Default is 10. |
| Default: 1.0 Width of the lines that draws data in Graph and line. Default is 1.0 |
| Default: same as fontsize The size of the text for labels. |
| Default: same as fontsize The size of the text for the legend. |
| Default: 0 The texts that will be written the legend. |
| Default: 0 An array(float) that describes where the ynames should be placed. The numbers are like the data-numbers. Default is equally distributed. |
| Default: 0 An array(float) that describes where the ynames should be placed. The numbers are like the data-numbers. Default is equally distributed. |
| Default: 100 X-size of the graph in pixels. |
| Default: 100 Y-size of the graph in pixels. |
| Default: 0 An image that the graph will be drawn on. |
| Default: 0 The color of the text in the legend. Default is? |
| Default: 0 I have no idea. |
| Default: 0 The bakground-color. If the the background is a image this color is used for antialias the texts. |
| Default: 0 Some sort of image... |
| Default: ({0,0,0}) The color of the axis. |
| Default: 0 An array of colors for the datasets. |
| Default: 0 An array of color that do something... |
| Default: ({0,0,0}) Color of the text. Default is black. |
| Default: 0 Color of the labeltexts. |
| Default: "hor" Can be "hor" or "vert". Orientation of the graph. |
| Default: 0 Width of lines (the axis and their like). |
| Default: 0 Width of the outline-lines. Default is 0. |
| Default: 0 If the vertical grid should be present. |
| Default: 0 If the horizontal grid should be present. |
| Default: 0 Width of the grid. Default is linewidth/4. |
| Default: 0 How much a the Pie in a Pie-shart should be rotated in degrees. |
| Default: 0 Makes the first Pie-slice be centered. |
| Default: 0 Draws the graph black and white. |
| Default: 0 Writes the numbers in eng format. |
| Default: 0 Writes the numbers in engformat except for 0.1 < x < 1.0 |
| Default: 0 Where the X-axis should start. This will be overrided by datavalues. |
| Default: 0 Where the Y-axis should start. This will be overridden by datavalues. |
| Default: 0 A string with the name of the graph that will be written at top of the graph. |
| Default: 0 The color of the name. |
| Default: Image.Font() The font that will be used. |
| Default: ({0,0,0} The color of the grid. Default is black. |
Graph sub-module for drawing bars.
inherit .create_graph : create_graph
Graph sub-module for drawing graphs.
create_graph
draws a graph but there are also some other functions
used by create_pie
and create_bars
.
inherit .polyline : polyline
Graph sub-module for drawing pie-charts.
inherit .create_bars : create_bars
Graph sub-module providing draw functions.
High performance webserver optimized for somewhat static content.
HTTPAccept is a less capable WWW-server than the
Protocols.HTTP.Server
server, but for some applications it can be
preferable. It is significantly more optimized, for most uses, and
can handle a very high number of requests per second on even
low end machines.
string
HTTPAccept.LogEntry.from
string
HTTPAccept.LogEntry.method
string
HTTPAccept.LogEntry.protocol
string
HTTPAccept.LogEntry.raw
int
HTTPAccept.LogEntry.received_bytes
int
HTTPAccept.LogEntry.reply
int
HTTPAccept.LogEntry.sent_bytes
int
HTTPAccept.LogEntry.time
string
HTTPAccept.LogEntry.url
mapping
(string
:int
) cache_status()
Returns information about the cache.
| The number of hits since start |
| The number of misses since start |
| The number of misses that were stale hits, and not used |
| The total current size |
| The number of entries in the cache |
| The maximum size of the cache |
| The number of bytes sent since the last call to cache_status |
| The number of bytes received since the last call to cache_status |
| The number of requests received since the last call to cache_status |
HTTPAccept.Loop HTTPAccept.Loop(
Stdio.Port
port
, RequestProgram
program
, function
(RequestProgram
:void
) request_handler
, int
cache_size
, bool
keep_log
, int
timeout
)
Create a new HTTPAccept
.
This will start a new thread that will listen for requests on the
port, parse them and pass on requests, instanced from the
program
class (which has to inherit RequestProgram
to the
request_handler
callback function.
cache_size
is the maximum size of the cache, in bytes.
keep_log
indicates if a log of all requests should be kept.
timeout
if non-zero indicates a maximum time the server will wait for requests.
array
(LogEntry
) log_as_array()
Return the current log as an array of LogEntry objects.
int
log_as_commonlog_to_file(Stdio.Stream
fd
)
Write the current log to the specified file in a somewhat common commonlog format.
Will return the number of bytes written.
int
log_size()
Returns the number of entries waiting to be logged.
bool
logp()
Returns true if logging is enabled
string
HTTPAccept.RequestProgram.client
The user agent
string
HTTPAccept.RequestProgram.data
Any payload that arrived with the request
mapping
(string
:array
(string
)) HTTPAccept.RequestProgram.headers
All received headers
string
HTTPAccept.RequestProgram.method
The method (GET, PUT etc)
Stdio.NonblockingStream
HTTPAccept.RequestProgram.my_fd
The filedescriptor for this request.
string
HTTPAccept.RequestProgram.not_query
The part of the URL before the first '?'.
multiset
(string
) HTTPAccept.RequestProgram.pragma
Tokenized pragma headers
string
HTTPAccept.RequestProgram.prot
The protocol part of the request. As an example "HTTP/1.1"
string
HTTPAccept.RequestProgram.query
The part of the URL after the first '?'
string
HTTPAccept.RequestProgram.raw
The full request
string
HTTPAccept.RequestProgram.raw_url
The raw URL received, the part after the method and before the protocol.
string
HTTPAccept.RequestProgram.referer
The referer header
string
HTTPAccept.RequestProgram.remoteaddr
The remote address
string
HTTPAccept.RequestProgram.rest_query
The part of the URL after the first '?' that does not seem to be query variables.
string
HTTPAccept.RequestProgram.since
The get-if-not-modified, if set.
int
HTTPAccept.RequestProgram.time
The time_t when the request arrived to the server
mapping
(string
:string
) HTTPAccept.RequestProgram.variables
Parsed query variables
void
output(string
data
)
Send data
directly to the remote side.
void
reply(string
data
)
void
reply(string
headers
, Stdio.File
fd
, int
len
)
void
reply(int(0)
ignore
, Stdio.File
fd
, int
len
)
Send a reply to the remote side.
In the first case the data
will be sent.
In the second case the headers
will be sent, then len
bytes from fd
.
In the last case len
bytes from fd
will be sent.
void
reply_with_cache(string
data
, int(1..)
stay_time
)
Send data
as the reply, and keep it as a cache entry to
requests to this URL for stay_time
seconds.
inherit "___Java" : "___Java"
object
Java.pkg
Singleton 'package' object.
Usage: object cls = Java.pkg.java.lang.String;
or: object cls = Java.pkg["java/lang/String"];
cls is a jclass object; call it to create a jobject, which will have all the methods of the Java class.
Example: Java.pkg.FooClass()->getResult();
jobject
JArray(array
a
)
jobject
JBoolean(int
i
)
jobject
JFloat(float
f
)
jobject
JHashMap(mapping
m
)
jobject
JInteger(int
i
)
jobject
JString(string
s
)
Interface to one Java class. Can be called to construct a jobject.
Obtained normally via Java.pkg.`[] and not created directly.
An instantiated Java object. Has methods for all the Java object's methods. Can be cast to string.
NOTE: Use indices(x) to get a list of the available methods.
Constructed from a jclass object.
PLIS, Permuted Lisp. A Lisp language somewhat similar to scheme.
Environment
default_environment()
Creates a new environment on which it runs init_functions, init_specials and the following boot code.
(begin
(defmacro (cddr x)
(list (quote cdr) (list (quote cdr) x)))
(defmacro (cadr x)
(list (quote car) (list (quote cdr) x)))
(defmacro (cdar x)
(list (quote cdr) (list (quote car) x)))
(defmacro (caar x)
(list (quote car) (list (quote car) x)))
(defmacro (when cond . body)
(list (quote if) cond
(cons (quote begin) body)))
(define (map fun list)
(if (null? list) (quote ())
(cons (fun (car list))
(map fun (cdr list)))))
(defmacro (let decl . body)
(cons (cons (quote lambda)
(cons (map car decl) body))
(map cadr decl))))
void
init_functions(Environment
environment
)
Adds the functions +, *, -, =, <, >,
concat, read-string, eval,
apply, global-environment, var, cdr, null?,
setcar!, setcdr!, cons and list to the
environment
.
void
init_specials(Environment
environment
)
Adds the special functions quote, set!, setq,
while, define, defmacro, lambda, if, and, or,
begin and catch to the environment
.
void
main()
Instantiates a copy of the default environment and starts an interactive main loop that connects to standard I/O. The main loop is as follows:
(begin
(define (loop)
(let ((line (read-line
object
Languages.PLIS.Binding.value
protected
local
void
__create__(object
value
)
Languages.PLIS.Binding Languages.PLIS.Binding(
object
value
)
inherit LObject : LObject
function
(:void
) Languages.PLIS.Builtin.apply
protected
local
void
__create__(function
(:void
) apply
)
Languages.PLIS.Builtin Languages.PLIS.Builtin(
function
(:void
) apply
)
inherit LObject : LObject
object
Languages.PLIS.Lambda.formals
object
Languages.PLIS.Lambda.list
protected
local
void
__create__(object
formals
, object
list
)
Languages.PLIS.Lambda Languages.PLIS.Lambda(
object
formals
, object
list
)
inherit SelfEvaluating : SelfEvaluating
int
|float
|object
Languages.PLIS.Number.value
protected
local
void
__create__(int
|float
|object
value
)
Languages.PLIS.Number Languages.PLIS.Number(
int
|float
|object
value
)
string
Languages.PLIS.Parser.buffer
protected
local
void
__create__(string
buffer
)
Languages.PLIS.Parser Languages.PLIS.Parser(
string
buffer
)
inherit LObject : LObject
string
Languages.PLIS.SelfEvaluating.name
protected
local
void
__create__(string
name
)
Languages.PLIS.SelfEvaluating Languages.PLIS.SelfEvaluating(
string
name
)
inherit SelfEvaluating : SelfEvaluating
string
Languages.PLIS.String.value
protected
local
void
__create__(string
value
)
Languages.PLIS.String Languages.PLIS.String(
string
value
)
Local
gives a local module namespace used for locally
installed pike modules.
Modules are searched for in the directory pike_modules which can be located in the user's home directory or profile directory, or in any of the system directories /opt/share, /usr/local/share, /opt or /usr/local/.
The user's home directory is determined by examining the environment variable HOME, and if that fails the environment variable USERPROFILE.
If the environment variable PIKE_LOCAL_PATH is set, the paths specified there will be searched first.
If the user has installed the pike module Mine.pmod in the directory $HOME/pike_modules. it can be accessed as Local.Mine.
Local.add_path()
, Local.remove_path()
inherit __joinnode : __joinnode
bool
add_path(string
path
)
This function prepends path
to the Local
module
searchpath.
path
The path to the directory to be added.
Returns 1 on success, otherwise 0.
void
remove_path(string
path
)
This function removes path
from the Local
module
searchpath. If path
is not in the search path, this is
a noop.
path
The path to be removed.
The functions and classes in the top level of the Locale module implements a dynamic localization system, suitable for programs that need to change locale often. It is even possible for different threads to use different locales at the same time.
The highest level of the locale system is called projects. Usually one program consists of only one project, but for bigger applications, or highly modular applications it is possible for several projects to coexist.
Every project in turn contains several unique tokens, each one representing an entity that is different depending on the currently selected locale.
// The following line tells the locale extractor what to // look for. // <locale-token project="my_project">LOCALE</locale-token> // The localization macro. #define LOCALE(X,Y) Locale.translate("my_project", \ get_lang(), X, Y) string get_lang() { return random(2)?"eng":"swe"; } int(0..0) main() { write(LOCALE(0, "This is a line.")+"\n"); write(LOCALE(0, "This is another one.\n"); return 0; }
In order to update your code to actually use the locale strings you need to run the locale extractor.
This is available as pike -x extract_locale
Syntax: pike -x extract_locale [arguments] infile(s)
Arguments: --project=name default: first found in infile
--config=file default: [project].xml
--out=file default: [project]_eng.xml
--nocopy update infile instead of infile.new
--notime don't include dump time in xml files
--wipe remove unused ids from xml
--sync synchronize all locale projects
--encoding=enc default: ISO-8859-1
--verbose more informative text in xml
function
(:void
)|zero
call(string
project
, string
lang
, string
name
, void
|function
(:void
)|string
fb
)
Returns a localized function If function not found, tries fallback function fb, or fallback language fb instead
mapping
(string
:object
)|zero
get_objects(string
lang
)
Reads in and returns a mapping with all the registred projects' LocaleObjects in the language 'lang'
array
(string
) list_languages(string
project
)
Returns a list of all registered languages for a specific project.
void
register_project(string
name
, string
path
, void
|string
path_base
)
Make a connection between a project name and where its localization files can be found. The mapping from project name to locale file is stored in projects.
void
set_default_project_path(string
path
)
In the event that a translation is requested in an unregistered project, this path will be used as the project path. %P will be replaced with the requested projects name.
string
translate(string
project
, string
lang
, string
|int
id
, string
fallback
)
Returns a translation for the given id, or the fallback string
This class simulates a multi-language "string". The actual language to use is determined as late as possible.
protected
string
Locale.DeferredLocale.project
protected
function
(:string
) Locale.DeferredLocale.get_lang
protected
string
|int
Locale.DeferredLocale.key
protected
string
Locale.DeferredLocale.fallback
protected
local
void
__create__(string
project
, function
(:string
) get_lang
, string
|int
key
, string
fallback
)
Locale.DeferredLocale Locale.DeferredLocale(
string
project
, function
(:string
) get_lang
, string
|int
key
, string
fallback
)
array
get_identifier()
Return the data nessesary to recreate this "string".
array
(string
) Locale.LanguageListObject.languages
protected
local
void
__create__(