![ca333@users.noreply.github.com](/assets/img/avatar_default.png)
committed by
GitHub
![GitHub](/assets/img/avatar_default.png)
29 changed files with 1122 additions and 429 deletions
@ -1,2 +1,2 @@ |
|||||
#!/bin/sh |
#!/bin/sh |
||||
gcc -std=c++11 -I../secp256k1/include -I../univalue/include -I../cryptoconditions/include -I../cryptoconditions/src -I../cryptoconditions/src/asn -I.. -I. -fPIC -shared -c -o ../libcc.so cclib.cpp |
gcc -std=c++11 -I../secp256k1/include -I../univalue/include -I../cryptoconditions/include -I../cryptoconditions/src -I../cryptoconditions/src/asn -I.. -I. -fPIC -shared -c -o ../libcc.so cclib.cpp |
||||
|
@ -0,0 +1,280 @@ |
|||||
|
/******************************************************************************
|
||||
|
* Copyright © 2014-2019 The SuperNET Developers. * |
||||
|
* * |
||||
|
* See the AUTHORS, DEVELOPER-AGREEMENT and LICENSE files at * |
||||
|
* the top-level directory of this distribution for the individual copyright * |
||||
|
* holder information and the developer policies on copyright and licensing. * |
||||
|
* * |
||||
|
* Unless otherwise agreed in a custom licensing agreement, no part of the * |
||||
|
* SuperNET software, including this file may be copied, modified, propagated * |
||||
|
* or distributed except according to the terms contained in the LICENSE file * |
||||
|
* * |
||||
|
* Removal or modification of this copyright notice is prohibited. * |
||||
|
* * |
||||
|
******************************************************************************/ |
||||
|
|
||||
|
|
||||
|
#include "../secp256k1/include/secp256k1.h" |
||||
|
//#include "../secp256k1/include/secp256k1_schnorrsig.h"
|
||||
|
#include "../secp256k1/include/secp256k1_musig.h" |
||||
|
|
||||
|
|
||||
|
#define MUSIG_PREVN 0 // for now, just use vout0 for the musig output
|
||||
|
#define MUSIG_TXFEE 10000 |
||||
|
|
||||
|
CScript musig_sendopret(uint8_t funcid,CPubKey pk) |
||||
|
{ |
||||
|
CScript opret; uint8_t evalcode = EVAL_MUSIG; |
||||
|
opret << OP_RETURN << E_MARSHAL(ss << evalcode << funcid << pk); |
||||
|
return(opret); |
||||
|
} |
||||
|
|
||||
|
uint8_t musig_sendopretdecode(CPubKey &pk,CScript scriptPubKey) |
||||
|
{ |
||||
|
std::vector<uint8_t> vopret; uint8_t e,f; |
||||
|
GetOpReturnData(scriptPubKey,vopret); |
||||
|
if ( vopret.size() > 2 && E_UNMARSHAL(vopret,ss >> e; ss >> f; ss >> pk) != 0 && e == EVAL_MUSIG && f == 'x' ) |
||||
|
{ |
||||
|
return(f); |
||||
|
} |
||||
|
return(0); |
||||
|
} |
||||
|
|
||||
|
CScript musig_spendopret(uint8_t funcid,CPubKey pk,std::vector<uint8_t> musig64) |
||||
|
{ |
||||
|
CScript opret; uint8_t evalcode = EVAL_MUSIG; |
||||
|
opret << OP_RETURN << E_MARSHAL(ss << evalcode << funcid << pk << musig64); |
||||
|
return(opret); |
||||
|
} |
||||
|
|
||||
|
uint8_t musig_spendopretdecode(CPubKey &pk,std::vector<uint8_t> &musig64,CScript scriptPubKey) |
||||
|
{ |
||||
|
std::vector<uint8_t> vopret; uint8_t e,f; |
||||
|
GetOpReturnData(scriptPubKey,vopret); |
||||
|
if ( vopret.size() > 2 && E_UNMARSHAL(vopret,ss >> e; ss >> f; ss >> pk; ss >> musig64) != 0 && e == EVAL_MUSIG && f == 'y' ) |
||||
|
{ |
||||
|
return(f); |
||||
|
} |
||||
|
return(0); |
||||
|
} |
||||
|
|
||||
|
int32_t musig_msghash(uint8_t *msg,uint256 prevhash,int32_t prevn,CTxOut vout,CPubKey pk) |
||||
|
{ |
||||
|
CScript data; uint256 hash; int32_t len = 0; |
||||
|
data << E_MARSHAL(ss << prevhash << prevn << vout << pk); |
||||
|
fprintf(stderr,"data size %d\n",(int32_t)data.size()); |
||||
|
hash = Hash(data.begin(),data.end()); |
||||
|
memcpy(msg,&hash,sizeof(hash)); |
||||
|
return(0); |
||||
|
} |
||||
|
|
||||
|
int32_t musig_prevoutmsg(uint8_t *msg,uint256 sendtxid,CScript scriptPubKey) |
||||
|
{ |
||||
|
CTransaction vintx; uint256 hashBlock; int32_t numvouts; CTxOut vout; CPubKey pk; |
||||
|
memset(msg,0,32); |
||||
|
if ( myGetTransaction(sendtxid,vintx,hashBlock) != 0 && (numvouts= vintx.vout.size()) > 1 ) |
||||
|
{ |
||||
|
if ( musig_sendopretdecode(pk,vintx.vout[numvouts-1].scriptPubKey) == 'x' ) |
||||
|
{ |
||||
|
vout.nValue = vintx.vout[MUSIG_PREVN].nValue - MUSIG_TXFEE; |
||||
|
vout.scriptPubKey = scriptPubKey; |
||||
|
return(musig_msghash(msg,sendtxid,MUSIG_PREVN,vout,pk)); |
||||
|
} |
||||
|
} |
||||
|
return(-1); |
||||
|
} |
||||
|
|
||||
|
UniValue musig_calcmsg(uint64_t txfee,struct CCcontract_info *cp,cJSON *params) |
||||
|
{ |
||||
|
UniValue result(UniValue::VOBJ); uint256 sendtxid; int32_t i; uint8_t msg[32]; char *scriptstr,str[65]; int32_t n; |
||||
|
if ( params != 0 && (n= cJSON_GetArraySize(params)) > 0 ) |
||||
|
{ |
||||
|
if ( n == 2 ) |
||||
|
{ |
||||
|
sendtxid = juint256(jitem(params,0)); |
||||
|
scriptstr = jstr(jitem(params,1),0); |
||||
|
if ( is_hexstr(scriptstr,0) != 0 ) |
||||
|
{ |
||||
|
CScript scriptPubKey(ParseHex(scriptstr)); |
||||
|
musig_prevoutmsg(msg,sendtxid,scriptPubKey); |
||||
|
result.push_back(Pair("result","success")); |
||||
|
for (i=0; i<32; i++) |
||||
|
sprintf(&str[i<<1],"%02x",msg[i]); |
||||
|
str[64] = 0; |
||||
|
result.push_back(Pair("msg",str)); |
||||
|
return(result); |
||||
|
} else return(cclib_error(result,"script is not hex")); |
||||
|
} else return(cclib_error(result,"need exactly 2 parameters: sendtxid, scriptPubKey")); |
||||
|
} else return(cclib_error(result,"couldnt parse params")); |
||||
|
} |
||||
|
|
||||
|
UniValue musig_combine(uint64_t txfee,struct CCcontract_info *cp,cJSON *params) |
||||
|
{ |
||||
|
UniValue result(UniValue::VOBJ); |
||||
|
result.push_back(Pair("result","success")); |
||||
|
return(result); |
||||
|
} |
||||
|
|
||||
|
UniValue musig_session(uint64_t txfee,struct CCcontract_info *cp,cJSON *params) |
||||
|
{ |
||||
|
UniValue result(UniValue::VOBJ); |
||||
|
result.push_back(Pair("result","success")); |
||||
|
return(result); |
||||
|
} |
||||
|
|
||||
|
UniValue musig_commit(uint64_t txfee,struct CCcontract_info *cp,cJSON *params) |
||||
|
{ |
||||
|
UniValue result(UniValue::VOBJ); |
||||
|
result.push_back(Pair("result","success")); |
||||
|
return(result); |
||||
|
} |
||||
|
|
||||
|
UniValue musig_nonce(uint64_t txfee,struct CCcontract_info *cp,cJSON *params) |
||||
|
{ |
||||
|
UniValue result(UniValue::VOBJ); |
||||
|
result.push_back(Pair("result","success")); |
||||
|
return(result); |
||||
|
} |
||||
|
|
||||
|
UniValue musig_partialsign(uint64_t txfee,struct CCcontract_info *cp,cJSON *params) |
||||
|
{ |
||||
|
UniValue result(UniValue::VOBJ); |
||||
|
result.push_back(Pair("result","success")); |
||||
|
return(result); |
||||
|
} |
||||
|
|
||||
|
UniValue musig_sigcombine(uint64_t txfee,struct CCcontract_info *cp,cJSON *params) |
||||
|
{ |
||||
|
UniValue result(UniValue::VOBJ); |
||||
|
result.push_back(Pair("result","success")); |
||||
|
return(result); |
||||
|
} |
||||
|
|
||||
|
UniValue musig_verify(uint64_t txfee,struct CCcontract_info *cp,cJSON *params) |
||||
|
{ |
||||
|
UniValue result(UniValue::VOBJ); |
||||
|
result.push_back(Pair("result","success")); |
||||
|
return(result); |
||||
|
} |
||||
|
|
||||
|
// helpers for rpc calls that generate/validate onchain tx
|
||||
|
|
||||
|
UniValue musig_rawtxresult(UniValue &result,std::string rawtx) |
||||
|
{ |
||||
|
CTransaction tx; |
||||
|
if ( rawtx.size() > 0 ) |
||||
|
{ |
||||
|
result.push_back(Pair("hex",rawtx)); |
||||
|
if ( DecodeHexTx(tx,rawtx) != 0 ) |
||||
|
{ |
||||
|
//if ( broadcastflag != 0 && myAddtomempool(tx) != 0 )
|
||||
|
// RelayTransaction(tx);
|
||||
|
result.push_back(Pair("txid",tx.GetHash().ToString())); |
||||
|
result.push_back(Pair("result","success")); |
||||
|
} else result.push_back(Pair("error","decode hex")); |
||||
|
} else result.push_back(Pair("error","couldnt finalize CCtx")); |
||||
|
return(result); |
||||
|
} |
||||
|
|
||||
|
UniValue musig_send(uint64_t txfee,struct CCcontract_info *cp,cJSON *params) |
||||
|
{ |
||||
|
CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); |
||||
|
UniValue result(UniValue::VOBJ); int32_t n; char *hexstr; std::string rawtx; int64_t amount; CPubKey musigpk,mypk; |
||||
|
if ( txfee == 0 ) |
||||
|
txfee = MUSIG_TXFEE; |
||||
|
mypk = pubkey2pk(Mypubkey()); |
||||
|
musigpk = GetUnspendable(cp,0); |
||||
|
if ( params != 0 && (n= cJSON_GetArraySize(params)) > 0 ) |
||||
|
{ |
||||
|
if ( n == 2 && (hexstr= jstr(jitem(params,0),0)) != 0 && is_hexstr(hexstr,0) == 66 ) |
||||
|
{ |
||||
|
CPubKey pk(ParseHex(hexstr)); |
||||
|
amount = jdouble(jitem(params,1),0) * COIN + 0.0000000049; |
||||
|
if ( amount >= 3*txfee && AddNormalinputs(mtx,mypk,amount+2*txfee,64) >= amount+2*txfee ) |
||||
|
{ |
||||
|
mtx.vout.push_back(MakeCC1vout(cp->evalcode,amount+txfee,musigpk)); |
||||
|
rawtx = FinalizeCCTx(0,cp,mtx,mypk,txfee,musig_sendopret('x',pk)); |
||||
|
return(musig_rawtxresult(result,rawtx)); |
||||
|
} else return(cclib_error(result,"couldnt find funds or less than 0.0003")); |
||||
|
} else return(cclib_error(result,"must have 2 params: pk, amount")); |
||||
|
} else return(cclib_error(result,"not enough parameters")); |
||||
|
} |
||||
|
|
||||
|
UniValue musig_spend(uint64_t txfee,struct CCcontract_info *cp,cJSON *params) |
||||
|
{ |
||||
|
static secp256k1_context *ctx; |
||||
|
CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), komodo_nextheight()); |
||||
|
UniValue result(UniValue::VOBJ); std::string rawtx; CPubKey mypk,pk; secp256k1_pubkey combined_pk; char *scriptstr,*musigstr; uint8_t msg[32]; CTransaction vintx; uint256 prevhash,hashBlock; int32_t n,numvouts; CTxOut vout; secp256k1_schnorrsig musig; |
||||
|
if ( ctx == 0 ) |
||||
|
ctx = secp256k1_context_create(SECP256K1_CONTEXT_SIGN | SECP256K1_CONTEXT_VERIFY); |
||||
|
if ( params != 0 && (n= cJSON_GetArraySize(params)) > 0 ) |
||||
|
{ |
||||
|
if ( n == 3 ) |
||||
|
{ |
||||
|
prevhash = juint256(jitem(params,0)); |
||||
|
scriptstr = jstr(jitem(params,1),0); |
||||
|
musigstr = jstr(jitem(params,2),0); |
||||
|
if ( is_hexstr(scriptstr,0) != 0 && is_hexstr(musigstr,0) != 128 ) |
||||
|
{ |
||||
|
if ( txfee == 0 ) |
||||
|
txfee = MUSIG_TXFEE; |
||||
|
mypk = pubkey2pk(Mypubkey()); |
||||
|
std::vector<uint8_t> musig64(ParseHex(musigstr)); |
||||
|
CScript scriptPubKey(ParseHex(scriptstr)); |
||||
|
if ( myGetTransaction(prevhash,vintx,hashBlock) != 0 && (numvouts= vintx.vout.size()) > 1 ) |
||||
|
{ |
||||
|
vout.nValue = vintx.vout[0].nValue - txfee; |
||||
|
vout.scriptPubKey = scriptPubKey; |
||||
|
if ( musig_sendopretdecode(pk,vintx.vout[numvouts-1].scriptPubKey) == 'x' ) |
||||
|
{ |
||||
|
if ( secp256k1_schnorrsig_parse((const secp256k1_context *)ctx,&musig,(const uint8_t *)&musig64[0]) > 0 && |
||||
|
secp256k1_ec_pubkey_parse(ctx,&combined_pk,pk.begin(),33) > 0 ) |
||||
|
{ |
||||
|
musig_prevoutmsg(msg,prevhash,vout.scriptPubKey); |
||||
|
if ( !secp256k1_schnorrsig_verify((const secp256k1_context *)ctx,&musig,(const uint8_t *)msg,(const secp256k1_pubkey *)&combined_pk) ) |
||||
|
return(cclib_error(result,"musig didnt validate")); |
||||
|
mtx.vin.push_back(CTxIn(prevhash,MUSIG_PREVN)); |
||||
|
mtx.vout.push_back(vout); |
||||
|
rawtx = FinalizeCCTx(0,cp,mtx,mypk,txfee,musig_spendopret('y',pk,musig64)); |
||||
|
return(musig_rawtxresult(result,rawtx)); |
||||
|
} else return(cclib_error(result,"couldnt parse pk or musig")); |
||||
|
} else return(cclib_error(result,"couldnt decode send opret")); |
||||
|
} else return(cclib_error(result,"couldnt find vin0")); |
||||
|
} else return(cclib_error(result,"script or musig is not hex")); |
||||
|
} else return(cclib_error(result,"need to have exactly 3 params prevhash, scriptPubKey, musig")); |
||||
|
} else return(cclib_error(result,"params parse error")); |
||||
|
} |
||||
|
|
||||
|
bool musig_validate(struct CCcontract_info *cp,int32_t height,Eval *eval,const CTransaction tx) |
||||
|
{ |
||||
|
static secp256k1_context *ctx; |
||||
|
secp256k1_pubkey combined_pk; CPubKey pk,checkpk; secp256k1_schnorrsig musig; uint256 hashBlock; CTransaction vintx; int32_t numvouts; std::vector<uint8_t> musig64; uint8_t msg[32]; |
||||
|
if ( ctx == 0 ) |
||||
|
ctx = secp256k1_context_create(SECP256K1_CONTEXT_SIGN | SECP256K1_CONTEXT_VERIFY); |
||||
|
if ( tx.vout.size() != 2 ) |
||||
|
return eval->Invalid("numvouts != 2"); |
||||
|
else if ( tx.vin.size() != 1 ) |
||||
|
return eval->Invalid("numvins != 1"); |
||||
|
else if ( IsCCInput(tx.vin[0].scriptSig) == 0 ) |
||||
|
return eval->Invalid("illegal normal vin0"); |
||||
|
else if ( myGetTransaction(tx.vin[0].prevout.hash,vintx,hashBlock) != 0 && (numvouts= vintx.vout.size()) > 1 ) |
||||
|
{ |
||||
|
if ( musig_sendopretdecode(pk,vintx.vout[numvouts-1].scriptPubKey) == 'x' ) |
||||
|
{ |
||||
|
if ( musig_spendopretdecode(checkpk,musig64,tx.vout[tx.vout.size()-1].scriptPubKey) == 'y' ) |
||||
|
{ |
||||
|
if ( pk == checkpk ) |
||||
|
{ |
||||
|
if ( secp256k1_schnorrsig_parse((const secp256k1_context *)ctx,&musig,(const uint8_t *)&musig64[0]) > 0 && |
||||
|
secp256k1_ec_pubkey_parse(ctx,&combined_pk,pk.begin(),33) > 0 ) |
||||
|
{ |
||||
|
musig_prevoutmsg(msg,tx.vin[0].prevout.hash,tx.vout[0].scriptPubKey); |
||||
|
if ( !secp256k1_schnorrsig_verify((const secp256k1_context *)ctx,&musig,(const uint8_t *)msg,(const secp256k1_pubkey *)&combined_pk) ) |
||||
|
return eval->Invalid("failed schnorrsig_verify"); |
||||
|
else return(true); |
||||
|
} else return eval->Invalid("couldnt parse pk or musig"); |
||||
|
} else return eval->Invalid("combined_pk didnt match send opret"); |
||||
|
} else return eval->Invalid("failed decode musig spendopret"); |
||||
|
} else return eval->Invalid("couldnt decode send opret"); |
||||
|
} else return eval->Invalid("couldnt find vin0 tx"); |
||||
|
} |
@ -1,270 +0,0 @@ |
|||||
/* config.h. Generated from config.h.in by configure. */ |
|
||||
/* config.h.in. Generated from configure.ac by autoheader. */ |
|
||||
|
|
||||
/* Define if scorefile is top scores, not top players */ |
|
||||
#define ALLSCORES 1 |
|
||||
|
|
||||
/* Define if checktime feature should be enabled */ |
|
||||
/* #undef CHECKTIME */ |
|
||||
|
|
||||
/* Define to group owner of setgid executable */ |
|
||||
/* #undef GROUPOWNER */ |
|
||||
|
|
||||
/* Define to 1 if you have the `alarm' function. */ |
|
||||
#define HAVE_ALARM 1 |
|
||||
|
|
||||
/* Define to 1 if you have the <arpa/inet.h> header file. */ |
|
||||
#define HAVE_ARPA_INET_H 1 |
|
||||
|
|
||||
/* Define to 1 if libcurses is requested */ |
|
||||
#define HAVE_CURSES_H 1 |
|
||||
|
|
||||
/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */ |
|
||||
/* #undef HAVE_DOPRNT */ |
|
||||
|
|
||||
/* Define to 1 if you have the `erasechar' function. */ |
|
||||
#define HAVE_ERASECHAR 1 |
|
||||
|
|
||||
/* Define if ncurses has ESCDELAY variable */ |
|
||||
#define HAVE_ESCDELAY 1 |
|
||||
|
|
||||
/* Define to 1 if you have the <fcntl.h> header file. */ |
|
||||
#define HAVE_FCNTL_H 1 |
|
||||
|
|
||||
/* Define to 1 if you have the `fork' function. */ |
|
||||
#define HAVE_FORK 1 |
|
||||
|
|
||||
/* Define to 1 if you have the `getgid' function. */ |
|
||||
#define HAVE_GETGID 1 |
|
||||
|
|
||||
/* Define to 1 if you have the `getloadavg' function. */ |
|
||||
#define HAVE_GETLOADAVG 1 |
|
||||
|
|
||||
/* Define to 1 if you have the `getpass' function. */ |
|
||||
#define HAVE_GETPASS 1 |
|
||||
|
|
||||
/* Define to 1 if you have the `getpwuid' function. */ |
|
||||
#define HAVE_GETPWUID 1 |
|
||||
|
|
||||
/* Define to 1 if you have the `getuid' function. */ |
|
||||
#define HAVE_GETUID 1 |
|
||||
|
|
||||
/* Define to 1 if you have the <inttypes.h> header file. */ |
|
||||
#define HAVE_INTTYPES_H 1 |
|
||||
|
|
||||
/* Define to 1 if you have the `killchar' function. */ |
|
||||
#define HAVE_KILLCHAR 1 |
|
||||
|
|
||||
/* Define to 1 if you have the <limits.h> header file. */ |
|
||||
#define HAVE_LIMITS_H 1 |
|
||||
|
|
||||
/* Define to 1 if you have the `loadav' function. */ |
|
||||
/* #undef HAVE_LOADAV */ |
|
||||
|
|
||||
/* Define to 1 if `lstat' has the bug that it succeeds when given the
|
|
||||
zero-length file name argument. */ |
|
||||
/* #undef HAVE_LSTAT_EMPTY_STRING_BUG */ |
|
||||
|
|
||||
/* Define to 1 if you have the <memory.h> header file. */ |
|
||||
#define HAVE_MEMORY_H 1 |
|
||||
|
|
||||
/* Define to 1 if you have the `memset' function. */ |
|
||||
#define HAVE_MEMSET 1 |
|
||||
|
|
||||
/* Define to 1 if libncurses is requested */ |
|
||||
/* #undef HAVE_NCURSES_H */ |
|
||||
|
|
||||
/* Define to 1 if you have the <ncurses/term.h> header file. */ |
|
||||
/* #undef HAVE_NCURSES_TERM_H */ |
|
||||
|
|
||||
/* Define to 1 if you have the `nlist' function. */ |
|
||||
/* #undef HAVE_NLIST */ |
|
||||
|
|
||||
/* Define to 1 if you have the <nlist.h> header file. */ |
|
||||
#define HAVE_NLIST_H 1 |
|
||||
|
|
||||
/* Define to 1 if you have the <process.h> header file. */ |
|
||||
/* #undef HAVE_PROCESS_H */ |
|
||||
|
|
||||
/* Define to 1 if you have the <pwd.h> header file. */ |
|
||||
#define HAVE_PWD_H 1 |
|
||||
|
|
||||
/* Define to 1 if you have the `setenv' function. */ |
|
||||
#define HAVE_SETENV 1 |
|
||||
|
|
||||
/* Define to 1 if you have the `setgid' function. */ |
|
||||
#define HAVE_SETGID 1 |
|
||||
|
|
||||
/* Define to 1 if you have the `setregid' function. */ |
|
||||
#define HAVE_SETREGID 1 |
|
||||
|
|
||||
/* Define to 1 if you have the `setresgid' function. */ |
|
||||
/* #undef HAVE_SETRESGID */ |
|
||||
|
|
||||
/* Define to 1 if you have the `setresuid' function. */ |
|
||||
/* #undef HAVE_SETRESUID */ |
|
||||
|
|
||||
/* Define to 1 if you have the `setreuid' function. */ |
|
||||
#define HAVE_SETREUID 1 |
|
||||
|
|
||||
/* Define to 1 if you have the `setuid' function. */ |
|
||||
#define HAVE_SETUID 1 |
|
||||
|
|
||||
/* Define to 1 if you have the `spawnl' function. */ |
|
||||
/* #undef HAVE_SPAWNL */ |
|
||||
|
|
||||
/* Define to 1 if `stat' has the bug that it succeeds when given the
|
|
||||
zero-length file name argument. */ |
|
||||
/* #undef HAVE_STAT_EMPTY_STRING_BUG */ |
|
||||
|
|
||||
/* Define to 1 if stdbool.h conforms to C99. */ |
|
||||
#define HAVE_STDBOOL_H 1 |
|
||||
|
|
||||
/* Define to 1 if you have the <stdint.h> header file. */ |
|
||||
#define HAVE_STDINT_H 1 |
|
||||
|
|
||||
/* Define to 1 if you have the <stdlib.h> header file. */ |
|
||||
#define HAVE_STDLIB_H 1 |
|
||||
|
|
||||
/* Define to 1 if you have the `strchr' function. */ |
|
||||
#define HAVE_STRCHR 1 |
|
||||
|
|
||||
/* Define to 1 if you have the `strerror' function. */ |
|
||||
#define HAVE_STRERROR 1 |
|
||||
|
|
||||
/* Define to 1 if you have the <strings.h> header file. */ |
|
||||
#define HAVE_STRINGS_H 1 |
|
||||
|
|
||||
/* Define to 1 if you have the <string.h> header file. */ |
|
||||
#define HAVE_STRING_H 1 |
|
||||
|
|
||||
/* Define to 1 if you have the <sys/ioctl.h> header file. */ |
|
||||
#define HAVE_SYS_IOCTL_H 1 |
|
||||
|
|
||||
/* Define to 1 if you have the <sys/stat.h> header file. */ |
|
||||
#define HAVE_SYS_STAT_H 1 |
|
||||
|
|
||||
/* Define to 1 if you have the <sys/types.h> header file. */ |
|
||||
#define HAVE_SYS_TYPES_H 1 |
|
||||
|
|
||||
/* Define to 1 if you have the <sys/utsname.h> header file. */ |
|
||||
#define HAVE_SYS_UTSNAME_H 1 |
|
||||
|
|
||||
/* Define to 1 if you have the <termios.h> header file. */ |
|
||||
#define HAVE_TERMIOS_H 1 |
|
||||
|
|
||||
/* Define to 1 if you have the <term.h> header file. */ |
|
||||
#define HAVE_TERM_H 1 |
|
||||
|
|
||||
/* Define to 1 if you have the <unistd.h> header file. */ |
|
||||
#define HAVE_UNISTD_H 1 |
|
||||
|
|
||||
/* Define to 1 if you have the <utmp.h> header file. */ |
|
||||
#define HAVE_UTMP_H 1 |
|
||||
|
|
||||
/* Define to 1 if you have the `vfork' function. */ |
|
||||
#define HAVE_VFORK 1 |
|
||||
|
|
||||
/* Define to 1 if you have the <vfork.h> header file. */ |
|
||||
/* #undef HAVE_VFORK_H */ |
|
||||
|
|
||||
/* Define to 1 if you have the `vprintf' function. */ |
|
||||
#define HAVE_VPRINTF 1 |
|
||||
|
|
||||
/* Define to 1 if `fork' works. */ |
|
||||
#define HAVE_WORKING_FORK 1 |
|
||||
|
|
||||
/* Define to 1 if `vfork' works. */ |
|
||||
#define HAVE_WORKING_VFORK 1 |
|
||||
|
|
||||
/* Define to 1 if the system has the type `_Bool'. */ |
|
||||
#define HAVE__BOOL 1 |
|
||||
|
|
||||
/* Define to 1 if you have the `_spawnl' function. */ |
|
||||
/* #undef HAVE__SPAWNL */ |
|
||||
|
|
||||
/* define if we should use program's load average function instead of system
|
|
||||
*/ |
|
||||
/* #undef LOADAV */ |
|
||||
|
|
||||
/* Define to file to use for scoreboard lockfile */ |
|
||||
#define LOCKFILE "rogue.lck" |
|
||||
|
|
||||
/* Define to 1 if `lstat' dereferences a symlink specified with a trailing
|
|
||||
slash. */ |
|
||||
/* #undef LSTAT_FOLLOWS_SLASHED_SYMLINK */ |
|
||||
|
|
||||
/* Define to include wizard mode */ |
|
||||
/* #undef MASTER */ |
|
||||
|
|
||||
/* Define if maxusers feature should be enabled */ |
|
||||
/* #undef MAXLOAD */ |
|
||||
|
|
||||
/* Define if maxusers feature should be enabled */ |
|
||||
/* #undef MAXUSERS */ |
|
||||
|
|
||||
/* kernel file to pass to nlist() when reading load average (unlikely to work)
|
|
||||
*/ |
|
||||
/* #undef NAMELIST */ |
|
||||
|
|
||||
/* word for the number of scores to store in scoreboard */ |
|
||||
#define NUMNAME "Ten" |
|
||||
|
|
||||
/* number of scores to store in scoreboard */ |
|
||||
#define NUMSCORES 10 |
|
||||
|
|
||||
/* Define to the address where bug reports for this package should be sent. */ |
|
||||
#define PACKAGE_BUGREPORT "yendor@rogueforge.net" |
|
||||
|
|
||||
/* Define to the full name of this package. */ |
|
||||
#define PACKAGE_NAME "Rogue" |
|
||||
|
|
||||
/* Define to the full name and version of this package. */ |
|
||||
#define PACKAGE_STRING "Rogue 5.4.4" |
|
||||
|
|
||||
/* Define to the one symbol short name of this package. */ |
|
||||
#define PACKAGE_TARNAME "rogue" |
|
||||
|
|
||||
/* Define to the version of this package. */ |
|
||||
#define PACKAGE_VERSION "5.4.4" |
|
||||
|
|
||||
/* Define crypt(3) wizard mode password */ |
|
||||
/* #undef PASSWD */ |
|
||||
|
|
||||
/* Define as the return type of signal handlers (`int' or `void'). */ |
|
||||
#define RETSIGTYPE void |
|
||||
|
|
||||
/* Define to file to use for scoreboard */ |
|
||||
#define SCOREFILE "rogue.scr" |
|
||||
|
|
||||
/* Define to 1 if you have the ANSI C header files. */ |
|
||||
#define STDC_HEADERS 1 |
|
||||
|
|
||||
/* Define to 1 if your <sys/time.h> declares `struct tm'. */ |
|
||||
/* #undef TM_IN_SYS_TIME */ |
|
||||
|
|
||||
/* define if we should use program's user counting function instead of
|
|
||||
system's */ |
|
||||
/* #undef UCOUNT */ |
|
||||
|
|
||||
/* utmp like file to pass to ucount() when counting online users (unlikely to
|
|
||||
work) */ |
|
||||
/* #undef UTMP */ |
|
||||
|
|
||||
/* Define to empty if `const' does not conform to ANSI C. */ |
|
||||
/* #undef const */ |
|
||||
|
|
||||
/* Define to `int' if <sys/types.h> doesn't define. */ |
|
||||
/* #undef gid_t */ |
|
||||
|
|
||||
/* Define to `int' if <sys/types.h> does not define. */ |
|
||||
/* #undef pid_t */ |
|
||||
|
|
||||
/* Define to `unsigned int' if <sys/types.h> does not define. */ |
|
||||
/* #undef size_t */ |
|
||||
|
|
||||
/* Define to `int' if <sys/types.h> doesn't define. */ |
|
||||
/* #undef uid_t */ |
|
||||
|
|
||||
/* Define as `fork' if `vfork' does not work. */ |
|
||||
/* #undef vfork */ |
|
Loading…
Reference in new issue