static void Manual(const char *examples_dir)
{
    for (;;)
    {
        char line[2048];

        if (fgets(line, 2048, stdin) == NULL)
        {
            if (ferror(stdin))
            {
                fprintf(stderr, "Error during reading stdin. Bailing out.\n");
                exit(1);
            }
            else
            {
                return;
            }
        }

        if (strstr(line, EXAMPLE_INCLUDE_TOKEN))
        {
            char *filename = strstr(line, EXAMPLE_INCLUDE_TOKEN) + strlen(EXAMPLE_INCLUDE_TOKEN);

            Chomp(filename);

            IncludeExampleFile(examples_dir, filename);
        }
        else
        {
            fputs(line, stdout);
        }
    }
}
Exemple #2
0
// converts a space separated quality string into a compressed quality string
// NOTE: this function has horrible amounts of overhead, but lean and mean code that I had before
//       failed some of the unit tests.
void CRegexUtilities::ConvertQualities(string& qualities, CMosaikString& compQualities) {

	string::iterator strIte = qualities.end() - 1;
	while ( *strIte == ' ' ) {
		qualities.erase( strIte );
		strIte--;
	}
	
	vector<string> columns;
	vector<string>::const_iterator sIter;

	char* pQualities = (char*)qualities.c_str();
	Chomp(pQualities);

	back_insert_iterator<vector<string> > backiter(columns);
	SplitString(backiter, " ", pQualities);
	const unsigned int numQualities = (unsigned int)columns.size();

	compQualities.Reserve(numQualities);
	compQualities.SetLength(numQualities);

	unsigned char* pCompQualities = (unsigned char*)compQualities.Data();

	for(sIter = columns.begin(); sIter != columns.end(); ++sIter, ++pCompQualities) {
		if(sIter->empty()) continue;
		*pCompQualities = GetUnsignedChar((char*)sIter->c_str());
	}
}
Exemple #3
0
int main() {	
	wait_for_light(LIGHT_SENS);
	//shake();
	//startingT();
	start();
	shut_down_in(119);
	Abyssal_Voyage();
	Chomp();
	now();
	Acquired_Taste();
	Devour();
	Tougue_Lash();
	Acquired_Taste();
	//dance();
	now();
}
Exemple #4
0
int main(void)
{
	CString *mystr;
	char c;

	mystr = Init_CString("Hello!");
	printf("Init:\n str:%s len:%d\n", mystr->str, mystr->len);
	c = Chomp(mystr);
	printf("Chomp %c:\n str:%s len:%d\n", c, mystr->str, mystr->len);
	mystr = Append_Chars_To_CString(mystr, " world!");
	printf("Append:\n str:%s len:%d\n", mystr->str, mystr->len);

	Delete_CString(mystr);

	return 0;
}
Exemple #5
0
std::string LoadTestUnits(TestUnitNode& node, std::istream& is, TestObserver* pObserver, int indent = 0)
{
	static const std::regex re("(\\s*)([cCsS])(\\d+):(.+)");

	std::string line;
	std::getline(is, line);
	while (is)
	{
		line = Chomp(line);
		std::smatch sm;
		if (!std::regex_match(line, sm, re))
		{
			if (line.empty() || line == "Test setup error: unknown type")
				return "";
			pObserver->test_message(Severity::Info, line);
			std::getline(is, line);
			continue;
		}

		if (sm[1].length() < indent)
			return line;

		unsigned id = GetArg<unsigned>(sm[3]);
		TestUnit::Type type = GetTestUnitType(sm[2]);
		std::string name = sm[4];
		bool enable = GetTestUnitEnable(sm[2]);

		node.children.push_back(TestUnit(id, type, normalize_type(name), enable));
		if (type == TestUnit::TestSuite)
			line = LoadTestUnits(node.children.back(), is, pObserver, sm[1].length() + 1);
		else
			std::getline(is, line);
	}

	return "";
}
Exemple #6
0
int ParseLine(TCHAR *pszLine, CONFIG *pConfig)
{
	int len;
	int start;
	TCHAR *pszToken;
	int iToken;

	Chomp(pszLine);

	start = GetToken(0, pszLine, &len, &pszToken);
	if (start == -1) // empty line or comment line
		return 0;

  iToken = LookupToken(pszToken);
  free(pszToken);
	switch (iToken)
	{
		case TOK_DLL_NAME:
			return ParseConfigDLLName(pszLine+start+len, pConfig);
			
		case TOK_PROCESS_NAME:
			return ParseConfigProcessName(pszLine+start+len, pConfig);

		case TOK_PID:
			return ParseConfigPID(pszLine+start+len, pConfig);
			
		case TOK_VERBOSE:
			return ParseConfigVerbose(pszLine+start+len, pConfig);
			
		case TOK_START:
			return ParseConfigStart(pszLine+start+len, pConfig);

		case TOK_WRITE:
			return ParseConfigWrite(pszLine+start+len, pConfig);

		case TOK_SEARCH_AND_WRITE:
			return ParseConfigSearchAndWrite(pszLine+start+len, pConfig);

		case TOK_PAUSE:
			return ParseConfigPause(pszLine+start+len, pConfig);

		case TOK_CONFIRM:
			return ParseConfigConfirm(pszLine+start+len, pConfig);

		case TOK_DUMP:
			return ParseConfigDump(pszLine+start+len, pConfig);

		case TOK_INJECT_DLL:
			return ParseConfigInjectDLL(pszLine+start+len, pConfig);

		case TOK_REJECT_DLL:
			return ParseConfigRejectDLL(pszLine+start+len, pConfig);

		case TOK_INFO:
			return ParseConfigInfo(pszLine+start+len, pConfig);

		case TOK_READONLY:
			return ParseConfigReadOnly(pszLine+start+len, pConfig);

		case TOK_SUSPEND:
			return ParseConfigSuspend(pszLine+start+len, pConfig);

		case TOK_RESUME:
			return ParseConfigResume(pszLine+start+len, pConfig);

		case TOK_PRINT:
			return ParseConfigPrint(pszLine+start+len, pConfig);

		case TOK_ADJUST_TOKE_PRIVILEGES:
			return ParseConfigAdjustTokenPrivileges(pszLine+start+len, pConfig);

		case TOK_STRINGS:
			return ParseConfigStrings(pszLine+start+len, pConfig);

		case TOK_DISABLE_CONSOLE_OUTPUT:
			return ParseConfigDisableConsoleOutput(pszLine+start+len, pConfig);

		case TOK_OUTPUT_TO_FILE:
			return ParseConfigOutputToFile(pszLine+start+len, pConfig);

		case TOK_PLUGIN:
			return ParseConfigPlugin(pszLine+start+len, pConfig);

		case TOK_REPEAT:
			return ParseConfigRepeat(pszLine+start+len, pConfig);

		case TOK_TEST_FUNCTION:
			return ParseConfigTestFunction(pszLine+start+len, pConfig);

		case TOK_INJECT_CODE:
			return ParseConfigInjectCode(pszLine+start+len, pConfig);
	}

	return -1;
}
Exemple #7
0
HRESULT Update(double deltaTime)
{
	HRESULT hr = S_OK;

	if (g_endgame)
		return EndgameUpdate(deltaTime);

	// TODO: Optimize for cache coherency
	//		 We could attempt to store chains of nodes linearly in memory. That would make the update loop for nodes in those chains
	//		 super fast (since the most chains could probably fit in one cache line). But it would involve a lot of mem moves and 
	//		 could introduce some complexity. Since we're already under 1ms average, I'd say let's not do it.

	// Sort into buckets
	BeginCounter(&binningCounter);
	{
		float pixelsPerVert = float((g_width * g_height) / g_numActiveNodes);
		float binDiameterPixels = sqrt(pixelsPerVert); // conservative
	
		g_binNHeight = binDiameterPixels / g_height;
		g_binNWidth  = binDiameterPixels / g_width;

		g_binCountX  = uint(ceilf(1.0f / g_binNWidth) )+2;  // Add a boundary around the outside
		g_binCountY  = uint(ceilf(1.0f / g_binNHeight))+2;

		uint xiter = g_binUpdateIter % g_numBinSplits;
		uint yiter = g_binUpdateIter / g_numBinSplits;
		g_binRangeX[0] = (g_binCountX * xiter/g_numBinSplits)		  - 1;	// Subtract/Add 1 to each of these ranges for a buffer layer
		g_binRangeX[1] = (g_binCountX * (xiter+1)/g_numBinSplits - 1) + 1;	// This buffer layer will be overlap for each quadrant
		g_binRangeY[0] = (g_binCountY * yiter/g_numBinSplits)		  - 1;	// But without it verts would only target verts in their quadrant
		g_binRangeY[1] = (g_binCountY * (yiter+1)/g_numBinSplits - 1) + 1;
		g_binStride  = g_numSlots / ((g_binRangeX[1] - g_binRangeX[0] + 1) * (g_binRangeY[1] - g_binRangeY[0] + 1));

		int bin;
		memset(g_slots, EMPTY_SLOT, sizeof(g_slots));
		for (uint i = 0; i < g_numNodes; i++)
		{
			if (g_nodes[i].attribs.hasChild == true) continue; // Only bin the chompable tails
			hr = Bin(g_nodes[i].position.getX(), g_nodes[i].position.getY(), &bin);
			if (FAILED(hr)) // If this bin isn't backed by memory, we can't be a target this frame
				continue;

			// Find first empty bin slot
			for (uint slot = 0; slot < g_binStride; slot++) 
			{
				if (g_slots[bin*g_binStride + slot] == EMPTY_SLOT)
				{
					g_slots[bin*g_binStride + slot] = i;
					break;
				}
			}
			// If we overflow the bins, the vertex cannot be targeted. Haven't seen any cases yet...
		}
		g_binUpdateIter = (g_binUpdateIter+1) % (g_numBinSplits*g_numBinSplits);
	}
	EndCounter(&binningCounter);

	// Determine nearest neighbors
	BeginCounter(&nearestNeighborCounter);
	for (uint i = 0; i < g_numNodes; i++)
	{
		IFC( FindNearestNeighbor(i) );
	}
	EndCounter(&nearestNeighborCounter);

	BeginCounter(&positionUpdate);
	for (uint i = 0; i < g_numNodes; i++)
	{
		// Do our memory reads here so we can optimize our access patterns
		Node& current = g_nodes[i];
		Node& target = g_nodes[current.attribs.targetID];

		// Get target vector
		// For optimal precision, pull our shorts into floats and do all math at full precision...
		float2 targetVec;
		targetVec.x = target.position.getX() - current.position.getX(); 
		targetVec.y = target.position.getY() - current.position.getY();

		float dist = targetVec.getLength();
		float2 dir = targetVec;
		if (dist != 0)
			dir = dir / dist;
		
		// Calculate change in position
		float2 offset;
		if (current.attribs.hasParent)
		{
			// This controls wigglyness. Perhaps it should be a function of velocity? (static is more wiggly)
			float parentPaddingRadius = g_tailDist;// + (rand() * 2 - 1)*g_tailDist*0.3f;
			offset = targetVec - dir * parentPaddingRadius;
		}
		else
			offset = min(targetVec, dir * float(g_speed * deltaTime));
		
		// ... then finally, at the verrrry end, stuff our FP floats into 16-bit shorts
		current.position.setX(current.position.getX() + offset.x);
		current.position.setY(current.position.getY() + offset.y);
		
		// Check for chomps
		if (current.attribs.hasParent == false && dist <= g_tailDist)
			Chomp(i);
	}
	EndCounter(&positionUpdate);

Cleanup:
	if (g_numActiveNodes == 1)
		return EndgameInit();

	return hr;
}
Exemple #8
0
int Filter_numsI(int argc, char **argv)
{
    char bufS[FILTBUF_SIZE+1], *cPC;
    int ok,nok,prev_ok,b_line,line,outline,pout,extra;
    FILTER *filtPO;
    
    filtPO = CreateFilterPO();
    if(!ParseArgsI(argc, argv,
        "S -not B -stat B -rg D2 -gt D -lt D -col I -out S\
        -seed I -ranf D -ranp D\
        -rann I -sc I -flag B -icbn B\
        -lrg I2 -wlis S -kc B -wst B -wsub B\
        -pln B -A I -B I -qu B -vex B -all B -bof I -blk I\
        -brg I2 -bnot B -blis S -maxout I -abs B -pfn B\
        -pre S -suf S",
        filtPO->inname, &filtPO->do_not, &filtPO->do_stat, 
        &filtPO->min,&filtPO->max, &filtPO->min, &filtPO->max, 
        &filtPO->col, filtPO->outname, 
        &filtPO->seed, &filtPO->ranf, &filtPO->ranp, 
        &filtPO->rann, &filtPO->skipc, &filtPO->do_flag, 
        &filtPO->do_icbn,
        &filtPO->firstl,&filtPO->lastl, filtPO->wlisname, 
        &filtPO->do_kc, &filtPO->do_wst, &filtPO->do_wsub, 
        &filtPO->do_pln, &filtPO->do_A, &filtPO->do_B, 
        &filtPO->do_quiet, &filtPO->do_vex, &filtPO->do_all, 
        &filtPO->l_bof, &filtPO->l_blk, &filtPO->firstb,&filtPO->lastb,
        &filtPO->do_bm_not, filtPO->blk_mlis, &filtPO->maxout,
        &filtPO->do_abs, &filtPO->do_pfn,
        filtPO->do_pre, filtPO->do_suf,
        (int *)NULL))
    {
        Filter_numsUse();
        CHECK_FILTER(filtPO);
        return(FALSE);
    }
    /***
    *   Check options and set things up
    */
    if(!OpenFilterFilesI(filtPO)) {
        CHECK_FILTER(filtPO);
        return(FALSE);
    }
    if(!CheckFilterOptionsI(filtPO)) {
        CHECK_FILTER(filtPO);
        return(FALSE);
    }
    /***
    *   Process lines 
    */
    line = outline = nok = extra = pout = 0;
    prev_ok = TRUE;
    while(fgets(bufS,FILTBUF_SIZE,filtPO->in) != NULL) 
    {
        if( SkipThisLineI(filtPO, bufS) ) {
            continue;
        }
        line++;
        /***
        *   If start-of-block, calc and save flag
        */
        b_line = LineInFiltBlockI(filtPO, line);
        if( b_line == 1 ) {
            cPC = GetLineStartPC(filtPO, bufS);
            ok = IsFiltLineOkI(filtPO, line, cPC, TRUE); 
            prev_ok = ok;
        }
        /*  Before blocks start */
        else if ( b_line < 1 ) {
            ok = FALSE;
        }
        /*  In block, but not start; Use previous value, and possibly mask if ok */
        else {
            ok = prev_ok;
            if(ok) {
                ok = LineInBlockOkI(filtPO, b_line);
            }
        }
        /*   Count ok, and set for any -After extra  */
        if(ok) {
            nok++;
            if(filtPO->do_A > 0) {
                extra = filtPO->do_A + 1;
            }
        }
        /*  Not only stats = per-line output */
        if( !filtPO->do_stat) {
            pout = FALSE;
            if( (filtPO->do_flag) || (ok) || (extra>0) ) {
                pout++;
                outline++;
            }
            /* If maxout is set, unset print flag if too many lines */
            if( (filtPO->maxout > 0) && (outline > filtPO->maxout) ) {
                pout = FALSE;
            }
            if(pout) {
                /***
                * Any line prefixes?
                */
                if(!NO_S(filtPO->do_pre)) {
                    fprintf(filtPO->out,"%s\t",filtPO->do_pre);
                }
                if(filtPO->do_pfn) {
                    fprintf(filtPO->out,"%s\t",filtPO->inname);
                }
                if(filtPO->do_pln) {
                    fprintf(filtPO->out,"%d\t",line);
                }
                if(filtPO->do_flag) {
                    fprintf(filtPO->out,"%d\t",ok);
                }
                /*** 
                * Suffix? Need to strip newline first, else just dump
                */
                if(!NO_S(filtPO->do_suf)) {
                    Chomp(bufS);
                    fprintf(filtPO->out,"%s\t%s\n",bufS, filtPO->do_suf);
                }
                else {
                    fputs(bufS,filtPO->out);
                }
            }
        }
        extra--;
    }
    ReportFilterStats(filtPO, line, nok); 
    CHECK_FILTER(filtPO);
    return(TRUE);
}