char*match2str(const char*src,const size_t start,const size_t end, const char*long_delim) { char* buf = _stralloc(end-start+1); char* rd = (char*)src+start; char* wr = buf; size_t sz = end-start-1, ofs = 0; char* ret = NULL; if(end>start) { // printf("match2str orig = \"%*.*s\" sz=%li\n",(int)(end-start),(int)(end-start),rd,sz); // memset(buf,0,end-start); // printf(" => \"%s\"\n",buf); while(ofs<sz) { unescape_chr_l(&rd, &wr, 0, long_delim); ofs = rd-src-start; // printf("match2str orig = \"%*.*s\"\n",(int)(end-start-ofs),(int)(end-start-ofs),rd); // printf(" => \"%s\" %p %p %li\n",buf,rd,buf,ofs); }; if(ofs==sz) { *wr = *rd; wr += 1; } } *wr = 0; // printf("match2str => \"%s\"\n\n",buf); // static char buf[256]; // memset(buf,0,256); // strncpy(buf,src+start,end-start); ret = regstr(buf); _strfree(buf); return ret; }
wast_t wa_new(const char* op, int l, int c) { wast_t ret = (wast_t)malloc(sizeof(struct _walkable_ast_t)); memset(ret,0,sizeof(struct _walkable_ast_t)); /*ret->label = strdup(op);*/ ret->label = regstr(op); ret->l = l; ret->c = c; return ret; }
/* setup */ v initvm(v) { sk = makestack(); rsk = makestack(); regstk(); regstr(); regctl(); regnum(); }
void ast_serialize(const ast_node_t ast,int(*func)(int,void*),void*param) { char*srcptr; /* if ast is nil, output '()' */ /*inside_lisp = 1;*/ if(ast==PRODUCTION_OK_BUT_EMPTY) { func('E', param); func('M', param); func('P', param); func('T', param); func('Y', param); func(0, param); return; } if(!ast) { func('(',param); func(')',param); /* if ast is pair, serialize list */ } else if(isPair(ast)) { func('(',param); if(ast->node_flags&IS_FOREST) { func('@',param); func(' ',param); } ast_ser_list(ast,func,param); func(')',param); /* if ast is atom, output atom */ } else if(isAtom(ast)) { srcptr=regstr(getAtom(ast)); while(*srcptr!=0) { escape_chr(&srcptr,func,param, _LISP); } /* *output+=strlen(getAtom(ast));*/ } func('\0',param); /*inside_lisp = 0;*/ }
void init_strreg() { /*init_hashtab(&str_registry, (hash_func) strreg_h, (compare_func) strcmp);*/ /* pre-fill registry with all hardcoded strings used in the tokenizer */ STR__whitespace = regstr("_whitespace"); STR__start = regstr("_start"); STR_Grammar = regstr("Grammar"); STR_Comment = regstr("Comment"); STR_eos = regstr("eos"); STR_Alt = regstr("Alt"); STR_RawSeq = regstr("RawSeq"); STR_Seq = regstr("Seq"); STR_NT = regstr("NT"); STR_Epsilon = regstr("Epsilon"); STR_EOF = regstr("EOF"); STR_Rep0N = regstr("Rep0N"); STR_Rep01 = regstr("Rep01"); STR_Rep1N = regstr("Rep1N"); STR_RE = regstr("RE"); STR_RPL = regstr("RPL"); STR_STR = regstr("STR"); STR_BOW = regstr("BOW"); STR_AddToBag = regstr("AddToBag"); STR_BKeep = regstr("BKeep"); STR_T = regstr("T"); STR_Prefix = regstr("Prefix"); STR_Postfix = regstr("Postfix"); STR_TransientRule = regstr("TransientRule"); STR_OperatorRule = regstr("OperatorRule"); STR_Space = regstr("Space"); STR_NewLine = regstr("NewLine"); STR_Indent = regstr("Indent"); STR_Dedent = regstr("Dedent"); STR_strip_me = regstr("strip.me"); /*atexit(deinit_strreg);*/ }
void OSInfo::fillXml(QDomDocument &doc, QDomElement &root, const QString &os, const QString &osver, const QList<QHostAddress> &qlBind) { QDomElement tag; QDomText t; bool bIs64; bool bSSE2 = false; QString cpu_id, cpu_extid; tag=doc.createElement(QLatin1String("machash")); root.appendChild(tag); t=doc.createTextNode(OSInfo::getMacHash(qlBind)); tag.appendChild(t); tag=doc.createElement(QLatin1String("version")); root.appendChild(tag); t=doc.createTextNode(QLatin1String(MUMTEXT(MUMBLE_VERSION_STRING))); tag.appendChild(t); tag=doc.createElement(QLatin1String("release")); root.appendChild(tag); t=doc.createTextNode(QLatin1String(MUMBLE_RELEASE)); tag.appendChild(t); tag=doc.createElement(QLatin1String("os")); root.appendChild(tag); t=doc.createTextNode(os); tag.appendChild(t); tag=doc.createElement(QLatin1String("osver")); root.appendChild(tag); t=doc.createTextNode(osver); tag.appendChild(t); tag=doc.createElement(QLatin1String("qt")); root.appendChild(tag); t=doc.createTextNode(QString::fromLatin1(qVersion())); tag.appendChild(t); #if defined(Q_OS_WIN) BOOL bIsWow64 = FALSE; IsWow64Process(GetCurrentProcess(), &bIsWow64); bIs64 = bIsWow64; #elif defined(Q_OS_MAC) size_t len = sizeof(bool); sysctlbyname("hw.cpu64bit_capable", &bIs64, &len, NULL, 0); #else bIs64 = (QSysInfo::WordSize == 64); #endif tag=doc.createElement(QLatin1String("is64bit")); root.appendChild(tag); t=doc.createTextNode(QString::number(bIs64 ? 1 : 0)); tag.appendChild(t); #if defined(Q_OS_WIN) #define regstr(x) QString::fromLatin1(reinterpret_cast<const char *>(& x), 4) int chop; int cpuinfo[4]; __cpuid(cpuinfo, 1); bSSE2 = (cpuinfo[3] & 0x04000000); __cpuid(cpuinfo, 0); cpu_id = regstr(cpuinfo[1]) + regstr(cpuinfo[3]) + regstr(cpuinfo[2]); for (unsigned int j=2; j<=4;++j) { __cpuid(cpuinfo, 0x80000000 + j); cpu_extid += regstr(cpuinfo[0]) + regstr(cpuinfo[1]) + regstr(cpuinfo[2]) + regstr(cpuinfo[3]); } cpu_id = cpu_id.trimmed(); chop = cpu_id.indexOf(QLatin1Char('\0')); if (chop != -1) cpu_id.truncate(chop); cpu_extid = cpu_extid.trimmed(); chop = cpu_extid.indexOf(QLatin1Char('\0')); if (chop != -1) cpu_extid.truncate(chop); #endif tag=doc.createElement(QLatin1String("cpu_id")); root.appendChild(tag); t=doc.createTextNode(cpu_id); tag.appendChild(t); tag=doc.createElement(QLatin1String("cpu_extid")); root.appendChild(tag); t=doc.createTextNode(cpu_extid); tag.appendChild(t); tag=doc.createElement(QLatin1String("cpu_sse2")); root.appendChild(tag); t=doc.createTextNode(QString::number(bSSE2 ? 1 : 0)); tag.appendChild(t); }