Skip to content
Snippets Groups Projects
Select Git revision
  • e3a26eab8a92709388debb9cb2763c33de0e7ae3
  • master default protected
  • 8.0
  • 9.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.2016
  • v8.0.2014
  • v8.0.2012
  • v8.0.2008
  • v8.0.2006
  • v8.0.2004
  • v8.0.2002
  • 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
41 results

stuff.c

Blame
    • Fredrik Hübinette (Hubbe)'s avatar
      cb22562e
      committing · cb22562e
      Fredrik Hübinette (Hubbe) authored
      Rev: README:1.1
      Rev: bin/create_testsuite:1.3
      Rev: bin/hilfe.lpc:1.2
      Rev: bin/rsif:1.2
      Rev: bin/uhttpd.lpc:1.2
      Rev: doc/simulated/open:1.1
      Rev: lib/master.lpc:1.2
      Rev: lib/simulate.lpc:1.4
      Rev: lib/testsuite.lpc:1.3
      Rev: src/BUGS:1.3
      Rev: src/Makefile.in:1.6
      Rev: src/Makefile.in.src:1.2
      Rev: src/README:1.2
      Rev: src/add_efun.c:1.2
      Rev: src/add_efun.h:1.2
      Rev: src/array.c:1.4
      Rev: src/array.h:1.2
      Rev: src/backend.c:1.3
      Rev: src/backend.h:1.2
      Rev: src/builtin_efuns.c:1.2
      Rev: src/builtin_efuns.h:1.2
      Rev: src/call_out.c:1.5
      Rev: src/call_out.h:1.2
      Rev: src/callback.c:1.2
      Rev: src/callback.h:1.2
      Rev: src/config.h:1.6
      Rev: src/configure.in:1.9
      Rev: src/debug.c:1.4
      Rev: src/debug.h:1.4
      Rev: src/docode.c:1.4
      Rev: src/docode.h:1.2
      Rev: src/dynamic_buffer.c:1.3
      Rev: src/dynamic_buffer.h:1.2
      Rev: src/efun.h:1.2
      Rev: src/error.c:1.2
      Rev: src/error.h:1.2
      Rev: src/fd_control.c:1.2
      Rev: src/fd_control.h:1.2
      Rev: src/fsort.c:1.2
      Rev: src/fsort.h:1.2
      Rev: src/global.h:1.2
      Rev: src/hashtable.c:1.2
      Rev: src/hashtable.h:1.2
      Rev: src/interpret.c:1.5
      Rev: src/interpret.h:1.2
      Rev: src/language.y:1.3
      Rev: src/las.c:1.3
      Rev: src/las.h:1.3
      Rev: src/lex.c:1.3
      Rev: src/lex.h:1.2
      Rev: src/list.c:1.3
      Rev: src/list.h:1.2
      Rev: src/lpc_signal.c:1.1
      Rev: src/lpc_signal.h:1.1
      Rev: src/lpc_types.c:1.3
      Rev: src/lpc_types.h:1.2
      Rev: src/machine.h.in:1.3
      Rev: src/macros.h:1.4
      Rev: src/main.c:1.8
      Rev: src/main.h:1.2
      Rev: src/mapping.c:1.4
      Rev: src/mapping.h:1.2
      Rev: src/memory.c:1.3
      Rev: src/memory.h:1.2
      Rev: src/module.c:1.2
      Rev: src/module.h:1.2
      Rev: src/modules/files/Makefile.in:1.3
      Rev: src/modules/files/Makefile.in.src:1.2
      Rev: src/modules/files/configure.in:1.5
      Rev: src/modules/files/datagram.c:1.2
      Rev: src/modules/files/efuns.c:1.4
      Rev: src/modules/files/file.c:1.5
      Rev: src/modules/files/file.h:1.3
      Rev: src/modules/files/file_machine.h.in:1.3
      Rev: src/modules/files/socket.c:1.6
      Rev: src/modules/math/Makefile.in:1.4
      Rev: src/modules/math/Makefile.in.src:1.3
      Rev: src/modules/math/math.c:1.2
      Rev: src/modules/regexp/Makefile.in:1.3
      Rev: src/modules/regexp/Makefile.in.src:1.2
      Rev: src/modules/regexp/glue.c:1.2
      Rev: src/modules/regexp/regexp.h:1.2
      Rev: src/modules/sprintf/Makefile.in:1.3
      Rev: src/modules/sprintf/Makefile.in.src:1.2
      Rev: src/modules/sprintf/sprintf.c:1.2
      Rev: src/object.c:1.3
      Rev: src/object.h:1.2
      Rev: src/opcodes.c:1.6
      Rev: src/opcodes.h:1.2
      Rev: src/operators.c:1.3
      Rev: src/operators.h:1.2
      Rev: src/otable.h:1.2
      Rev: src/port.c:1.9
      Rev: src/port.h:1.4
      Rev: src/program.h:1.2
      Rev: src/rusage.c:1.3
      Rev: src/rusage.h:1.2
      Rev: src/stralloc.c:1.3
      Rev: src/stralloc.h:1.3
      Rev: src/stuff.c:1.2
      Rev: src/stuff.h:1.2
      Rev: src/svalue.c:1.4
      Rev: src/svalue.h:1.2
      Rev: src/todo:1.2
      Rev: src/types.h:1.6
      Rev: src/ualarm.c:1.2
      cb22562e
      History
      committing
      Fredrik Hübinette (Hubbe) authored
      Rev: README:1.1
      Rev: bin/create_testsuite:1.3
      Rev: bin/hilfe.lpc:1.2
      Rev: bin/rsif:1.2
      Rev: bin/uhttpd.lpc:1.2
      Rev: doc/simulated/open:1.1
      Rev: lib/master.lpc:1.2
      Rev: lib/simulate.lpc:1.4
      Rev: lib/testsuite.lpc:1.3
      Rev: src/BUGS:1.3
      Rev: src/Makefile.in:1.6
      Rev: src/Makefile.in.src:1.2
      Rev: src/README:1.2
      Rev: src/add_efun.c:1.2
      Rev: src/add_efun.h:1.2
      Rev: src/array.c:1.4
      Rev: src/array.h:1.2
      Rev: src/backend.c:1.3
      Rev: src/backend.h:1.2
      Rev: src/builtin_efuns.c:1.2
      Rev: src/builtin_efuns.h:1.2
      Rev: src/call_out.c:1.5
      Rev: src/call_out.h:1.2
      Rev: src/callback.c:1.2
      Rev: src/callback.h:1.2
      Rev: src/config.h:1.6
      Rev: src/configure.in:1.9
      Rev: src/debug.c:1.4
      Rev: src/debug.h:1.4
      Rev: src/docode.c:1.4
      Rev: src/docode.h:1.2
      Rev: src/dynamic_buffer.c:1.3
      Rev: src/dynamic_buffer.h:1.2
      Rev: src/efun.h:1.2
      Rev: src/error.c:1.2
      Rev: src/error.h:1.2
      Rev: src/fd_control.c:1.2
      Rev: src/fd_control.h:1.2
      Rev: src/fsort.c:1.2
      Rev: src/fsort.h:1.2
      Rev: src/global.h:1.2
      Rev: src/hashtable.c:1.2
      Rev: src/hashtable.h:1.2
      Rev: src/interpret.c:1.5
      Rev: src/interpret.h:1.2
      Rev: src/language.y:1.3
      Rev: src/las.c:1.3
      Rev: src/las.h:1.3
      Rev: src/lex.c:1.3
      Rev: src/lex.h:1.2
      Rev: src/list.c:1.3
      Rev: src/list.h:1.2
      Rev: src/lpc_signal.c:1.1
      Rev: src/lpc_signal.h:1.1
      Rev: src/lpc_types.c:1.3
      Rev: src/lpc_types.h:1.2
      Rev: src/machine.h.in:1.3
      Rev: src/macros.h:1.4
      Rev: src/main.c:1.8
      Rev: src/main.h:1.2
      Rev: src/mapping.c:1.4
      Rev: src/mapping.h:1.2
      Rev: src/memory.c:1.3
      Rev: src/memory.h:1.2
      Rev: src/module.c:1.2
      Rev: src/module.h:1.2
      Rev: src/modules/files/Makefile.in:1.3
      Rev: src/modules/files/Makefile.in.src:1.2
      Rev: src/modules/files/configure.in:1.5
      Rev: src/modules/files/datagram.c:1.2
      Rev: src/modules/files/efuns.c:1.4
      Rev: src/modules/files/file.c:1.5
      Rev: src/modules/files/file.h:1.3
      Rev: src/modules/files/file_machine.h.in:1.3
      Rev: src/modules/files/socket.c:1.6
      Rev: src/modules/math/Makefile.in:1.4
      Rev: src/modules/math/Makefile.in.src:1.3
      Rev: src/modules/math/math.c:1.2
      Rev: src/modules/regexp/Makefile.in:1.3
      Rev: src/modules/regexp/Makefile.in.src:1.2
      Rev: src/modules/regexp/glue.c:1.2
      Rev: src/modules/regexp/regexp.h:1.2
      Rev: src/modules/sprintf/Makefile.in:1.3
      Rev: src/modules/sprintf/Makefile.in.src:1.2
      Rev: src/modules/sprintf/sprintf.c:1.2
      Rev: src/object.c:1.3
      Rev: src/object.h:1.2
      Rev: src/opcodes.c:1.6
      Rev: src/opcodes.h:1.2
      Rev: src/operators.c:1.3
      Rev: src/operators.h:1.2
      Rev: src/otable.h:1.2
      Rev: src/port.c:1.9
      Rev: src/port.h:1.4
      Rev: src/program.h:1.2
      Rev: src/rusage.c:1.3
      Rev: src/rusage.h:1.2
      Rev: src/stralloc.c:1.3
      Rev: src/stralloc.h:1.3
      Rev: src/stuff.c:1.2
      Rev: src/stuff.h:1.2
      Rev: src/svalue.c:1.4
      Rev: src/svalue.h:1.2
      Rev: src/todo:1.2
      Rev: src/types.h:1.6
      Rev: src/ualarm.c:1.2
    stuff.c 2.23 KiB
    /*\
    ||| This file a part of uLPC, and is copyright by Fredrik Hubinette
    ||| uLPC is distributed as GPL (General Public License)
    ||| See the files COPYING and DISCLAIMER for more information.
    \*/
    #include "stuff.h"
    
    /* same thing as (int)floor(log((double)x) / log(2.0)) */
    /* Except a bit quicker :) (hopefully) */
    
    int my_log2(unsigned INT32 x)
    {
      static char bit[256] =
      {
        -1, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 
         4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 
         5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
         5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 
         6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 
         6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 
         6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 
         6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 
         7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 
         7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 
         7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 
         7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 
         7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 
         7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 
         7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 
         7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 
      };
      register unsigned int tmp;
      if(tmp=(x>>16))
      {
        if(x=(tmp>>8)) return bit[x]+24;
        return bit[tmp]+16;
      }
      if(tmp=(x>>8)) return bit[tmp]+8;
      return bit[x];
    }
    
    
    /* Return the number of bits in a 32-bit integer */
    int count_bits(unsigned INT32 x)
    {
    #define B(X) X+0,X+1,X+1,X+2,\
                 X+1,X+2,X+2,X+3,\
                 X+1,X+2,X+2,X+3,\
                 X+2,X+3,X+3,X+4
      static char bits[256] =
      {
        B(0), B(1), B(1), B(2),
        B(1), B(2), B(2), B(3),
        B(1), B(2), B(2), B(3),
        B(2), B(3), B(3), B(4)
      };
    
      return (bits[x & 255] +
    	  bits[(x>>8) & 255] +
    	  bits[(x>>16) & 255] +
    	  bits[(x>>24) & 255]);
    }
    
    /* Return true for integers with more than one bit set */
    int is_more_than_one_bit(unsigned INT32 x)
    {
      return ((x & 0xaaaaaaaa) && (x & 0x55555555)) ||
             ((x & 0xcccccccc) && (x & 0x33333333)) ||
             ((x & 0xf0f0f0f0) && (x & 0x0f0f0f0f)) ||
             ((x & 0xff00ff00) && (x & 0x00ff00ff)) ||
             ((x & 0xff00ff00) && (x & 0x00ff00ff)) ||
             ((x & 0xffff0000) && (x & 0x0000ffff));
    }