-struct redisCommand readonlyCommandTable[] = {
- {"get",getCommand,2,0,NULL,1,1,1},
- {"set",setCommand,3,REDIS_CMD_DENYOOM,NULL,0,0,0},
- {"setnx",setnxCommand,3,REDIS_CMD_DENYOOM,NULL,0,0,0},
- {"setex",setexCommand,4,REDIS_CMD_DENYOOM,NULL,0,0,0},
- {"append",appendCommand,3,REDIS_CMD_DENYOOM,NULL,1,1,1},
- {"substr",substrCommand,4,0,NULL,1,1,1},
- {"strlen",strlenCommand,2,0,NULL,1,1,1},
- {"del",delCommand,-2,0,NULL,0,0,0},
- {"exists",existsCommand,2,0,NULL,1,1,1},
- {"incr",incrCommand,2,REDIS_CMD_DENYOOM,NULL,1,1,1},
- {"decr",decrCommand,2,REDIS_CMD_DENYOOM,NULL,1,1,1},
- {"mget",mgetCommand,-2,0,NULL,1,-1,1},
- {"rpush",rpushCommand,3,REDIS_CMD_DENYOOM,NULL,1,1,1},
- {"lpush",lpushCommand,3,REDIS_CMD_DENYOOM,NULL,1,1,1},
- {"rpushx",rpushxCommand,3,REDIS_CMD_DENYOOM,NULL,1,1,1},
- {"lpushx",lpushxCommand,3,REDIS_CMD_DENYOOM,NULL,1,1,1},
- {"linsert",linsertCommand,5,REDIS_CMD_DENYOOM,NULL,1,1,1},
- {"rpop",rpopCommand,2,0,NULL,1,1,1},
- {"lpop",lpopCommand,2,0,NULL,1,1,1},
- {"brpop",brpopCommand,-3,0,NULL,1,1,1},
- {"brpoplpush",brpoplpushCommand,4,REDIS_CMD_DENYOOM,NULL,1,2,1},
- {"blpop",blpopCommand,-3,0,NULL,1,1,1},
- {"llen",llenCommand,2,0,NULL,1,1,1},
- {"lindex",lindexCommand,3,0,NULL,1,1,1},
- {"lset",lsetCommand,4,REDIS_CMD_DENYOOM,NULL,1,1,1},
- {"lrange",lrangeCommand,4,0,NULL,1,1,1},
- {"ltrim",ltrimCommand,4,0,NULL,1,1,1},
- {"lrem",lremCommand,4,0,NULL,1,1,1},
- {"rpoplpush",rpoplpushCommand,3,REDIS_CMD_DENYOOM,NULL,1,2,1},
- {"sadd",saddCommand,3,REDIS_CMD_DENYOOM,NULL,1,1,1},
- {"srem",sremCommand,3,0,NULL,1,1,1},
- {"smove",smoveCommand,4,0,NULL,1,2,1},
- {"sismember",sismemberCommand,3,0,NULL,1,1,1},
- {"scard",scardCommand,2,0,NULL,1,1,1},
- {"spop",spopCommand,2,0,NULL,1,1,1},
- {"srandmember",srandmemberCommand,2,0,NULL,1,1,1},
- {"sinter",sinterCommand,-2,REDIS_CMD_DENYOOM,NULL,1,-1,1},
- {"sinterstore",sinterstoreCommand,-3,REDIS_CMD_DENYOOM,NULL,2,-1,1},
- {"sunion",sunionCommand,-2,REDIS_CMD_DENYOOM,NULL,1,-1,1},
- {"sunionstore",sunionstoreCommand,-3,REDIS_CMD_DENYOOM,NULL,2,-1,1},
- {"sdiff",sdiffCommand,-2,REDIS_CMD_DENYOOM,NULL,1,-1,1},
- {"sdiffstore",sdiffstoreCommand,-3,REDIS_CMD_DENYOOM,NULL,2,-1,1},
- {"smembers",sinterCommand,2,0,NULL,1,1,1},
- {"zadd",zaddCommand,4,REDIS_CMD_DENYOOM,NULL,1,1,1},
- {"zincrby",zincrbyCommand,4,REDIS_CMD_DENYOOM,NULL,1,1,1},
- {"zrem",zremCommand,3,0,NULL,1,1,1},
- {"zremrangebyscore",zremrangebyscoreCommand,4,0,NULL,1,1,1},
- {"zremrangebyrank",zremrangebyrankCommand,4,0,NULL,1,1,1},
- {"zunionstore",zunionstoreCommand,-4,REDIS_CMD_DENYOOM,zunionInterBlockClientOnSwappedKeys,0,0,0},
- {"zinterstore",zinterstoreCommand,-4,REDIS_CMD_DENYOOM,zunionInterBlockClientOnSwappedKeys,0,0,0},
- {"zrange",zrangeCommand,-4,0,NULL,1,1,1},
- {"zrangebyscore",zrangebyscoreCommand,-4,0,NULL,1,1,1},
- {"zrevrangebyscore",zrevrangebyscoreCommand,-4,0,NULL,1,1,1},
- {"zcount",zcountCommand,4,0,NULL,1,1,1},
- {"zrevrange",zrevrangeCommand,-4,0,NULL,1,1,1},
- {"zcard",zcardCommand,2,0,NULL,1,1,1},
- {"zscore",zscoreCommand,3,0,NULL,1,1,1},
- {"zrank",zrankCommand,3,0,NULL,1,1,1},
- {"zrevrank",zrevrankCommand,3,0,NULL,1,1,1},
- {"hset",hsetCommand,4,REDIS_CMD_DENYOOM,NULL,1,1,1},
- {"hsetnx",hsetnxCommand,4,REDIS_CMD_DENYOOM,NULL,1,1,1},
- {"hget",hgetCommand,3,0,NULL,1,1,1},
- {"hmset",hmsetCommand,-4,REDIS_CMD_DENYOOM,NULL,1,1,1},
- {"hmget",hmgetCommand,-3,0,NULL,1,1,1},
- {"hincrby",hincrbyCommand,4,REDIS_CMD_DENYOOM,NULL,1,1,1},
- {"hdel",hdelCommand,3,0,NULL,1,1,1},
- {"hlen",hlenCommand,2,0,NULL,1,1,1},
- {"hkeys",hkeysCommand,2,0,NULL,1,1,1},
- {"hvals",hvalsCommand,2,0,NULL,1,1,1},
- {"hgetall",hgetallCommand,2,0,NULL,1,1,1},
- {"hexists",hexistsCommand,3,0,NULL,1,1,1},
- {"incrby",incrbyCommand,3,REDIS_CMD_DENYOOM,NULL,1,1,1},
- {"decrby",decrbyCommand,3,REDIS_CMD_DENYOOM,NULL,1,1,1},
- {"getset",getsetCommand,3,REDIS_CMD_DENYOOM,NULL,1,1,1},
- {"mset",msetCommand,-3,REDIS_CMD_DENYOOM,NULL,1,-1,2},
- {"msetnx",msetnxCommand,-3,REDIS_CMD_DENYOOM,NULL,1,-1,2},
- {"randomkey",randomkeyCommand,1,0,NULL,0,0,0},
- {"select",selectCommand,2,0,NULL,0,0,0},
- {"move",moveCommand,3,0,NULL,1,1,1},
- {"rename",renameCommand,3,0,NULL,1,1,1},
- {"renamenx",renamenxCommand,3,0,NULL,1,1,1},
- {"expire",expireCommand,3,0,NULL,0,0,0},
- {"expireat",expireatCommand,3,0,NULL,0,0,0},
- {"keys",keysCommand,2,0,NULL,0,0,0},
- {"dbsize",dbsizeCommand,1,0,NULL,0,0,0},
- {"auth",authCommand,2,0,NULL,0,0,0},
- {"ping",pingCommand,1,0,NULL,0,0,0},
- {"echo",echoCommand,2,0,NULL,0,0,0},
- {"save",saveCommand,1,0,NULL,0,0,0},
- {"bgsave",bgsaveCommand,1,0,NULL,0,0,0},
- {"bgrewriteaof",bgrewriteaofCommand,1,0,NULL,0,0,0},
- {"shutdown",shutdownCommand,1,0,NULL,0,0,0},
- {"lastsave",lastsaveCommand,1,0,NULL,0,0,0},
- {"type",typeCommand,2,0,NULL,1,1,1},
- {"multi",multiCommand,1,0,NULL,0,0,0},
- {"exec",execCommand,1,REDIS_CMD_DENYOOM,execBlockClientOnSwappedKeys,0,0,0},
- {"discard",discardCommand,1,0,NULL,0,0,0},
- {"sync",syncCommand,1,0,NULL,0,0,0},
- {"flushdb",flushdbCommand,1,0,NULL,0,0,0},
- {"flushall",flushallCommand,1,0,NULL,0,0,0},
- {"sort",sortCommand,-2,REDIS_CMD_DENYOOM,NULL,1,1,1},
- {"info",infoCommand,1,0,NULL,0,0,0},
- {"monitor",monitorCommand,1,0,NULL,0,0,0},
- {"ttl",ttlCommand,2,0,NULL,1,1,1},
- {"persist",persistCommand,2,0,NULL,1,1,1},
- {"slaveof",slaveofCommand,3,0,NULL,0,0,0},
- {"debug",debugCommand,-2,0,NULL,0,0,0},
- {"config",configCommand,-2,0,NULL,0,0,0},
- {"subscribe",subscribeCommand,-2,0,NULL,0,0,0},
- {"unsubscribe",unsubscribeCommand,-1,0,NULL,0,0,0},
- {"psubscribe",psubscribeCommand,-2,0,NULL,0,0,0},
- {"punsubscribe",punsubscribeCommand,-1,0,NULL,0,0,0},
- {"publish",publishCommand,3,REDIS_CMD_FORCE_REPLICATION,NULL,0,0,0},
- {"watch",watchCommand,-2,0,NULL,0,0,0},
- {"unwatch",unwatchCommand,1,0,NULL,0,0,0}
+
+/* Our command table.
+ *
+ * Every entry is composed of the following fields:
+ *
+ * name: a string representing the command name.
+ * function: pointer to the C function implementing the command.
+ * arity: number of arguments, it is possible to use -N to say >= N
+ * sflags: command flags as string. See below for a table of flags.
+ * flags: flags as bitmask. Computed by Redis using the 'sflags' field.
+ * get_keys_proc: an optional function to get key arguments from a command.
+ * This is only used when the following three fields are not
+ * enough to specify what arguments are keys.
+ * first_key_index: first argument that is a key
+ * last_key_index: last argument that is a key
+ * key_step: step to get all the keys from first to last argument. For instance
+ * in MSET the step is two since arguments are key,val,key,val,...
+ * microseconds: microseconds of total execution time for this command.
+ * calls: total number of calls of this command.
+ *
+ * The flags, microseconds and calls fields are computed by Redis and should
+ * always be set to zero.
+ *
+ * Command flags are expressed using strings where every character represents
+ * a flag. Later the populateCommandTable() function will take care of
+ * populating the real 'flags' field using this characters.
+ *
+ * This is the meaning of the flags:
+ *
+ * w: write command (may modify the key space).
+ * r: read command (will never modify the key space).
+ * m: may increase memory usage once called. Don't allow if out of memory.
+ * a: admin command, like SAVE or SHUTDOWN.
+ * p: Pub/Sub related command.
+ * f: force replication of this command, regarless of server.dirty.
+ * s: command not allowed in scripts.
+ * R: random command. Command is not deterministic, that is, the same command
+ * with the same arguments, with the same key space, may have different
+ * results. For instance SPOP and RANDOMKEY are two random commands.
+ * S: Sort command output array if called from script, so that the output
+ * is deterministic.
+ * l: Allow command while loading the database.
+ * t: Allow command while a slave has stale data but is not allowed to
+ * server this data. Normally no command is accepted in this condition
+ * but just a few.
+ */
+struct redisCommand redisCommandTable[] = {
+ {"get",getCommand,2,"r",0,NULL,1,1,1,0,0},
+ {"set",setCommand,3,"wm",0,noPreloadGetKeys,1,1,1,0,0},
+ {"setnx",setnxCommand,3,"wm",0,noPreloadGetKeys,1,1,1,0,0},
+ {"setex",setexCommand,4,"wm",0,noPreloadGetKeys,1,1,1,0,0},
+ {"psetex",psetexCommand,4,"wm",0,noPreloadGetKeys,1,1,1,0,0},
+ {"append",appendCommand,3,"wm",0,NULL,1,1,1,0,0},
+ {"strlen",strlenCommand,2,"r",0,NULL,1,1,1,0,0},
+ {"del",delCommand,-2,"w",0,noPreloadGetKeys,1,-1,1,0,0},
+ {"exists",existsCommand,2,"r",0,NULL,1,1,1,0,0},
+ {"setbit",setbitCommand,4,"wm",0,NULL,1,1,1,0,0},
+ {"getbit",getbitCommand,3,"r",0,NULL,1,1,1,0,0},
+ {"setrange",setrangeCommand,4,"wm",0,NULL,1,1,1,0,0},
+ {"getrange",getrangeCommand,4,"r",0,NULL,1,1,1,0,0},
+ {"substr",getrangeCommand,4,"r",0,NULL,1,1,1,0,0},
+ {"incr",incrCommand,2,"wm",0,NULL,1,1,1,0,0},
+ {"decr",decrCommand,2,"wm",0,NULL,1,1,1,0,0},
+ {"mget",mgetCommand,-2,"r",0,NULL,1,-1,1,0,0},
+ {"rpush",rpushCommand,-3,"wm",0,NULL,1,1,1,0,0},
+ {"lpush",lpushCommand,-3,"wm",0,NULL,1,1,1,0,0},
+ {"rpushx",rpushxCommand,3,"wm",0,NULL,1,1,1,0,0},
+ {"lpushx",lpushxCommand,3,"wm",0,NULL,1,1,1,0,0},
+ {"linsert",linsertCommand,5,"wm",0,NULL,1,1,1,0,0},
+ {"rpop",rpopCommand,2,"w",0,NULL,1,1,1,0,0},
+ {"lpop",lpopCommand,2,"w",0,NULL,1,1,1,0,0},
+ {"brpop",brpopCommand,-3,"ws",0,NULL,1,1,1,0,0},
+ {"brpoplpush",brpoplpushCommand,4,"wms",0,NULL,1,2,1,0,0},
+ {"blpop",blpopCommand,-3,"ws",0,NULL,1,-2,1,0,0},
+ {"llen",llenCommand,2,"r",0,NULL,1,1,1,0,0},
+ {"lindex",lindexCommand,3,"r",0,NULL,1,1,1,0,0},
+ {"lset",lsetCommand,4,"wm",0,NULL,1,1,1,0,0},
+ {"lrange",lrangeCommand,4,"r",0,NULL,1,1,1,0,0},
+ {"ltrim",ltrimCommand,4,"w",0,NULL,1,1,1,0,0},
+ {"lrem",lremCommand,4,"w",0,NULL,1,1,1,0,0},
+ {"rpoplpush",rpoplpushCommand,3,"wm",0,NULL,1,2,1,0,0},
+ {"sadd",saddCommand,-3,"wm",0,NULL,1,1,1,0,0},
+ {"srem",sremCommand,-3,"w",0,NULL,1,1,1,0,0},
+ {"smove",smoveCommand,4,"w",0,NULL,1,2,1,0,0},
+ {"sismember",sismemberCommand,3,"r",0,NULL,1,1,1,0,0},
+ {"scard",scardCommand,2,"r",0,NULL,1,1,1,0,0},
+ {"spop",spopCommand,2,"wRs",0,NULL,1,1,1,0,0},
+ {"srandmember",srandmemberCommand,2,"rR",0,NULL,1,1,1,0,0},
+ {"sinter",sinterCommand,-2,"rS",0,NULL,1,-1,1,0,0},
+ {"sinterstore",sinterstoreCommand,-3,"wm",0,NULL,1,-1,1,0,0},
+ {"sunion",sunionCommand,-2,"rS",0,NULL,1,-1,1,0,0},
+ {"sunionstore",sunionstoreCommand,-3,"wm",0,NULL,1,-1,1,0,0},
+ {"sdiff",sdiffCommand,-2,"rS",0,NULL,1,-1,1,0,0},
+ {"sdiffstore",sdiffstoreCommand,-3,"wm",0,NULL,1,-1,1,0,0},
+ {"smembers",sinterCommand,2,"rS",0,NULL,1,1,1,0,0},
+ {"zadd",zaddCommand,-4,"wm",0,NULL,1,1,1,0,0},
+ {"zincrby",zincrbyCommand,4,"wm",0,NULL,1,1,1,0,0},
+ {"zrem",zremCommand,-3,"w",0,NULL,1,1,1,0,0},
+ {"zremrangebyscore",zremrangebyscoreCommand,4,"w",0,NULL,1,1,1,0,0},
+ {"zremrangebyrank",zremrangebyrankCommand,4,"w",0,NULL,1,1,1,0,0},
+ {"zunionstore",zunionstoreCommand,-4,"wm",0,zunionInterGetKeys,0,0,0,0,0},
+ {"zinterstore",zinterstoreCommand,-4,"wm",0,zunionInterGetKeys,0,0,0,0,0},
+ {"zrange",zrangeCommand,-4,"r",0,NULL,1,1,1,0,0},
+ {"zrangebyscore",zrangebyscoreCommand,-4,"r",0,NULL,1,1,1,0,0},
+ {"zrevrangebyscore",zrevrangebyscoreCommand,-4,"r",0,NULL,1,1,1,0,0},
+ {"zcount",zcountCommand,4,"r",0,NULL,1,1,1,0,0},
+ {"zrevrange",zrevrangeCommand,-4,"r",0,NULL,1,1,1,0,0},
+ {"zcard",zcardCommand,2,"r",0,NULL,1,1,1,0,0},
+ {"zscore",zscoreCommand,3,"r",0,NULL,1,1,1,0,0},
+ {"zrank",zrankCommand,3,"r",0,NULL,1,1,1,0,0},
+ {"zrevrank",zrevrankCommand,3,"r",0,NULL,1,1,1,0,0},
+ {"hset",hsetCommand,4,"wm",0,NULL,1,1,1,0,0},
+ {"hsetnx",hsetnxCommand,4,"wm",0,NULL,1,1,1,0,0},
+ {"hget",hgetCommand,3,"r",0,NULL,1,1,1,0,0},
+ {"hmset",hmsetCommand,-4,"wm",0,NULL,1,1,1,0,0},
+ {"hmget",hmgetCommand,-3,"r",0,NULL,1,1,1,0,0},
+ {"hincrby",hincrbyCommand,4,"wm",0,NULL,1,1,1,0,0},
+ {"hincrbyfloat",hincrbyfloatCommand,4,"wm",0,NULL,1,1,1,0,0},
+ {"hdel",hdelCommand,-3,"w",0,NULL,1,1,1,0,0},
+ {"hlen",hlenCommand,2,"r",0,NULL,1,1,1,0,0},
+ {"hkeys",hkeysCommand,2,"rS",0,NULL,1,1,1,0,0},
+ {"hvals",hvalsCommand,2,"rS",0,NULL,1,1,1,0,0},
+ {"hgetall",hgetallCommand,2,"r",0,NULL,1,1,1,0,0},
+ {"hexists",hexistsCommand,3,"r",0,NULL,1,1,1,0,0},
+ {"incrby",incrbyCommand,3,"wm",0,NULL,1,1,1,0,0},
+ {"decrby",decrbyCommand,3,"wm",0,NULL,1,1,1,0,0},
+ {"incrbyfloat",incrbyfloatCommand,3,"wm",0,NULL,1,1,1,0,0},
+ {"getset",getsetCommand,3,"wm",0,NULL,1,1,1,0,0},
+ {"mset",msetCommand,-3,"wm",0,NULL,1,-1,2,0,0},
+ {"msetnx",msetnxCommand,-3,"wm",0,NULL,1,-1,2,0,0},
+ {"randomkey",randomkeyCommand,1,"rR",0,NULL,0,0,0,0,0},
+ {"select",selectCommand,2,"r",0,NULL,0,0,0,0,0},
+ {"move",moveCommand,3,"w",0,NULL,1,1,1,0,0},
+ {"rename",renameCommand,3,"w",0,renameGetKeys,1,2,1,0,0},
+ {"renamenx",renamenxCommand,3,"w",0,renameGetKeys,1,2,1,0,0},
+ {"expire",expireCommand,3,"w",0,NULL,1,1,1,0,0},
+ {"expireat",expireatCommand,3,"w",0,NULL,1,1,1,0,0},
+ {"pexpire",pexpireCommand,3,"w",0,NULL,1,1,1,0,0},
+ {"pexpireat",pexpireatCommand,3,"w",0,NULL,1,1,1,0,0},
+ {"keys",keysCommand,2,"rS",0,NULL,0,0,0,0,0},
+ {"dbsize",dbsizeCommand,1,"r",0,NULL,0,0,0,0,0},
+ {"auth",authCommand,2,"rs",0,NULL,0,0,0,0,0},
+ {"ping",pingCommand,1,"r",0,NULL,0,0,0,0,0},
+ {"echo",echoCommand,2,"r",0,NULL,0,0,0,0,0},
+ {"save",saveCommand,1,"ars",0,NULL,0,0,0,0,0},
+ {"bgsave",bgsaveCommand,1,"ar",0,NULL,0,0,0,0,0},
+ {"bgrewriteaof",bgrewriteaofCommand,1,"ar",0,NULL,0,0,0,0,0},
+ {"shutdown",shutdownCommand,-1,"ar",0,NULL,0,0,0,0,0},
+ {"lastsave",lastsaveCommand,1,"r",0,NULL,0,0,0,0,0},
+ {"type",typeCommand,2,"r",0,NULL,1,1,1,0,0},
+ {"multi",multiCommand,1,"rs",0,NULL,0,0,0,0,0},
+ {"exec",execCommand,1,"s",0,NULL,0,0,0,0,0},
+ {"discard",discardCommand,1,"rs",0,NULL,0,0,0,0,0},
+ {"sync",syncCommand,1,"ars",0,NULL,0,0,0,0,0},
+ {"replconf",replconfCommand,-1,"ars",0,NULL,0,0,0,0,0},
+ {"flushdb",flushdbCommand,1,"w",0,NULL,0,0,0,0,0},
+ {"flushall",flushallCommand,1,"w",0,NULL,0,0,0,0,0},
+ {"sort",sortCommand,-2,"wm",0,NULL,1,1,1,0,0},
+ {"info",infoCommand,-1,"rlt",0,NULL,0,0,0,0,0},
+ {"monitor",monitorCommand,1,"ars",0,NULL,0,0,0,0,0},
+ {"ttl",ttlCommand,2,"r",0,NULL,1,1,1,0,0},
+ {"pttl",pttlCommand,2,"r",0,NULL,1,1,1,0,0},
+ {"persist",persistCommand,2,"w",0,NULL,1,1,1,0,0},
+ {"slaveof",slaveofCommand,3,"ast",0,NULL,0,0,0,0,0},
+ {"debug",debugCommand,-2,"as",0,NULL,0,0,0,0,0},
+ {"config",configCommand,-2,"ar",0,NULL,0,0,0,0,0},
+ {"subscribe",subscribeCommand,-2,"rpslt",0,NULL,0,0,0,0,0},
+ {"unsubscribe",unsubscribeCommand,-1,"rpslt",0,NULL,0,0,0,0,0},
+ {"psubscribe",psubscribeCommand,-2,"rpslt",0,NULL,0,0,0,0,0},
+ {"punsubscribe",punsubscribeCommand,-1,"rpslt",0,NULL,0,0,0,0,0},
+ {"publish",publishCommand,3,"pflt",0,NULL,0,0,0,0,0},
+ {"watch",watchCommand,-2,"rs",0,noPreloadGetKeys,1,-1,1,0,0},
+ {"unwatch",unwatchCommand,1,"rs",0,NULL,0,0,0,0,0},
+ {"cluster",clusterCommand,-2,"ar",0,NULL,0,0,0,0,0},
+ {"restore",restoreCommand,4,"awm",0,NULL,1,1,1,0,0},
+ {"migrate",migrateCommand,6,"aw",0,NULL,0,0,0,0,0},
+ {"asking",askingCommand,1,"r",0,NULL,0,0,0,0,0},
+ {"dump",dumpCommand,2,"ar",0,NULL,1,1,1,0,0},
+ {"object",objectCommand,-2,"r",0,NULL,2,2,2,0,0},
+ {"client",clientCommand,-2,"ar",0,NULL,0,0,0,0,0},
+ {"eval",evalCommand,-3,"s",0,zunionInterGetKeys,0,0,0,0,0},
+ {"evalsha",evalShaCommand,-3,"s",0,zunionInterGetKeys,0,0,0,0,0},
+ {"slowlog",slowlogCommand,-2,"r",0,NULL,0,0,0,0,0},
+ {"script",scriptCommand,-2,"ras",0,NULL,0,0,0,0,0},
+ {"time",timeCommand,1,"rR",0,NULL,0,0,0,0,0},
+ {"bitop",bitopCommand,-4,"wm",0,NULL,2,-1,1,0,0},
+ {"bitcount",bitcountCommand,-2,"r",0,NULL,1,1,1,0,0}