Skip to content
Snippets Groups Projects
Select Git revision
  • a5759fb3608e81f04f7c7531d97d36defee62a8b
  • master default protected
  • 9.0
  • 8.0
  • 7.8
  • 7.6
  • 7.4
  • 7.2
  • 7.0
  • 0.6
  • rosuav/latex-markdown-renderer
  • rxnpatch/rxnpatch
  • marcus/gobject-introspection
  • rxnpatch/8.0
  • rosuav/pre-listening-ports
  • nt-tools
  • rosuav/async-annotations
  • rosuav/pgsql-ssl
  • rxnpatch/rxnpatch-broken/2023-10-06T094250
  • grubba/fdlib
  • grubba/wip/sakura/8.0
  • v8.0.2000
  • v8.0.1998
  • v8.0.1996
  • v8.0.1994
  • v8.0.1992
  • v8.0.1990
  • v8.0.1988
  • v8.0.1986
  • rxnpatch/clusters/8.0/2025-04-29T124414
  • rxnpatch/2025-04-29T124414
  • v8.0.1984
  • v8.0.1982
  • v8.0.1980
  • v8.0.1978
  • v8.0.1976
  • v8.0.1974
  • v8.0.1972
  • v8.0.1970
  • v8.0.1968
  • v8.0.1966
41 results

example2

Blame
    • Fredrik Hübinette (Hubbe)'s avatar
      06983fde
      Pike · 06983fde
      Fredrik Hübinette (Hubbe) authored
      Rev: .cvsignore:1.1.1.1
      Rev: README:1.1.1.1
      Rev: bin/export.pike:1.1.1.1
      Rev: bin/fixdepends.sh:1.1.1.1
      Rev: bin/hilfe:1.1.1.1
      Rev: bin/htmlify_docs.pike:1.1.1.1
      Rev: bin/httpd.pike:1.1.1.1
      Rev: bin/metatest:1.1.1.1
      Rev: bin/mkpeep.pike:1.1.1.1
      Rev: bin/rsif:1.1.1.1
      Rev: doc/README:1.1.1.1
      Rev: doc/builtin/_verify_internals:1.1.1.1
      Rev: doc/builtin/add_constant:1.1.1.1
      Rev: doc/builtin/aggregage_multiset:1.1.1.1
      Rev: doc/builtin/aggregate:1.1.1.1
      Rev: doc/builtin/aggregate_mapping:1.1.1.1
      Rev: doc/builtin/alarm:1.1.1.1
      Rev: doc/builtin/all_constants:1.1.1.1
      Rev: doc/builtin/allocate:1.1.1.1
      Rev: doc/builtin/arrayp:1.1.1.1
      Rev: doc/builtin/backtrace:1.1.1.1
      Rev: doc/builtin/call_function:1.1.1.1
      Rev: doc/builtin/clone:1.1.1.1
      Rev: doc/builtin/column:1.1.1.1
      Rev: doc/builtin/combine_path:1.1.1.1
      Rev: doc/builtin/compile_file:1.1.1.1
      Rev: doc/builtin/compile_string:1.1.1.1
      Rev: doc/builtin/copy_value:1.1.1.1
      Rev: doc/builtin/crypt:1.1.1.1
      Rev: doc/builtin/ctime:1.1.1.1
      Rev: doc/builtin/destruct:1.1.1.1
      Rev: doc/builtin/equal:1.1.1.1
      Rev: doc/builtin/exit:1.1.1.1
      Rev: doc/builtin/floatp:1.1.1.1
      Rev: doc/builtin/function_name:1.1.1.1
      Rev: doc/builtin/function_object:1.1.1.1
      Rev: doc/builtin/functionp:1.1.1.1
      Rev: doc/builtin/gc:1.1.1.1
      Rev: doc/builtin/getpid:1.1.1.1
      Rev: doc/builtin/glob:1.1.1.1
      Rev: doc/builtin/hash:1.1.1.1
      Rev: doc/builtin/indices:1.1.1.1
      Rev: doc/builtin/intp:1.1.1.1
      Rev: doc/builtin/kill:1.1.1.1
      Rev: doc/builtin/localtime:1.1.1.1
      Rev: doc/builtin/lower_case:1.1.1.1
      Rev: doc/builtin/m_delete:1.1.1.1
      Rev: doc/builtin/mappingp:1.1.1.1
      Rev: doc/builtin/mkmapping:1.1.1.1
      Rev: doc/builtin/multisetp:1.1.1.1
      Rev: doc/builtin/next_object:1.1.1.1
      Rev: doc/builtin/object_program:1.1.1.1
      Rev: doc/builtin/objectp:1.1.1.1
      Rev: doc/builtin/programp:1.1.1.1
      Rev: doc/builtin/query_host_name:1.1.1.1
      Rev: doc/builtin/query_num_arg:1.1.1.1
      Rev: doc/builtin/random:1.1.1.1
      Rev: doc/builtin/random_seed:1.1.1.1
      Rev: doc/builtin/replace:1.1.1.1
      Rev: doc/builtin/reverse:1.1.1.1
      Rev: doc/builtin/rows:1.1.1.1
      Rev: doc/builtin/rusage:1.1.1.1
      Rev: doc/builtin/search:1.1.1.1
      Rev: doc/builtin/signal:1.1.1.1
      Rev: doc/builtin/signame:1.1.1.1
      Rev: doc/builtin/signum:1.1.1.1
      Rev: doc/builtin/sizeof:1.1.1.1
      Rev: doc/builtin/sleep:1.1.1.1
      Rev: doc/builtin/sort:1.1.1.1
      Rev: doc/builtin/stringp:1.1.1.1
      Rev: doc/builtin/this_object:1.1.1.1
      Rev: doc/builtin/throw:1.1.1.1
      Rev: doc/builtin/time:1.1.1.1
      Rev: doc/builtin/trace:1.1.1.1
      Rev: doc/builtin/ualarm:1.1.1.1
      Rev: doc/builtin/upper_case:1.1.1.1
      Rev: doc/builtin/values:1.1.1.1
      Rev: doc/builtin/zero_type:1.1.1.1
      Rev: doc/index.bmml:1.1.1.1
      Rev: doc/manual/example1:1.1.1.1
      Rev: doc/manual/example2:1.1.1.1
      Rev: doc/manual/example3:1.1.1.1
      Rev: doc/manual/tutorial:1.1.1.1
      Rev: doc/operators/and:1.1.1.1
      Rev: doc/operators/complement:1.1.1.1
      Rev: doc/operators/divide:1.1.1.1
      Rev: doc/operators/index:1.1.1.1
      Rev: doc/operators/is_equal:1.1.1.1
      Rev: doc/operators/is_greater_or_equal:1.1.1.1
      Rev: doc/operators/is_greater_than:1.1.1.1
      Rev: doc/operators/is_lesser_or_equal:1.1.1.1
      Rev: doc/operators/is_lesser_than:1.1.1.1
      Rev: doc/operators/logical_and:1.1.1.1
      Rev: doc/operators/logical_or:1.1.1.1
      Rev: doc/operators/minus:1.1.1.1
      Rev: doc/operators/modulo:1.1.1.1
      Rev: doc/operators/mult:1.1.1.1
      Rev: doc/operators/not:1.1.1.1
      Rev: doc/operators/not_equal:1.1.1.1
      Rev: doc/operators/operators:1.1.1.1
      Rev: doc/operators/or:1.1.1.1
      Rev: doc/operators/plus:1.1.1.1
      Rev: doc/operators/range:1.1.1.1
      Rev: doc/operators/shift_left:1.1.1.1
      Rev: doc/operators/shift_right:1.1.1.1
      Rev: doc/operators/xor:1.1.1.1
      Rev: doc/pike/all.bmml:1.1.1.1
      Rev: doc/pike/cast:1.1.1.1
      Rev: doc/pike/catch:1.1.1.1
      Rev: doc/pike/class:1.1.1.1
      Rev: doc/pike/command_line_options:1.1.1.1
      Rev: doc/pike/control_structures/break:1.1.1.1
      Rev: doc/pike/control_structures/catch:1.1.1.1
      Rev: doc/pike/control_structures/continue:1.1.1.1
      Rev: doc/pike/control_structures/do-while:1.1.1.1
      Rev: doc/pike/control_structures/for:1.1.1.1
      Rev: doc/pike/control_structures/foreach:1.1.1.1
      Rev: doc/pike/control_structures/if-else:1.1.1.1
      Rev: doc/pike/control_structures/return:1.1.1.1
      Rev: doc/pike/control_structures/switch:1.1.1.1
      Rev: doc/pike/control_structures/while:1.1.1.1
      Rev: doc/pike/efuns.bmml:1.1.1.1
      Rev: doc/pike/functions:1.1.1.1
      Rev: doc/pike/gauge:1.1.1.1
      Rev: doc/pike/hilfe:1.1.1.1
      Rev: doc/pike/how_to_make_modules:1.1.1.1
      Rev: doc/pike/inherit:1.1.1.1
      Rev: doc/pike/lambda:1.1.1.1
      Rev: doc/pike/modifier:1.1.1.1
      Rev: doc/pike/preprocessor:1.1.1.1
      Rev: doc/pike/reserved.bmml:1.1.1.1
      Rev: doc/pike/sscanf:1.1.1.1
      Rev: doc/pike/typeof:1.1.1.1
      Rev: doc/pike/variables:1.1.1.1
      Rev: doc/simulated/PI:1.1.1.1
      Rev: doc/simulated/add_efun:1.1.1.1
      Rev: doc/simulated/aggregage_list:1.1.1.1
      Rev: doc/simulated/all_efuns:1.1.1.1
      Rev: doc/simulated/capitalize:1.1.1.1
      Rev: doc/simulated/describe_backtrace:1.1.1.1
      Rev: doc/simulated/exec:1.1.1.1
      Rev: doc/simulated/explode:1.1.1.1
      Rev: doc/simulated/file_size:1.1.1.1
      Rev: doc/simulated/filter:1.1.1.1
      Rev: doc/simulated/filter_array:1.1.1.1
      Rev: doc/simulated/get_function:1.1.1.1
      Rev: doc/simulated/getenv:1.1.1.1
      Rev: doc/simulated/implode:1.1.1.1
      Rev: doc/simulated/l_sizeof:1.1.1.1
      Rev: doc/simulated/listp:1.1.1.1
      Rev: doc/simulated/m_indices:1.1.1.1
      Rev: doc/simulated/m_sizeof:1.1.1.1
      Rev: doc/simulated/m_values:1.1.1.1
      Rev: doc/simulated/map:1.1.1.1
      Rev: doc/simulated/map_array:1.1.1.1
      Rev: doc/simulated/master:1.1.1.1
      Rev: doc/simulated/member_array:1.1.1.1
      Rev: doc/simulated/mklist:1.1.1.1
      Rev: doc/simulated/mkmultiset:1.1.1.1
      Rev: doc/simulated/perror:1.1.1.1
      Rev: doc/simulated/popen:1.1.1.1
      Rev: doc/simulated/previous_object:1.1.1.1
      Rev: doc/simulated/putenv:1.1.1.1
      Rev: doc/simulated/read_bytes:1.1.1.1
      Rev: doc/simulated/regexp:1.1.1.1
      Rev: doc/simulated/search_array:1.1.1.1
      Rev: doc/simulated/sort_array:1.1.1.1
      Rev: doc/simulated/spawn:1.1.1.1
      Rev: doc/simulated/strlen:1.1.1.1
      Rev: doc/simulated/strstr:1.1.1.1
      Rev: doc/simulated/sum:1.1.1.1
      Rev: doc/simulated/sum_arrays:1.1.1.1
      Rev: doc/simulated/system:1.1.1.1
      Rev: doc/simulated/this_function:1.1.1.1
      Rev: doc/simulated/version:1.1.1.1
      Rev: doc/simulated/write:1.1.1.1
      Rev: doc/simulated/write_file:1.1.1.1
      Rev: doc/types/array:1.1.1.1
      Rev: doc/types/float:1.1.1.1
      Rev: doc/types/function:1.1.1.1
      Rev: doc/types/int:1.1.1.1
      Rev: doc/types/mapping:1.1.1.1
      Rev: doc/types/mixed:1.1.1.1
      Rev: doc/types/multiset:1.1.1.1
      Rev: doc/types/object:1.1.1.1
      Rev: doc/types/program:1.1.1.1
      Rev: doc/types/string:1.1.1.1
      Rev: lib/include/array.h:1.1.1.1
      Rev: lib/include/array.pre.pike:1.1.1.1
      Rev: lib/include/process.h:1.1.1.1
      Rev: lib/include/process.pre.pike:1.1.1.1
      Rev: lib/include/simulate.h:1.1.1.1
      Rev: lib/include/simulate.pre.pike:1.1.1.1
      Rev: lib/include/stdio.h:1.1.1.1
      Rev: lib/include/stdio.pre.pike:1.1.1.1
      Rev: lib/master.pike:1.1.1.1
      Rev: src/.cvsignore:1.1.1.1
      Rev: src/BUGS:1.1.1.1
      Rev: src/COPYING:1.1.1.1
      Rev: src/COPYRIGHT:1.1.1.1
      Rev: src/ChangeLog:1.1.1.1
      Rev: src/DISCLAIMER:1.1.1.1
      Rev: src/Makefile.src:1.1.1.1
      Rev: src/README:1.1.1.1
      Rev: src/alloca.c:1.1.1.1
      Rev: src/array.c:1.1.1.1
      Rev: src/array.h:1.1.1.1
      Rev: src/backend.c:1.1.1.1
      Rev: src/backend.h:1.1.1.1
      Rev: src/build_modlist_h:1.1.1.1
      Rev: src/builtin_functions.c:1.1.1.1
      Rev: src/builtin_functions.h:1.1.1.1
      Rev: src/callback.c:1.1.1.1
      Rev: src/callback.h:1.1.1.1
      Rev: src/compilation.h:1.1.1.1
      Rev: src/config.cache:1.1.1.1
      Rev: src/config.h:1.1.1.1
      Rev: src/config.log:1.1.1.1
      Rev: src/configure.in:1.1.1.1
      Rev: src/constants.c:1.1.1.1
      Rev: src/constants.h:1.1.1.1
      Rev: src/docode.c:1.1.1.1
      Rev: src/docode.h:1.1.1.1
      Rev: src/dynamic_buffer.c:1.1.1.1
      Rev: src/dynamic_buffer.h:1.1.1.1
      Rev: src/efun.h:1.1.1.1
      Rev: src/error.c:1.1.1.1
      Rev: src/error.h:1.1.1.1
      Rev: src/fd_control.c:1.1.1.1
      Rev: src/fd_control.h:1.1.1.1
      Rev: src/fsort.c:1.1.1.1
      Rev: src/fsort.h:1.1.1.1
      Rev: src/gc.c:1.1.1.1
      Rev: src/gc.h:1.1.1.1
      Rev: src/global.h:1.1.1.1
      Rev: src/hashtable.c:1.1.1.1
      Rev: src/hashtable.h:1.1.1.1
      Rev: src/install-sh:1.1.1.1
      Rev: src/interpret.c:1.1.1.1
      Rev: src/interpret.h:1.1.1.1
      Rev: src/language.y:1.1.1.1
      Rev: src/las.c:1.1.1.1
      Rev: src/las.h:1.1.1.1
      Rev: src/lex.c:1.1.1.1
      Rev: src/lex.h:1.1.1.1
      Rev: src/machine.h.in:1.1.1.1
      Rev: src/macros.h:1.1.1.1
      Rev: src/main.c:1.1.1.1
      Rev: src/main.h:1.1.1.1
      Rev: src/mapping.c:1.1.1.1
      Rev: src/mapping.h:1.1.1.1
      Rev: src/memory.c:1.1.1.1
      Rev: src/memory.h:1.1.1.1
      Rev: src/module.c:1.1.1.1
      Rev: src/module.h:1.1.1.1
      Rev: src/modules/.cvsignore:1.1.1.1
      Rev: src/modules/Makefile.src:1.1.1.1
      Rev: src/modules/call_out/.cvsignore:1.1.1.1
      Rev: src/modules/call_out/Makefile.src:1.1.1.1
      Rev: src/modules/call_out/call_out.c:1.1.1.1
      Rev: src/modules/call_out/configure.in:1.1.1.1
      Rev: src/modules/call_out/doc/call_out:1.1.1.1
      Rev: src/modules/call_out/doc/call_out_info:1.1.1.1
      Rev: src/modules/call_out/doc/find_call_out:1.1.1.1
      Rev: src/modules/call_out/doc/remove_call_out:1.1.1.1
      Rev: src/modules/configure.in:1.1.1.1
      Rev: src/modules/files/.cvsignore:1.1.1.1
      Rev: src/modules/files/Makefile.src:1.1.1.1
      Rev: src/modules/files/configure.in:1.1.1.1
      Rev: src/modules/files/datagram.c:1.1.1.1
      Rev: src/modules/files/doc/cd:1.1.1.1
      Rev: src/modules/files/doc/errno:1.1.1.1
      Rev: src/modules/files/doc/exece:1.1.1.1
      Rev: src/modules/files/doc/file:1.1.1.1
      Rev: src/modules/files/doc/file_stat:1.1.1.1
      Rev: src/modules/files/doc/fork:1.1.1.1
      Rev: src/modules/files/doc/get_dir:1.1.1.1
      Rev: src/modules/files/doc/getcwd:1.1.1.1
      Rev: src/modules/files/doc/mkdir:1.1.1.1
      Rev: src/modules/files/doc/mv:1.1.1.1
      Rev: src/modules/files/doc/port:1.1.1.1
      Rev: src/modules/files/doc/rm:1.1.1.1
      Rev: src/modules/files/doc/strerror:1.1.1.1
      Rev: src/modules/files/doc/werror:1.1.1.1
      Rev: src/modules/files/efuns.c:1.1.1.1
      Rev: src/modules/files/file.c:1.1.1.1
      Rev: src/modules/files/file.h:1.1.1.1
      Rev: src/modules/files/file_machine.h.in:1.1.1.1
      Rev: src/modules/files/socket.c:1.1.1.1
      Rev: src/modules/gdbmmod/.cvsignore:1.1.1.1
      Rev: src/modules/gdbmmod/Makefile.src:1.1.1.1
      Rev: src/modules/gdbmmod/configure.in:1.1.1.1
      Rev: src/modules/gdbmmod/doc/gdbm:1.1.1.1
      Rev: src/modules/gdbmmod/gdbm_machine.h.in:1.1.1.1
      Rev: src/modules/gdbmmod/gdbmmod.c:1.1.1.1
      Rev: src/modules/gmpmod/.cvsignore:1.1.1.1
      Rev: src/modules/gmpmod/Makefile.src:1.1.1.1
      Rev: src/modules/gmpmod/configure.in:1.1.1.1
      Rev: src/modules/gmpmod/doc/mpz:1.1.1.1
      Rev: src/modules/gmpmod/gmp_machine.h.in:1.1.1.1
      Rev: src/modules/gmpmod/mpz_glue.c:1.1.1.1
      Rev: src/modules/image/Makefile.in:1.1.1.1
      Rev: src/modules/image/Makefile.src:1.1.1.1
      Rev: src/modules/image/configure:1.1.1.1
      Rev: src/modules/image/configure.in:1.1.1.1
      Rev: src/modules/image/dependencies:1.1.1.1
      Rev: src/modules/image/doc.txt:1.1.1.1
      Rev: src/modules/image/doc/image.html:1.1.1.1
      Rev: src/modules/image/font.c:1.1.1.1
      Rev: src/modules/image/image.c:1.1.1.1
      Rev: src/modules/image/image.h:1.1.1.1
      Rev: src/modules/image/lzw.c:1.1.1.1
      Rev: src/modules/image/lzw.h:1.1.1.1
      Rev: src/modules/image/quant.c:1.1.1.1
      Rev: src/modules/image/togif.c:1.1.1.1
      Rev: src/modules/math/.cvsignore:1.1.1.1
      Rev: src/modules/math/Makefile.src:1.1.1.1
      Rev: src/modules/math/configure.in:1.1.1.1
      Rev: src/modules/math/doc/acos:1.1.1.1
      Rev: src/modules/math/doc/asin:1.1.1.1
      Rev: src/modules/math/doc/atan:1.1.1.1
      Rev: src/modules/math/doc/ceil:1.1.1.1
      Rev: src/modules/math/doc/cos:1.1.1.1
      Rev: src/modules/math/doc/exp:1.1.1.1
      Rev: src/modules/math/doc/floor:1.1.1.1
      Rev: src/modules/math/doc/log:1.1.1.1
      Rev: src/modules/math/doc/pow:1.1.1.1
      Rev: src/modules/math/doc/sin:1.1.1.1
      Rev: src/modules/math/doc/sqrt:1.1.1.1
      Rev: src/modules/math/doc/tan:1.1.1.1
      Rev: src/modules/math/math.c:1.1.1.1
      Rev: src/modules/module_dir_marker:1.1.1.1
      Rev: src/modules/pipe/Makefile.in:1.1.1.1
      Rev: src/modules/pipe/Makefile.src:1.1.1.1
      Rev: src/modules/pipe/config.h:1.1.1.1
      Rev: src/modules/pipe/configure:1.1.1.1
      Rev: src/modules/pipe/configure.in:1.1.1.1
      Rev: src/modules/pipe/dependencies:1.1.1.1
      Rev: src/modules/pipe/pipe.c:1.1.1.1
      Rev: src/modules/readlinemod/.cvsignore:1.1.1.1
      Rev: src/modules/readlinemod/Makefile.src:1.1.1.1
      Rev: src/modules/readlinemod/configure.in:1.1.1.1
      Rev: src/modules/readlinemod/doc/readline:1.1.1.1
      Rev: src/modules/readlinemod/readline_machine.h.in:1.1.1.1
      Rev: src/modules/readlinemod/readlinemod.c:1.1.1.1
      Rev: src/modules/regexp/.cvsignore:1.1.1.1
      Rev: src/modules/regexp/Makefile.src:1.1.1.1
      Rev: src/modules/regexp/configure.in:1.1.1.1
      Rev: src/modules/regexp/doc/regexp:1.1.1.1
      Rev: src/modules/regexp/glue.c:1.1.1.1
      Rev: src/modules/regexp/regexp.c:1.1.1.1
      Rev: src/modules/regexp/regexp.h:1.1.1.1
      Rev: src/modules/spider/Makefile.in:1.1.1.1
      Rev: src/modules/spider/Makefile.src:1.1.1.1
      Rev: src/modules/spider/configure:1.1.1.1
      Rev: src/modules/spider/configure.in:1.1.1.1
      Rev: src/modules/spider/defs.h:1.1.1.1
      Rev: src/modules/spider/dependencies:1.1.1.1
      Rev: src/modules/spider/discdate.c:1.1.1.1
      Rev: src/modules/spider/encode_decode.c:1.1.1.1
      Rev: src/modules/spider/http_parse.c:1.1.1.1
      Rev: src/modules/spider/lock.c:1.1.1.1
      Rev: src/modules/spider/lock.h:1.1.1.1
      Rev: src/modules/spider/sdebug.c:1.1.1.1
      Rev: src/modules/spider/shared_mem_mapping.c:1.1.1.1
      Rev: src/modules/spider/sharedmem.c:1.1.1.1
      Rev: src/modules/spider/sharedmem.h:1.1.1.1
      Rev: src/modules/spider/spider.c:1.1.1.1
      Rev: src/modules/spider/spider.h.in:1.1.1.1
      Rev: src/modules/spider/stardate.c:1.1.1.1
      Rev: src/modules/spider/streamed_parser.c:1.1.1.1
      Rev: src/modules/spider/streamed_parser.h:1.1.1.1
      Rev: src/modules/spider/tree.c:1.1.1.1
      Rev: src/modules/sprintf/.cvsignore:1.1.1.1
      Rev: src/modules/sprintf/Makefile.src:1.1.1.1
      Rev: src/modules/sprintf/configure.in:1.1.1.1
      Rev: src/modules/sprintf/doc/sprintf:1.1.1.1
      Rev: src/modules/sprintf/sprintf.c:1.1.1.1
      Rev: src/multiset.c:1.1.1.1
      Rev: src/multiset.h:1.1.1.1
      Rev: src/object.c:1.1.1.1
      Rev: src/object.h:1.1.1.1
      Rev: src/opcodes.c:1.1.1.1
      Rev: src/opcodes.h:1.1.1.1
      Rev: src/operators.c:1.1.1.1
      Rev: src/operators.h:1.1.1.1
      Rev: src/otable.h:1.1.1.1
      Rev: src/peep.c:1.1.1.1
      Rev: src/peep.h:1.1.1.1
      Rev: src/peep.in:1.1.1.1
      Rev: src/pike_types.c:1.1.1.1
      Rev: src/pike_types.h:1.1.1.1
      Rev: src/port.c:1.1.1.1
      Rev: src/port.h:1.1.1.1
      Rev: src/program.c:1.1.1.1
      Rev: src/program.h:1.1.1.1
      Rev: src/run_autoconfig:1.1.1.1
      Rev: src/rusage.c:1.1.1.1
      Rev: src/rusage.h:1.1.1.1
      Rev: src/signal_handler.c:1.1.1.1
      Rev: src/signal_handler.h:1.1.1.1
      Rev: src/stamp-h:1.1.1.1
      Rev: src/stralloc.c:1.1.1.1
      Rev: src/stralloc.h:1.1.1.1
      Rev: src/stuff.c:1.1.1.1
      Rev: src/stuff.h:1.1.1.1
      Rev: src/svalue.c:1.1.1.1
      Rev: src/svalue.h:1.1.1.1
      Rev: src/test/.cvsignore:1.1.1.1
      Rev: src/test/create_testsuite:1.1.1.1
      Rev: src/test/test_pike.pike:1.1.1.1
      Rev: src/time_stuff.h:1.1.1.1
      Rev: src/todo:1.1.1.1
      Rev: src/types.h:1.1.1.1
      Rev: src/ualarm.c:1.1.1.1
      06983fde
      History
      Pike
      Fredrik Hübinette (Hubbe) authored
      Rev: .cvsignore:1.1.1.1
      Rev: README:1.1.1.1
      Rev: bin/export.pike:1.1.1.1
      Rev: bin/fixdepends.sh:1.1.1.1
      Rev: bin/hilfe:1.1.1.1
      Rev: bin/htmlify_docs.pike:1.1.1.1
      Rev: bin/httpd.pike:1.1.1.1
      Rev: bin/metatest:1.1.1.1
      Rev: bin/mkpeep.pike:1.1.1.1
      Rev: bin/rsif:1.1.1.1
      Rev: doc/README:1.1.1.1
      Rev: doc/builtin/_verify_internals:1.1.1.1
      Rev: doc/builtin/add_constant:1.1.1.1
      Rev: doc/builtin/aggregage_multiset:1.1.1.1
      Rev: doc/builtin/aggregate:1.1.1.1
      Rev: doc/builtin/aggregate_mapping:1.1.1.1
      Rev: doc/builtin/alarm:1.1.1.1
      Rev: doc/builtin/all_constants:1.1.1.1
      Rev: doc/builtin/allocate:1.1.1.1
      Rev: doc/builtin/arrayp:1.1.1.1
      Rev: doc/builtin/backtrace:1.1.1.1
      Rev: doc/builtin/call_function:1.1.1.1
      Rev: doc/builtin/clone:1.1.1.1
      Rev: doc/builtin/column:1.1.1.1
      Rev: doc/builtin/combine_path:1.1.1.1
      Rev: doc/builtin/compile_file:1.1.1.1
      Rev: doc/builtin/compile_string:1.1.1.1
      Rev: doc/builtin/copy_value:1.1.1.1
      Rev: doc/builtin/crypt:1.1.1.1
      Rev: doc/builtin/ctime:1.1.1.1
      Rev: doc/builtin/destruct:1.1.1.1
      Rev: doc/builtin/equal:1.1.1.1
      Rev: doc/builtin/exit:1.1.1.1
      Rev: doc/builtin/floatp:1.1.1.1
      Rev: doc/builtin/function_name:1.1.1.1
      Rev: doc/builtin/function_object:1.1.1.1
      Rev: doc/builtin/functionp:1.1.1.1
      Rev: doc/builtin/gc:1.1.1.1
      Rev: doc/builtin/getpid:1.1.1.1
      Rev: doc/builtin/glob:1.1.1.1
      Rev: doc/builtin/hash:1.1.1.1
      Rev: doc/builtin/indices:1.1.1.1
      Rev: doc/builtin/intp:1.1.1.1
      Rev: doc/builtin/kill:1.1.1.1
      Rev: doc/builtin/localtime:1.1.1.1
      Rev: doc/builtin/lower_case:1.1.1.1
      Rev: doc/builtin/m_delete:1.1.1.1
      Rev: doc/builtin/mappingp:1.1.1.1
      Rev: doc/builtin/mkmapping:1.1.1.1
      Rev: doc/builtin/multisetp:1.1.1.1
      Rev: doc/builtin/next_object:1.1.1.1
      Rev: doc/builtin/object_program:1.1.1.1
      Rev: doc/builtin/objectp:1.1.1.1
      Rev: doc/builtin/programp:1.1.1.1
      Rev: doc/builtin/query_host_name:1.1.1.1
      Rev: doc/builtin/query_num_arg:1.1.1.1
      Rev: doc/builtin/random:1.1.1.1
      Rev: doc/builtin/random_seed:1.1.1.1
      Rev: doc/builtin/replace:1.1.1.1
      Rev: doc/builtin/reverse:1.1.1.1
      Rev: doc/builtin/rows:1.1.1.1
      Rev: doc/builtin/rusage:1.1.1.1
      Rev: doc/builtin/search:1.1.1.1
      Rev: doc/builtin/signal:1.1.1.1
      Rev: doc/builtin/signame:1.1.1.1
      Rev: doc/builtin/signum:1.1.1.1
      Rev: doc/builtin/sizeof:1.1.1.1
      Rev: doc/builtin/sleep:1.1.1.1
      Rev: doc/builtin/sort:1.1.1.1
      Rev: doc/builtin/stringp:1.1.1.1
      Rev: doc/builtin/this_object:1.1.1.1
      Rev: doc/builtin/throw:1.1.1.1
      Rev: doc/builtin/time:1.1.1.1
      Rev: doc/builtin/trace:1.1.1.1
      Rev: doc/builtin/ualarm:1.1.1.1
      Rev: doc/builtin/upper_case:1.1.1.1
      Rev: doc/builtin/values:1.1.1.1
      Rev: doc/builtin/zero_type:1.1.1.1
      Rev: doc/index.bmml:1.1.1.1
      Rev: doc/manual/example1:1.1.1.1
      Rev: doc/manual/example2:1.1.1.1
      Rev: doc/manual/example3:1.1.1.1
      Rev: doc/manual/tutorial:1.1.1.1
      Rev: doc/operators/and:1.1.1.1
      Rev: doc/operators/complement:1.1.1.1
      Rev: doc/operators/divide:1.1.1.1
      Rev: doc/operators/index:1.1.1.1
      Rev: doc/operators/is_equal:1.1.1.1
      Rev: doc/operators/is_greater_or_equal:1.1.1.1
      Rev: doc/operators/is_greater_than:1.1.1.1
      Rev: doc/operators/is_lesser_or_equal:1.1.1.1
      Rev: doc/operators/is_lesser_than:1.1.1.1
      Rev: doc/operators/logical_and:1.1.1.1
      Rev: doc/operators/logical_or:1.1.1.1
      Rev: doc/operators/minus:1.1.1.1
      Rev: doc/operators/modulo:1.1.1.1
      Rev: doc/operators/mult:1.1.1.1
      Rev: doc/operators/not:1.1.1.1
      Rev: doc/operators/not_equal:1.1.1.1
      Rev: doc/operators/operators:1.1.1.1
      Rev: doc/operators/or:1.1.1.1
      Rev: doc/operators/plus:1.1.1.1
      Rev: doc/operators/range:1.1.1.1
      Rev: doc/operators/shift_left:1.1.1.1
      Rev: doc/operators/shift_right:1.1.1.1
      Rev: doc/operators/xor:1.1.1.1
      Rev: doc/pike/all.bmml:1.1.1.1
      Rev: doc/pike/cast:1.1.1.1
      Rev: doc/pike/catch:1.1.1.1
      Rev: doc/pike/class:1.1.1.1
      Rev: doc/pike/command_line_options:1.1.1.1
      Rev: doc/pike/control_structures/break:1.1.1.1
      Rev: doc/pike/control_structures/catch:1.1.1.1
      Rev: doc/pike/control_structures/continue:1.1.1.1
      Rev: doc/pike/control_structures/do-while:1.1.1.1
      Rev: doc/pike/control_structures/for:1.1.1.1
      Rev: doc/pike/control_structures/foreach:1.1.1.1
      Rev: doc/pike/control_structures/if-else:1.1.1.1
      Rev: doc/pike/control_structures/return:1.1.1.1
      Rev: doc/pike/control_structures/switch:1.1.1.1
      Rev: doc/pike/control_structures/while:1.1.1.1
      Rev: doc/pike/efuns.bmml:1.1.1.1
      Rev: doc/pike/functions:1.1.1.1
      Rev: doc/pike/gauge:1.1.1.1
      Rev: doc/pike/hilfe:1.1.1.1
      Rev: doc/pike/how_to_make_modules:1.1.1.1
      Rev: doc/pike/inherit:1.1.1.1
      Rev: doc/pike/lambda:1.1.1.1
      Rev: doc/pike/modifier:1.1.1.1
      Rev: doc/pike/preprocessor:1.1.1.1
      Rev: doc/pike/reserved.bmml:1.1.1.1
      Rev: doc/pike/sscanf:1.1.1.1
      Rev: doc/pike/typeof:1.1.1.1
      Rev: doc/pike/variables:1.1.1.1
      Rev: doc/simulated/PI:1.1.1.1
      Rev: doc/simulated/add_efun:1.1.1.1
      Rev: doc/simulated/aggregage_list:1.1.1.1
      Rev: doc/simulated/all_efuns:1.1.1.1
      Rev: doc/simulated/capitalize:1.1.1.1
      Rev: doc/simulated/describe_backtrace:1.1.1.1
      Rev: doc/simulated/exec:1.1.1.1
      Rev: doc/simulated/explode:1.1.1.1
      Rev: doc/simulated/file_size:1.1.1.1
      Rev: doc/simulated/filter:1.1.1.1
      Rev: doc/simulated/filter_array:1.1.1.1
      Rev: doc/simulated/get_function:1.1.1.1
      Rev: doc/simulated/getenv:1.1.1.1
      Rev: doc/simulated/implode:1.1.1.1
      Rev: doc/simulated/l_sizeof:1.1.1.1
      Rev: doc/simulated/listp:1.1.1.1
      Rev: doc/simulated/m_indices:1.1.1.1
      Rev: doc/simulated/m_sizeof:1.1.1.1
      Rev: doc/simulated/m_values:1.1.1.1
      Rev: doc/simulated/map:1.1.1.1
      Rev: doc/simulated/map_array:1.1.1.1
      Rev: doc/simulated/master:1.1.1.1
      Rev: doc/simulated/member_array:1.1.1.1
      Rev: doc/simulated/mklist:1.1.1.1
      Rev: doc/simulated/mkmultiset:1.1.1.1
      Rev: doc/simulated/perror:1.1.1.1
      Rev: doc/simulated/popen:1.1.1.1
      Rev: doc/simulated/previous_object:1.1.1.1
      Rev: doc/simulated/putenv:1.1.1.1
      Rev: doc/simulated/read_bytes:1.1.1.1
      Rev: doc/simulated/regexp:1.1.1.1
      Rev: doc/simulated/search_array:1.1.1.1
      Rev: doc/simulated/sort_array:1.1.1.1
      Rev: doc/simulated/spawn:1.1.1.1
      Rev: doc/simulated/strlen:1.1.1.1
      Rev: doc/simulated/strstr:1.1.1.1
      Rev: doc/simulated/sum:1.1.1.1
      Rev: doc/simulated/sum_arrays:1.1.1.1
      Rev: doc/simulated/system:1.1.1.1
      Rev: doc/simulated/this_function:1.1.1.1
      Rev: doc/simulated/version:1.1.1.1
      Rev: doc/simulated/write:1.1.1.1
      Rev: doc/simulated/write_file:1.1.1.1
      Rev: doc/types/array:1.1.1.1
      Rev: doc/types/float:1.1.1.1
      Rev: doc/types/function:1.1.1.1
      Rev: doc/types/int:1.1.1.1
      Rev: doc/types/mapping:1.1.1.1
      Rev: doc/types/mixed:1.1.1.1
      Rev: doc/types/multiset:1.1.1.1
      Rev: doc/types/object:1.1.1.1
      Rev: doc/types/program:1.1.1.1
      Rev: doc/types/string:1.1.1.1
      Rev: lib/include/array.h:1.1.1.1
      Rev: lib/include/array.pre.pike:1.1.1.1
      Rev: lib/include/process.h:1.1.1.1
      Rev: lib/include/process.pre.pike:1.1.1.1
      Rev: lib/include/simulate.h:1.1.1.1
      Rev: lib/include/simulate.pre.pike:1.1.1.1
      Rev: lib/include/stdio.h:1.1.1.1
      Rev: lib/include/stdio.pre.pike:1.1.1.1
      Rev: lib/master.pike:1.1.1.1
      Rev: src/.cvsignore:1.1.1.1
      Rev: src/BUGS:1.1.1.1
      Rev: src/COPYING:1.1.1.1
      Rev: src/COPYRIGHT:1.1.1.1
      Rev: src/ChangeLog:1.1.1.1
      Rev: src/DISCLAIMER:1.1.1.1
      Rev: src/Makefile.src:1.1.1.1
      Rev: src/README:1.1.1.1
      Rev: src/alloca.c:1.1.1.1
      Rev: src/array.c:1.1.1.1
      Rev: src/array.h:1.1.1.1
      Rev: src/backend.c:1.1.1.1
      Rev: src/backend.h:1.1.1.1
      Rev: src/build_modlist_h:1.1.1.1
      Rev: src/builtin_functions.c:1.1.1.1
      Rev: src/builtin_functions.h:1.1.1.1
      Rev: src/callback.c:1.1.1.1
      Rev: src/callback.h:1.1.1.1
      Rev: src/compilation.h:1.1.1.1
      Rev: src/config.cache:1.1.1.1
      Rev: src/config.h:1.1.1.1
      Rev: src/config.log:1.1.1.1
      Rev: src/configure.in:1.1.1.1
      Rev: src/constants.c:1.1.1.1
      Rev: src/constants.h:1.1.1.1
      Rev: src/docode.c:1.1.1.1
      Rev: src/docode.h:1.1.1.1
      Rev: src/dynamic_buffer.c:1.1.1.1
      Rev: src/dynamic_buffer.h:1.1.1.1
      Rev: src/efun.h:1.1.1.1
      Rev: src/error.c:1.1.1.1
      Rev: src/error.h:1.1.1.1
      Rev: src/fd_control.c:1.1.1.1
      Rev: src/fd_control.h:1.1.1.1
      Rev: src/fsort.c:1.1.1.1
      Rev: src/fsort.h:1.1.1.1
      Rev: src/gc.c:1.1.1.1
      Rev: src/gc.h:1.1.1.1
      Rev: src/global.h:1.1.1.1
      Rev: src/hashtable.c:1.1.1.1
      Rev: src/hashtable.h:1.1.1.1
      Rev: src/install-sh:1.1.1.1
      Rev: src/interpret.c:1.1.1.1
      Rev: src/interpret.h:1.1.1.1
      Rev: src/language.y:1.1.1.1
      Rev: src/las.c:1.1.1.1
      Rev: src/las.h:1.1.1.1
      Rev: src/lex.c:1.1.1.1
      Rev: src/lex.h:1.1.1.1
      Rev: src/machine.h.in:1.1.1.1
      Rev: src/macros.h:1.1.1.1
      Rev: src/main.c:1.1.1.1
      Rev: src/main.h:1.1.1.1
      Rev: src/mapping.c:1.1.1.1
      Rev: src/mapping.h:1.1.1.1
      Rev: src/memory.c:1.1.1.1
      Rev: src/memory.h:1.1.1.1
      Rev: src/module.c:1.1.1.1
      Rev: src/module.h:1.1.1.1
      Rev: src/modules/.cvsignore:1.1.1.1
      Rev: src/modules/Makefile.src:1.1.1.1
      Rev: src/modules/call_out/.cvsignore:1.1.1.1
      Rev: src/modules/call_out/Makefile.src:1.1.1.1
      Rev: src/modules/call_out/call_out.c:1.1.1.1
      Rev: src/modules/call_out/configure.in:1.1.1.1
      Rev: src/modules/call_out/doc/call_out:1.1.1.1
      Rev: src/modules/call_out/doc/call_out_info:1.1.1.1
      Rev: src/modules/call_out/doc/find_call_out:1.1.1.1
      Rev: src/modules/call_out/doc/remove_call_out:1.1.1.1
      Rev: src/modules/configure.in:1.1.1.1
      Rev: src/modules/files/.cvsignore:1.1.1.1
      Rev: src/modules/files/Makefile.src:1.1.1.1
      Rev: src/modules/files/configure.in:1.1.1.1
      Rev: src/modules/files/datagram.c:1.1.1.1
      Rev: src/modules/files/doc/cd:1.1.1.1
      Rev: src/modules/files/doc/errno:1.1.1.1
      Rev: src/modules/files/doc/exece:1.1.1.1
      Rev: src/modules/files/doc/file:1.1.1.1
      Rev: src/modules/files/doc/file_stat:1.1.1.1
      Rev: src/modules/files/doc/fork:1.1.1.1
      Rev: src/modules/files/doc/get_dir:1.1.1.1
      Rev: src/modules/files/doc/getcwd:1.1.1.1
      Rev: src/modules/files/doc/mkdir:1.1.1.1
      Rev: src/modules/files/doc/mv:1.1.1.1
      Rev: src/modules/files/doc/port:1.1.1.1
      Rev: src/modules/files/doc/rm:1.1.1.1
      Rev: src/modules/files/doc/strerror:1.1.1.1
      Rev: src/modules/files/doc/werror:1.1.1.1
      Rev: src/modules/files/efuns.c:1.1.1.1
      Rev: src/modules/files/file.c:1.1.1.1
      Rev: src/modules/files/file.h:1.1.1.1
      Rev: src/modules/files/file_machine.h.in:1.1.1.1
      Rev: src/modules/files/socket.c:1.1.1.1
      Rev: src/modules/gdbmmod/.cvsignore:1.1.1.1
      Rev: src/modules/gdbmmod/Makefile.src:1.1.1.1
      Rev: src/modules/gdbmmod/configure.in:1.1.1.1
      Rev: src/modules/gdbmmod/doc/gdbm:1.1.1.1
      Rev: src/modules/gdbmmod/gdbm_machine.h.in:1.1.1.1
      Rev: src/modules/gdbmmod/gdbmmod.c:1.1.1.1
      Rev: src/modules/gmpmod/.cvsignore:1.1.1.1
      Rev: src/modules/gmpmod/Makefile.src:1.1.1.1
      Rev: src/modules/gmpmod/configure.in:1.1.1.1
      Rev: src/modules/gmpmod/doc/mpz:1.1.1.1
      Rev: src/modules/gmpmod/gmp_machine.h.in:1.1.1.1
      Rev: src/modules/gmpmod/mpz_glue.c:1.1.1.1
      Rev: src/modules/image/Makefile.in:1.1.1.1
      Rev: src/modules/image/Makefile.src:1.1.1.1
      Rev: src/modules/image/configure:1.1.1.1
      Rev: src/modules/image/configure.in:1.1.1.1
      Rev: src/modules/image/dependencies:1.1.1.1
      Rev: src/modules/image/doc.txt:1.1.1.1
      Rev: src/modules/image/doc/image.html:1.1.1.1
      Rev: src/modules/image/font.c:1.1.1.1
      Rev: src/modules/image/image.c:1.1.1.1
      Rev: src/modules/image/image.h:1.1.1.1
      Rev: src/modules/image/lzw.c:1.1.1.1
      Rev: src/modules/image/lzw.h:1.1.1.1
      Rev: src/modules/image/quant.c:1.1.1.1
      Rev: src/modules/image/togif.c:1.1.1.1
      Rev: src/modules/math/.cvsignore:1.1.1.1
      Rev: src/modules/math/Makefile.src:1.1.1.1
      Rev: src/modules/math/configure.in:1.1.1.1
      Rev: src/modules/math/doc/acos:1.1.1.1
      Rev: src/modules/math/doc/asin:1.1.1.1
      Rev: src/modules/math/doc/atan:1.1.1.1
      Rev: src/modules/math/doc/ceil:1.1.1.1
      Rev: src/modules/math/doc/cos:1.1.1.1
      Rev: src/modules/math/doc/exp:1.1.1.1
      Rev: src/modules/math/doc/floor:1.1.1.1
      Rev: src/modules/math/doc/log:1.1.1.1
      Rev: src/modules/math/doc/pow:1.1.1.1
      Rev: src/modules/math/doc/sin:1.1.1.1
      Rev: src/modules/math/doc/sqrt:1.1.1.1
      Rev: src/modules/math/doc/tan:1.1.1.1
      Rev: src/modules/math/math.c:1.1.1.1
      Rev: src/modules/module_dir_marker:1.1.1.1
      Rev: src/modules/pipe/Makefile.in:1.1.1.1
      Rev: src/modules/pipe/Makefile.src:1.1.1.1
      Rev: src/modules/pipe/config.h:1.1.1.1
      Rev: src/modules/pipe/configure:1.1.1.1
      Rev: src/modules/pipe/configure.in:1.1.1.1
      Rev: src/modules/pipe/dependencies:1.1.1.1
      Rev: src/modules/pipe/pipe.c:1.1.1.1
      Rev: src/modules/readlinemod/.cvsignore:1.1.1.1
      Rev: src/modules/readlinemod/Makefile.src:1.1.1.1
      Rev: src/modules/readlinemod/configure.in:1.1.1.1
      Rev: src/modules/readlinemod/doc/readline:1.1.1.1
      Rev: src/modules/readlinemod/readline_machine.h.in:1.1.1.1
      Rev: src/modules/readlinemod/readlinemod.c:1.1.1.1
      Rev: src/modules/regexp/.cvsignore:1.1.1.1
      Rev: src/modules/regexp/Makefile.src:1.1.1.1
      Rev: src/modules/regexp/configure.in:1.1.1.1
      Rev: src/modules/regexp/doc/regexp:1.1.1.1
      Rev: src/modules/regexp/glue.c:1.1.1.1
      Rev: src/modules/regexp/regexp.c:1.1.1.1
      Rev: src/modules/regexp/regexp.h:1.1.1.1
      Rev: src/modules/spider/Makefile.in:1.1.1.1
      Rev: src/modules/spider/Makefile.src:1.1.1.1
      Rev: src/modules/spider/configure:1.1.1.1
      Rev: src/modules/spider/configure.in:1.1.1.1
      Rev: src/modules/spider/defs.h:1.1.1.1
      Rev: src/modules/spider/dependencies:1.1.1.1
      Rev: src/modules/spider/discdate.c:1.1.1.1
      Rev: src/modules/spider/encode_decode.c:1.1.1.1
      Rev: src/modules/spider/http_parse.c:1.1.1.1
      Rev: src/modules/spider/lock.c:1.1.1.1
      Rev: src/modules/spider/lock.h:1.1.1.1
      Rev: src/modules/spider/sdebug.c:1.1.1.1
      Rev: src/modules/spider/shared_mem_mapping.c:1.1.1.1
      Rev: src/modules/spider/sharedmem.c:1.1.1.1
      Rev: src/modules/spider/sharedmem.h:1.1.1.1
      Rev: src/modules/spider/spider.c:1.1.1.1
      Rev: src/modules/spider/spider.h.in:1.1.1.1
      Rev: src/modules/spider/stardate.c:1.1.1.1
      Rev: src/modules/spider/streamed_parser.c:1.1.1.1
      Rev: src/modules/spider/streamed_parser.h:1.1.1.1
      Rev: src/modules/spider/tree.c:1.1.1.1
      Rev: src/modules/sprintf/.cvsignore:1.1.1.1
      Rev: src/modules/sprintf/Makefile.src:1.1.1.1
      Rev: src/modules/sprintf/configure.in:1.1.1.1
      Rev: src/modules/sprintf/doc/sprintf:1.1.1.1
      Rev: src/modules/sprintf/sprintf.c:1.1.1.1
      Rev: src/multiset.c:1.1.1.1
      Rev: src/multiset.h:1.1.1.1
      Rev: src/object.c:1.1.1.1
      Rev: src/object.h:1.1.1.1
      Rev: src/opcodes.c:1.1.1.1
      Rev: src/opcodes.h:1.1.1.1
      Rev: src/operators.c:1.1.1.1
      Rev: src/operators.h:1.1.1.1
      Rev: src/otable.h:1.1.1.1
      Rev: src/peep.c:1.1.1.1
      Rev: src/peep.h:1.1.1.1
      Rev: src/peep.in:1.1.1.1
      Rev: src/pike_types.c:1.1.1.1
      Rev: src/pike_types.h:1.1.1.1
      Rev: src/port.c:1.1.1.1
      Rev: src/port.h:1.1.1.1
      Rev: src/program.c:1.1.1.1
      Rev: src/program.h:1.1.1.1
      Rev: src/run_autoconfig:1.1.1.1
      Rev: src/rusage.c:1.1.1.1
      Rev: src/rusage.h:1.1.1.1
      Rev: src/signal_handler.c:1.1.1.1
      Rev: src/signal_handler.h:1.1.1.1
      Rev: src/stamp-h:1.1.1.1
      Rev: src/stralloc.c:1.1.1.1
      Rev: src/stralloc.h:1.1.1.1
      Rev: src/stuff.c:1.1.1.1
      Rev: src/stuff.h:1.1.1.1
      Rev: src/svalue.c:1.1.1.1
      Rev: src/svalue.h:1.1.1.1
      Rev: src/test/.cvsignore:1.1.1.1
      Rev: src/test/create_testsuite:1.1.1.1
      Rev: src/test/test_pike.pike:1.1.1.1
      Rev: src/time_stuff.h:1.1.1.1
      Rev: src/todo:1.1.1.1
      Rev: src/types.h:1.1.1.1
      Rev: src/ualarm.c:1.1.1.1
    postgres.pike 13.72 KiB
    /*
     * This is part of the Postgres module for Pike.
     *
     * $Id: postgres.pike,v 1.32 2008/07/05 11:17:45 srb Exp $
     *
     */
    
    //! This is an interface to the Postgres (Postgres95, pgsql) database
    //! server. This module may or may not be availible on your Pike,
    //! depending whether the appropriate include and library files could
    //! be found at compile-time. Note that you @b{do not@} need to have a
    //! Postgres server running on your host to use this module: you can
    //! connect to the database over a TCP/IP socket.
    //!
    //! @note
    //! Also note that @b{this module uses blocking I/O@} I/O to connect
    //! to the server. Postgres is quite slow, and so you might want to
    //! consider this particular aspect. It is (at least should be)
    //! thread-safe, and so it can be used in a multithread environment.
    //!
    //! The behavior of the Postgres C API also depends on certain
    //! environment variables defined in the environment of the Pike
    //! interpreter.
    //!
    //! @string
    //!   @value "PGHOST"
    //!     Sets the name of the default host to connect to. It defaults
    //! 	to @expr{"localhost"@}.
    //!   @value "PGOPTIONS"
    //!     Sets some extra flags for the frontend-backend connection.
    //!     @b{do not set@} unless you're sure of what you're doing.
    //!   @value "PGPORT"
    //!     Sets the default port to connect to, otherwise it will use
    //!     compile-time defaults (that is: the time you compiled the postgres
    //! 	library, not the Pike driver).
    //!   @value "PGTTY"
    //!     Sets the file to be used for Postgres frontend debugging.
    //!     Do not use, unless you're sure of what you're doing.
    //!   @value "PGDATABASE"
    //!     Sets the default database to connect to.
    //!   @value "PGREALM"
    //!     Sets the default realm for Kerberos authentication. I never used
    //!   	this, so I can't help you.
    //! @endstring
    //!
    //! Refer to the Postgres documentation for further details.
    //!
    //! @seealso
    //!  @[Sql.Sql], @[Postgres.postgres], @[Sql.postgres_result]
    
    #pike __REAL_VERSION__
    
    #if constant(Postgres.postgres)
    
    #define ERROR(X) throw (({X,backtrace()}))
    
    inherit Postgres.postgres: mo;
    private protected mixed  callout;
    private string has_relexpires = "unknown";
    
    //! @decl void select_db(string dbname)
    //!
    //! This function allows you to connect to a database. Due to
    //! restrictions of the Postgres frontend-backend protocol, you always
    //! have to be connected to a database, so in fact this function just
    //! allows you to connect to a different database on the same server.
    //!
    //! @note
    //! This function @b{can@} raise exceptions if something goes wrong
    //! (backend process not running, not enough permissions..)
    //!
    //! @seealso
    //!   create
    
    //! @decl string error()
    //!
    //! This function returns the textual description of the last
    //! server-related error. Returns @expr{0@} if no error has occurred
    //! yet. It is not cleared upon reading (can be invoked multiple
    //! times, will return the same result until a new error occurs).
    //!
    //! @seealso
    //!   big_query
    
    //! @decl string host_info()
    //!
    //! This function returns a string describing what host are we talking to,
    //! and how (TCP/IP or UNIX sockets).
    
    //! @decl void reset()
    //!
    //! This function resets the connection to the backend. Can be used for
    //! a variety of reasons, for example to detect the status of a connection.
    //!
    //! @note
    //! This function is Postgres-specific, and thus it is not availible
    //! through the generic SQL-interface.
    
    //! @decl string version
    //!
    //! Should you need to report a bug to the author, please submit along with
    //! the report the driver version number, as returned by this call.
    
    private protected string glob_to_regexp (string glob) {
    	if (!glob||!sizeof(glob))
    		return 0;
    	return "^"+replace(glob,({"*","?","'","\\"}),({".*",".","\\'","\\\\"}))+"$";
    }
    
    protected private int mkbool(string s) {
    	if (s=="f")
    		return 0;
    	return 1;
    }
    
    //! @decl void create()
    //! @decl void create(string host, void|string database, void|string user,@
    //!                   void|string password)
    //!
    //! With no arguments, this function initializes (reinitializes if a
    //! connection had been previously set up) a connection to the
    //! Postgres backend. Since Postgres requires a database to be
    //! selected, it will try to connect to the default database. The
    //! connection may fail however for a variety of reasons, in this case
    //! the most likely of all is because you don't have enough authority
    //! to connect to that database. So use of this particular syntax is
    //! discouraged.
    //!
    //! The host argument can have the syntax @expr{"hostname"@} or
    //! @expr{"hostname:portname"@}. This allows to specify the TCP/IP
    //! port to connect to. If it is @expr{0@} or @expr{""@}, it will try
    //! to connect to localhost, default port.
    //!
    //! The database argument specifies the database to connect to. If
    //! @expr{0@} or @expr{""@}, it will try to connect to the specified
    //! database.
    //!
    //! The username and password arguments are silently ignored, since
    //! the Postgres C API doesn't allow to connect to the server as any
    //! user different than the user running the interface.
    //!
    //! @note
    //! You need to have a database selected before using the sql-object,
    //! otherwise you'll get exceptions when you try to query it. Also
    //! notice that this function @b{can@} raise exceptions if the db
    //! server doesn't respond, if the database doesn't exist or is not
    //! accessible by you.
    //!
    //! You don't need bothering about syncronizing the connection to the database:
    //! it is automatically closed (and the database is sync-ed) when the
    //! object is destroyed.
    //!
    //! @seealso
    //!   @[Postgres.postgres], @[Sql.Sql], @[postgres->select_db]
    void create(void|string host, void|string database, void|string user,
    		void|string _pass) {
    	string pass = _pass;
    	_pass = "CENSORED";
    	string real_host=host, real_db=database;
    	int port=0;
    	quote = this->_quote ? this->_quote : simple_quote;
    	if (stringp(host)&&(search(host,":")>=0))
    		if (sscanf(host,"%s:%d",real_host,port)!=2)
    			ERROR("Error in parsing the hostname argument.\n");
    	
    	mo::create(real_host||"",real_db||"",user||"",pass||"",port);
    }
    
    protected void poll (int delay)
    {
    	callout=call_out(poll,delay,delay);
    	big_query("");
    }
    
    //! @decl void set_notify_callback()
    //! @decl void set_notify_callback(function f)
    //! @decl void set_notify_callback(function f, int|float poll_delay)
    //!
    //! With Postgres you can associate events and notifications to tables.
    //! This function allows you to detect and handle such events.
    //!
    //! With no arguments, resets and removes any callback you might have
    //! put previously, and any polling cycle.
    //!
    //! With one argument, sets the notification callback (there can be only
    //! one for each sqlobject). 
    //! 
    //! With two arguments, sets a notification callback and sets a polling
    //! cycle.
    //!
    //! The polling cycle is necessary because of the way notifications are
    //! delivered, that is piggyback with a query result. This means that
    //! if you don't do any query, you'll receive no notification. The polling
    //! cycle starts a call_out cycle which will do an empty query when
    //! the specified interval expires, so that pending notifications 
    //! may be delivered.
    //!
    //! The callback function must return no value, and takes a string argument,
    //! which will be the name of the table on which the notification event
    //! has occured. In future versions, support for user-specified arguments
    //! will be added.
    //!
    //! @note
    //! The polling cycle can be run only if your process is in "event-driven mode"
    //! (that is, if 'main' has returned a negative number).
    //!
    //! This function is Postgres-specific, and thus it is not availible
    //! through the generic SQL-interface.
    //!
    //! @fixme
    //! An integer can be passed as first argument, but it's effect is
    //! not documented.
    void set_notify_callback(int|function f, int|float|void poll_delay) {
    	if (callout) {
    		remove_call_out(callout);
    		callout=0;
    	}
    	if (intp(f)) {
    		mo::_set_notify_callback(0);
    		return;
    	}
    	mo::_set_notify_callback(f);
    	if(poll_delay>0) 
    		poll(poll_delay);
    }
    
    function quote;
    string simple_quote(string s)
    {
      return replace(s, ({ "\\", "'", "\0" }), ({ "\\\\", "''", "\\0" }) );
    }
    
    //! This function creates a new database with the given name (assuming we
    //! have enough permissions to do this).
    //!
    //! @seealso
    //!   drop_db
    void create_db(string db) {
    	big_query(sprintf("CREATE DATABASE %s",db));
    }
    
    //! This function destroys a database and all the data it contains (assuming
    //! we have enough permissions to do so).
    //!
    //! @seealso
    //!   create_db
    void drop_db(string db) {
    	big_query(sprintf("DROP database %s",db));
    }
    
    //! This function returns a string describing the server we are
    //! talking to. It has the form @expr{"servername/serverversion"@}
    //! (like the HTTP protocol description) and is most useful in
    //! conjunction with the generic SQL-server module.
    string server_info () {
      return "Postgres/unknown";
    }
    
    //! Lists all the databases available on the server.
    //! If glob is specified, lists only those databases matching it.
    array(string) list_dbs (void|string glob) {
    	array name,ret=({});
    	object res=
    		big_query(
    				"SELECT datname from pg_database"+
    				((glob&&sizeof(glob))? " WHERE datname ~ '"+glob_to_regexp(glob)+"'" : "")
    				);
    	while (name=res->fetch_row()) {
    		ret += ({name[0]});
    	}
    	return sort(ret);
    }
    
    //! Returns an array containing the names of all the tables in the currently
    //! selected database.
    //! If a glob is specified, it will return only those tables
    //! whose name matches it.
    array(string) list_tables (void|string glob) {
    	array name,ret=({});
    	object res;
    	res=big_query(
    			"SELECT relname, relkind FROM pg_class, pg_user "
    			"WHERE ( relkind = 'r' OR relkind = 'i' OR relkind = 'S') "
    			"AND relname !~ '^pg_' "
    			"AND usesysid = relowner " +
    			((glob && sizeof(glob)) ? "AND relname ~ '"+glob_to_regexp(glob)+"' " : "") +
    			"ORDER BY relname"
    			);
    	while (name=res->fetch_row()) {
    		ret += ({name[0]});
    	}
    	return ret;
    }
    
    //! Returns a mapping, indexed on the column name, of mappings describing
    //! the attributes of a table of the current database.
    //! If a glob is specified, will return descriptions only of the columns
    //! matching it.
    //!
    //! The currently defined fields are:
    //!
    //! @mapping
    //!   @member int "has_rules"
    //!
    //!   @member int "is_shared"
    //!
    //!   @member string "owner"
    //!     The textual representation of a Postgres uid.
    //!
    //!   @member string "length"
    //!
    //!   @member string "text"
    //!     A textual description of the internal (to the server) type-name
    //!
    //!   @member mixed "default"
    //!
    //!   @member string "expires"
    //!     The "relexpires" attribute for the table. Obsolescent; modern
    //!     versions of Postgres don't seem to use this feature, so don't
    //!     count on this field to contain any useful value.
    //!
    //! @endmapping
    //!
    array(mapping(string:mixed)) list_fields (string table, void|string wild)
    {
      array row, ret=({});
      string schema;
    
      if (has_relexpires == "unknown")
      {
        if (catch (big_query("SELECT relexpires FROM pg_class WHERE 1 = 0")))
          has_relexpires = "no";
        else
          has_relexpires = "yes";
      }
    
      sscanf(table, "%s.%s", schema, table);
    
      object res = big_query(
    	"SELECT a.attnum, a.attname, t.typname, a.attlen, c.relowner, "
    	"c.relisshared, c.relhasrules, t.typdefault " +
            (has_relexpires == "yes" ? ", c.relexpires " : "") +
    	(schema ? ", s.schemaname " : "") +
    	"FROM pg_class c, pg_attribute a, pg_type t " +
    	(schema ? ", pg_tables s " : "") +
    	"WHERE c.relname = '"+table+"' AND a.attnum > 0 " +
    	(schema ? "AND s.tablename = '"+table+"' " : "") +
    	"AND a.attrelid = c.oid AND a.atttypid = t.oid ORDER BY attnum");
    
      while (row = res->fetch_row())
      {
        if (wild && sizeof(wild) && !glob(wild, row[1]))
          continue;
        ret +=
          ({ ([
    	 "name":	row[1],
             "type":	row[2],
             "length":	row[3],
    	 "owner":	row[4],
             "is_shared":	mkbool(row[5]),
    	 "has_rules":   mkbool(row[6]),
    	 "default":     row[7],
             "expires":     (sizeof(row) > 8 ? row[8] : 0)
           ]) });
      }
      return ret;
    }
    
    //! This is the only provided interface which allows you to query the
    //! database. If you wish to use the simpler "query" function, you need to
    //! use the @[Sql.Sql] generic SQL-object.
    //!
    //! It returns a postgres_result object (which conforms to the
    //! @[Sql.sql_result] standard interface for accessing data). I
    //! recommend using @[query()] for simpler queries (because it is
    //! easier to handle, but stores all the result in memory), and
    //! @[big_query()] for queries you expect to return huge amounts of
    //! data (it's harder to handle, but fetches results on demand).
    //!
    //! @note
    //! This function @b{can@} raise exceptions.
    //!
    //! @seealso
    //!   @[Sql.Sql], @[Sql.sql_result]
    int|object big_query(object|string q, mapping(string|int:mixed)|void bindings)
    {  
      if(stringp(q) && String.width(q)>8)
        q=string_to_utf8(q);
      if (!bindings)
        return ::big_query(q);
      int pi=0,rep=0;
      array(string|int) paramValues=allocate(sizeof(bindings));
      array(string) from=allocate(sizeof(bindings));
      array(string) to=allocate(sizeof(bindings));
      foreach(bindings; mixed name; mixed value) {
        // Throws if mapping key is empty string.
        if(stringp(name)) {
          if(name[0]!=':')
            name=":"+name;
          if(name[1]=='_') {
            // Special parameter
            continue;
          }
        }
        from[rep]=name;
        string rval;
        if(multisetp(value)) {
          rval=sizeof(value) ? indices(value)[0] : "";
        }
        else {
          if(zero_type(value))
            paramValues[pi++]=UNDEFINED;
          else {
            if(stringp(value) && String.width(value)>8)
              value=string_to_utf8(value);
            paramValues[pi++]=(string)value;
          }
          rval="$"+(string)pi;
        }
        to[rep++]=rval;
      }
      paramValues= pi ? paramValues[..pi-1] : UNDEFINED;
      if(rep--) {
        q=replace(q,from[..rep],to[..rep]);
      }
      return ::big_query(q, paramValues);
    }
    
    #else
    constant this_program_does_not_exist=1;
    #endif /* constant(Postgres.postgres) */