Esempio n. 1
0
Font* Renderer::loadFont(const std::string &fname, unsigned int size, unsigned sizew)
{
	Font *font = new Font();
	font->fontFileName = fname;
	font->fontSize = size;
	if (FT_New_Face(ft, font->fontFileName.c_str(), 0, &font->face)) {
		prn("Could not open font\n");
		return 0;
	}

	FT_Set_Char_Size(font->face, sizew * 16, font->fontSize * 16, 300, 300);
	FT_GlyphSlot g = font->face->glyph;

	font->w = 0;
	font->h = 0;
	for (int i = 0; i < 128; i++)
		font->c[i].exists = false;

	for (int i = 32; i < 128; i++) {
		if (FT_Load_Char(font->face, i, FT_LOAD_RENDER)) {
			prn("Loading character %c failed!\n", i);
			continue;
		}
		font->w += g->bitmap.width;
		font->h = std::max(font->h, g->bitmap.rows);
	}

	
	glActiveTexture(GL_TEXTURE0);
	glGenTextures(1, &font->tex);
	glBindTexture(GL_TEXTURE_2D, font->tex);
	glTexImage2D(GL_TEXTURE_2D, 0, GL_RED, font->w, font->h, 0, GL_RED, GL_UNSIGNED_BYTE, 0);

	int x = 0, n = 0;
	for (int i = 32; i < 128; i++) {
		if (FT_Load_Char(font->face, i, FT_LOAD_RENDER))
			continue;
		n++;
		glTexSubImage2D(GL_TEXTURE_2D, 0, x, 0, g->bitmap.width, g->bitmap.rows, GL_RED, GL_UNSIGNED_BYTE, g->bitmap.buffer);

		//prn("Cache %c %i %i", i, g->bitmap.width, g->bitmap.rows);
		font->c[i].exists = true;
		font->c[i].ax = g->advance.x >> 6;
		font->c[i].ay = g->advance.y >> 6;

		font->c[i].bw = g->bitmap.width;
		font->c[i].bh = g->bitmap.rows;

		font->c[i].bl = g->bitmap_left;
		font->c[i].bt = g->bitmap_top;

		font->c[i].tx = (float)x / font->w;

		x += g->bitmap.width;
	}
	prn("Cached %i characters for font %s", n, font->fontFileName.c_str());
	return font;
}
Esempio n. 2
0
	integer ServiceApp::onStartError(SeqFileOutput output) {
		PrintTextA prn(output);
		try {
			throw;
		} catch (LightSpeed::Exception &e) {
			prn("FATAL ERROR: %1\n") << e.getMessageWithReason();
		} catch (std::exception &e) {
			prn("FATAL ERROR: %1\n") << e.what();
		} catch (...) {
			prn("FATAL ERROR: unknown reason\n");
		}
		return 100;
	}
Esempio n. 3
0
void Renderer::init()
{
	int c = 0;
	glutInit(&c, 0);
	glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGB);
	glutInitWindowSize(800, 600);
	glutInitWindowPosition(100, 100);
	glutCreateWindow("vxc");
	glewInit();
	prn("OpenGL version: %s\n", (char*)glGetString(GL_VERSION));
	prn("OpenGL renderer: %s\n", (char*)glGetString(GL_RENDERER));

	ilInit();
	iluInit();
	ilutInit();
}
Esempio n. 4
0
// ---------------------------------------------------------------------------
// 
// -----------
OSStatus bPrintMgr::set_page_format(PMPageFormat pf, const char* name){
OSStatus		status;
char			path[PATH_MAX];
	map_doc->location(path);
bStdDirectory	root(path);
	if(root.status()){
		return(root.status());
	}
bStdDirectory	rsrc("Contents/Resources/");
	if(rsrc.status()){
		return(rsrc.status());
	}
char			nm[256];
int				sgn=kPrintSignature;
	sprintf(nm,"%.4s/",(char*)&sgn);
bStdDirectory	prn(nm);
	if(prn.status()){
		return(prn.status());
	}
bStdFile		f(name,"w");
	if(f.status()){
		return(f.status());
	}
    
CFDataRef	dt;
    status=PMPageFormatCreateDataRepresentation(pf,&dt,kPMDataFormatXMLDefault);
	if(status){
		return(status);
	}
	f.write((void*)CFDataGetBytePtr(dt),CFDataGetLength(dt));
	CFRelease(dt);
	return(noErr);
}
Esempio n. 5
0
File: sh.c Progetto: Ju2ender/c-e
/*
 * 父进程等待子进程终止
 * i为子进程pid,-1表示等待所有子进程
 * t为语法树节点
*/
void pwait(int i, int *t) 
{ 
        int p, e; 
        int s; 

        if(i != 0) 
        for(;;) { 
                times(&timeb); 
                time(timeb.proct); 
                p = wait(&s); 
                if(p == -1)     /* 等待失败 */
                        break; 
                e = s&0177;     /* 保留状态环境 */
                if(mesg[e] != 0) {  /* 子进程异常终止 */
                        if(p != i) { 
                                prn(p); 
                                prs(": "); 
                        } 
                        prs(mesg[e]);   /* 打印对应的消息 */
                        if(s&0200)  /* 内核奔溃 */
                                prs(" -- Core dumped"); 
                } 
                if(e != 0) 
                        err("");    /* 等待正常终止 */
                if(i == p) { 
                        acct(t); 
                        break; 
                } else 
                        acct(0); 
        } 
} 
TEST_F(SCDGTest2, testPageRankNibble) {
	METISGraphReader reader;
	Graph G = reader.read("input/hep-th.graph");
	// parameters
	node seed = 50;
	std::set<unsigned int> seeds = {(unsigned int) seed};
	double alpha = 0.1; // loop (or teleport) probability, changed due to DGleich from: // phi * phi / (225.0 * log(100.0 * sqrt(m)));
	double epsilon = 1e-5; // changed due to DGleich from: pow(2, exponent) / (48.0 * B);

	PageRankNibble prn(G, alpha, epsilon);
	count idBound = G.upperNodeIdBound();

	// run PageRank-Nibble and partition the graph accordingly
	DEBUG("Call PageRank-Nibble(", seed, ")");
	auto result = prn.run(seeds);
	auto cluster = result[seed];

	// prepare result
	EXPECT_GT(cluster.size(), 0u);
	Partition partition(idBound);
	partition.allToOnePartition();
	partition.toSingleton(50);
	index id = partition[seed];
	for (auto entry: cluster) {
		partition.moveToSubset(id, entry);
	}

	// evaluate result
	Conductance conductance;
	double targetCond = 0.4;
	double cond = conductance.getQuality(partition, G);
	EXPECT_LT(cond, targetCond);
	INFO("Conductance of PR-Nibble: ", cond, "; cluster size: ", cluster.size());
}
Esempio n. 7
0
File: sh.c Progetto: Ju2ender/c-e
/* itoa */ 
void prn(int n) 
{ 
        int a; 

        if(a=n/10) 
                prn(a); 
        put(n%10+'0'); 
} 
int main()
{
	int number;	
	int right;
	printf("输入你想练题的题数:");	
	scanf("%d",&number);
	right=data(number);
	prn(number,right);
	system("pause");
	return 0;
	 
} 
Esempio n. 9
0
void update_screen(void)
{
    char buf[32];

    rb->lcd_clear_display();
#ifdef HAVE_REMOTE_LCD
    rb->lcd_remote_clear_display();
#endif

#ifdef HAVE_LCD_BITMAP
    rb->snprintf(buf, sizeof(buf), "Files: %d", files);
    prn(buf,0);
    rb->snprintf(buf, sizeof(buf), "Music: %d", musicfiles);
    prn(buf,1);
    rb->snprintf(buf, sizeof(buf), "Dirs: %d", dirs);
    prn(buf,2);
    rb->snprintf(buf, sizeof(buf), "Max files in Dir: %d", largestdir);
    prn(buf,3);
#else
    rb->snprintf(buf, sizeof(buf), "Files:%5d", files);
    prn(buf,0);
    rb->snprintf(buf, sizeof(buf), "Dirs: %5d", dirs);
    prn(buf,1);
#endif

    rb->lcd_update();
#ifdef HAVE_REMOTE_LCD
    rb->lcd_remote_update();
#endif
}
Esempio n. 10
0
/**
 * print()
 *
 * Initiates the actual printing of the list.
 */
void PrintTreeWidget::print()
{
    QPrinter        prn(QPrinter::PrinterResolution);
    QPainter        *p;
    QBrush          bbrush;
    
    int         pageNo = 1;
    int         totPages = 1;
    int         totLines = 0;
    
    prn.setPageSize(QPrinter::Letter);
    prn.setDocName("List Print");
    prn.setCreator("Total Accountability");
    
    // Initialize the printer device.
    if (!prn.setup()) return;
    // prn.setOutputFileName("/tmp/Report.ps");
    // prn.setOutputToFile(TRUE);
    QApplication::setOverrideCursor(Qt::waitCursor);
    
    p = new QPainter();
    p->begin(&prn);
    
    // Count the children.
    totLines = myTree->topLevelItemCount();
    for (int i = 0; i < myTree->topLevelItemCount(); ++i) {
        totLines += countChildren(myTree->topLevelItem(i));
    }
    totPages = (totLines / 50) + 1;
    // fprintf(stderr, "The total number of pages is: %d\n", totPages);

    // Print the report...
    // FIXME:  This should print children as well, but it doesn't.
    for (pageNo = 1; pageNo < totPages + 1; pageNo++) {
        int sItem = ((pageNo -1) * 50);
        int eItem = sItem + 50;
        if (eItem > myTree->topLevelItemCount()) eItem = myTree->topLevelItemCount();
        printHeader(p);
        printRows(p, sItem, eItem);
        printFooter(p, pageNo, totPages);
        if (pageNo < totPages) prn.newPage();
        //progress.setProgress(pageNo);
        //if (progress.wasCancelled()) pageNo = totPages + 1;
    }
    //progress.setProgress(totPages);
    
    // We're all done.  Close the printer device.
    p->end();
    delete(p);
    QApplication::restoreOverrideCursor();
}
Esempio n. 11
0
void Renderer::load()
{
	glClearColor(0, 0, 0, 1.0);
	glEnable(GL_TEXTURE_2D);
	glEnable(GL_BLEND);
	glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
	glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
	glPixelStorei(GL_PACK_ALIGNMENT, 1);

	textShader = loadProgram("text", "text");
	quadShader = loadProgram("quad", "quad");
	demoShader = loadProgram("demo", "demo");
	texture = loadTexture("textures/demo512.png");
	uniform_coord = glGetAttribLocation(textShader->shaderProgram, "coord");
	uniform_atr = glGetAttribLocation(textShader->shaderProgram, "atr");

	GLfloat black[4] = { 0, 0, 0, 1 };
	textShader->setUniform4fv("color", 1, black);
	textShader->setUniform1i("texture1", 0);
	quadShader->setUniform1i("texture1", 0);
	demoShader->setUniform1i("texture1", 0);

	textVertexBufferSize = 6 * 1024;
	textVertexBuffer = new TextVertex[textVertexBufferSize];
	currentTextVertexBufferPos = 0;
	
	vboSize = sizeof(TextVertex)* textVertexBufferSize;
	glGenBuffersARB(1, &vbo);
	glBindBufferARB(GL_ARRAY_BUFFER_ARB, vbo);
	glBufferDataARB(GL_ARRAY_BUFFER_ARB, vboSize, 0, GL_DYNAMIC_DRAW_ARB);

	struct {
		vec2 pos;
	} quad[4] = { vec2(-1, 1), vec2(1, 1), vec2(-1, -1), vec2(1, -1) };

	glGenBuffersARB(1, &vboQuad);
	glBindBufferARB(GL_ARRAY_BUFFER_ARB, vboQuad);
	glBufferDataARB(GL_ARRAY_BUFFER_ARB, 4 * sizeof(vec2), quad, GL_DYNAMIC_DRAW_ARB);

	if (FT_Init_FreeType(&ft)) {
		prn("Could not init freetype library\n");
	}

	currentFont = 0;
	defaultFont = loadFont("fonts/lucon.ttf", 16, 17);
	
}
Esempio n. 12
0
File: p3.c Progetto: DavidToca/acm
void prn(int x)
{
	if (x < 0) x = -x;
	assert(1 <= x && x <= n);

	if (L[x] >= 0 && R[x] >= 0) {
		printf("%d%c%d", L[x], op[x], R[x]);
	} else if (L[x] >= 0) {
		printf("%d%c(", L[x], op[x]); prn(R[x]); printf(")");
	} else {
		if (op[x] == '*' && op[-L[x]] == '+')
			printf("("), prn(L[x]), printf(")");
		else
			prn(L[x]);

		if (R[x] >= 0)
			printf("%c%d", op[x], R[x]);
		else if (op[x] == '+' && op[-L[x]] == '*')
			printf("%c", op[x]), prn(R[x]);
		else
			printf("%c(", op[x]), prn(R[x]), printf(")");
	}
}
Esempio n. 13
0
static int random(const struct wordlist * const wl, int argc, char * argv[])
{
  const long int count = argc >= 3 ? atol(argv[2]) : 1;
  struct timespec tv;
  clock_gettime(CLOCK_REALTIME, &tv);
  srand(tv.tv_sec ^ tv.tv_nsec);
  for (long int i = 0; i < count; i++)
    {
      const int n = rand() % wl->nwords;
      if (prn(wl->words_counts[n].str + wl->strbase, wl->words_counts[n].len, stdout))
        return 1;
    }
  return 0;
}
Esempio n. 14
0
char* getstr(char in[],int len=100)
{
	char s[1],ch;
	int n=strlen(in);

	if(bufi==47) bufi=0;
	if(gy>=48) scroll();

	gx=0;
	strcpy(buf[bufi],in);
	ti=n;
	outtextxy(gx*6,gy*10,buf[bufi]);
	gx=n;
	s[1]=0;

	setfillstyle(1,13);
	bar(gx*6, gy*10+2,(gx+1)*6-3, (gy+1)*10-1);

	while( (ch=getch())!=13)
	{
		if( ch==8 && gx<=n || (!valid(ch)) || ti>=(len+n) && ch!=8 )
		{
			beep();
			continue;
		}
		s[0]=ch;
		setfillstyle(0,0);
		bar(gx*6, gy*10+2,(gx+1)*6, (gy+2)*10);
		prn(s);
		setfillstyle(1,13);
		bar(gx*6, gy*10+2,(gx+1)*6-3, (gy+1)*10-1);
	}
	setfillstyle(0,0);
	bar(gx*6, gy*10+2,(gx+1)*6, (gy+2)*10);

	char *t1;
	t1=new char[ti-n+1];
	for(int i=0;i<len&&t;i++)
	t1[i]=t[i+n];
	t1[ti-n]=0;

	strcat(buf[bufi],t1);

	bufi++;
	if(bufi==47) bufi=0;
	gy++;
	if(gy>=48) scroll();
	return t1;
}
Esempio n. 15
0
void CSkEventDocDialog::on_pushButton_2_clicked()
{
  QPrinter prn(QPrinter::ScreenResolution);
  QPrintDialog dlg(&prn, this);

  prn.setOrientation(QPrinter::Portrait);
  prn.setPageMargins(10, 10, 10, 10, QPrinter::Millimeter);

  if (dlg.exec() == DL_CANCEL)
  {
    return;
  }

  m_event->create(&prn, ui->checkBox->isChecked());
}
Esempio n. 16
0
// ---------------------------------------------------------------------------
// 
// -----------
OSStatus bPrintMgr::get_page_format(PMPageFormat* pf, const char* name){
	*pf=kPMNoPageFormat;
OSStatus		status;
char			path[PATH_MAX];
	map_doc->location(path);
bStdDirectory	root(path);
	if(root.status()){
		return(root.status());
	}
bStdDirectory	rsrc("Contents/Resources/");
	if(rsrc.status()){
		return(rsrc.status());
	}
char			nm[256];
int				sgn=kPrintSignature;
	sprintf(nm,"%.4s/",(char*)&sgn);
bStdDirectory	prn(nm);
	if(prn.status()){
		return(prn.status());
	}
bStdFile		f(name,"r");
	if(f.status()){
		return(f.status());
	}
void*			buf;
int				sz;
	f.mount((char**)&buf,&sz);
	if(f.status()){
		return(f.status());
	}
CFDataRef		dt=CFDataCreate(kCFAllocatorDefault,(UInt8*)buf,sz);
	free(buf);
	if(!dt){
		return(-1);
	}
    
    status=PMPageFormatCreateWithDataRepresentation(dt,pf);
	CFRelease(dt);
	if(status){
		*pf=kPMNoPageFormat;
		return(status);
	}
	return(noErr);
}
Esempio n. 17
0
File: cmd.c Progetto: 8l/FUZIX
static void synbad(void)
{
	prp();
	prs(synmsg);
	if ((flags & ttyflg) == 0) {
		prs(atline);
		prn(standin->flin);
	}
	prs(colon);
	prc(LQ);
	if (wdval)
		prsym(wdval);
	else
		prs(wdarg->argval);
	prc(RQ);
	prs(unexpected);
	newline();
	exitsh(SYNBAD);
}
Esempio n. 18
0
void prn(char s[])
{
	if( s[0]==8 )
	{
		if(gx)
		{
			t[--ti]=0;
			gx--;
			setfillstyle(0,0);
			bar(gx*6, gy*10+2,(gx+1)*6, (gy+2)*10);
			return;
		}
		beep();
		ti=0;
		return;
	}
	if(s[0]=='\t')
	{
		for(int i=0;i<8;i++)
		prn(" ");
	}
	if(s[0]==13)
	{
		gy++,gx=-1;
		t[ti]=0;
		strcpy(buf[bufi++],t);
		buf[bufi-1][ti]=0;
		if(bufi==47)bufi=0;
		setcmd();
		ti=0;
	}
	else	outtextxy(gx*6,gy*10,s),t[ti++]=s[0];
	gx++;
	if(gx>=105)
	{
		gy++;gx=0;
		t[ti]=0;
		strcpy(buf[bufi++],t);
		if(bufi==47)bufi=0;
		ti=0;
	}
	if(gy>=48) scroll();
}
Esempio n. 19
0
File: p3.c Progetto: DavidToca/acm
int main()
{
	static char s[256], sl[64][64], sr[64][64];
	int i, j, t, T;

	for (scanf("%d", &T), t = 1; t <= T && scanf("%d", &n) == 1; t++) {
		assert(n <= 60);
		for (i = 1; i <= n; i++) {
			j = scanf(" %[A-Za-z] = %[A-Za-z0-9] %[+*] %[A-Za-z0-9]",
				  name[i], sl[i], s, sr[i]);
			assert(j == 4 && (s[0] == '+' || s[0] == '*'));
			op[i] = s[0];
		}

		for (i = 1; i <= n; i++)
			L[i] = get(sl[i]), R[i] = get(sr[i]);

		printf("Expression #%d: ", t); prn(n); printf("\n");
	}

	return 0;
}
Esempio n. 20
0
extern "C" void
NPP_Print(NPP instance, NPPrint* printInfo)
{
    if(printInfo == NULL)
        return;

    if (instance != NULL) {
        _NPInstance* This = (_NPInstance*) instance->pdata;

        if (printInfo->mode == NP_FULL) {
            printInfo->print.fullPrint.pluginPrinted =
		This->instance->printFullPage();
        } else if (printInfo->mode == NP_EMBED) {
#ifdef _WS_X11_
            void* platformPrint =
                printInfo->print.embedPrint.platformPrint;
	    FILE* outfile = ((NPPrintCallbackStruct*)platformPrint)->fp;
	    if (ftell(outfile)) {
		NPWindow* w =
		    &(printInfo->print.embedPrint.window);
		QNPPrinter prn(outfile);
		QPainter painter(&prn);
		// #### config viewport with w->{x,y,width,height}
		This->instance->print(&painter);
		prn.end();
	    } else {
		// Why does the browser make spurious NPP_Print calls?
	    }
#endif
#ifdef _WS_WIN_
            NPWindow* printWindow =
                &(printInfo->print.embedPrint.window);
            void* platformPrint =
                printInfo->print.embedPrint.platformPrint;
	    // #### Nothing yet.
#endif
        }
    }
}
Esempio n. 21
0
void in()
{
	char s[1],ch;

	s[1]=0;
	setfillstyle(1,13);
	bar(gx*6, gy*10+2,(gx+1)*6-3, (gy+1)*10-1);

	while(1)
	{
		ch=getch();
		if(! valid(ch) )
		{
			beep();
			continue;
		}
		s[0]=ch;
		setfillstyle(0,0);
		bar(gx*6, gy*10+2,(gx+1)*6, (gy+2)*10);
		prn(s);
		setfillstyle(1,13);
		bar(gx*6, gy*10+2,(gx+1)*6-3, (gy+1)*10-1);
	}
}
Esempio n. 22
0
 Budgie::Budgie(const char* name, const char* wordsKnown ):Bird(name){
   prn("Creating ", this->name(), " Budgie");
 }
Esempio n. 23
0
bool Shader::rebuild()
{
	errors = "";
	std::string VertexShaderCode;
	std::string FragmentShaderCode;

	// Create the shaders
	GLuint VertexShaderID = glCreateShader(GL_VERTEX_SHADER);
	GLuint FragmentShaderID = glCreateShader(GL_FRAGMENT_SHADER);

	// Read the Vertex Shader code from the file
	VertexShaderCode = "";
	std::ifstream VertexShaderStream(vertFile.c_str(), std::ios::in);
	if (VertexShaderStream.is_open())
	{
		std::string Line = "";
		while (getline(VertexShaderStream, Line))
			VertexShaderCode += "\n" + Line;
		VertexShaderStream.close();
	}
	else
	{
		errors = "Shader rebuild failed! Couldn't open file " + vertFile;
		prn("Shader rebuild failed! Couldn't open file %s", vertFile.c_str());
		return false;
	}

	// Read the Fragment Shader code from the file
	fragBuff = FragmentShaderCode = "";
	std::ifstream FragmentShaderStream(fragFile.c_str(), std::ios::in);
	if (FragmentShaderStream.is_open()){
		std::string Line = "";
		while (getline(FragmentShaderStream, Line))
			FragmentShaderCode += "\n" + Line;
		FragmentShaderStream.close();
	}
	else
	{
		errors = "Shader rebuild failed! Couldn't open file " + fragFile;
		prn("Shader rebuild failed! Couldn't open file %s", fragFile.c_str());
		return false;
	}

	GLint result = GL_FALSE;
	int InfoLogLength;

	// Compile Vertex Shader
	prn("Compiling shader : %s\n", vertFile.c_str());
	char const * VertexSourcePointer = VertexShaderCode.c_str();
	glShaderSource(VertexShaderID, 1, &VertexSourcePointer, NULL);
	glCompileShader(VertexShaderID);

	// Check Vertex Shader
	glGetShaderiv(VertexShaderID, GL_COMPILE_STATUS, &result);
	if (!result) {
		glGetShaderiv(VertexShaderID, GL_INFO_LOG_LENGTH, &InfoLogLength);
		std::vector<char> VertexShaderErrorMessage(InfoLogLength);
		glGetShaderInfoLog(VertexShaderID, InfoLogLength, NULL, &VertexShaderErrorMessage[0]);
		prn("%s\n", &VertexShaderErrorMessage[0]);
		errors = "Shader rebuild failed!\n" + std::string(&VertexShaderErrorMessage[0]);
		return false;
	}


	// Compile Fragment Shader
	prn("Compiling shader : %s\n", fragFile.c_str());
	char const * FragmentSourcePointer = FragmentShaderCode.c_str();
	glShaderSource(FragmentShaderID, 1, &FragmentSourcePointer, NULL);
	glCompileShader(FragmentShaderID);

	// Check Fragment Shader
	glGetShaderiv(FragmentShaderID, GL_COMPILE_STATUS, &result);
	if (!result) {
		glGetShaderiv(FragmentShaderID, GL_INFO_LOG_LENGTH, &InfoLogLength);
		std::vector<char> FragmentShaderErrorMessage(InfoLogLength);
		glGetShaderInfoLog(FragmentShaderID, InfoLogLength, NULL, &FragmentShaderErrorMessage[0]);
		prn("%s\n", &FragmentShaderErrorMessage[0]);
		errors = "Shader rebuild failed!\n" + std::string(&FragmentShaderErrorMessage[0]);
		return false;
	}

	// Link the program
	prn("Linking program\n");
	GLuint ProgramID = glCreateProgram();
	glAttachShader(ProgramID, VertexShaderID);
	glAttachShader(ProgramID, FragmentShaderID);
	glLinkProgram(ProgramID);

	// Check the program
	glGetProgramiv(ProgramID, GL_LINK_STATUS, &result);
	if (!result) {
		glGetProgramiv(ProgramID, GL_INFO_LOG_LENGTH, &InfoLogLength);
		std::vector<char> ProgramErrorMessage(std::max(InfoLogLength, int(1)));
		glGetProgramInfoLog(ProgramID, InfoLogLength, NULL, &ProgramErrorMessage[0]);
		prn("%s\n", &ProgramErrorMessage[0]);
		errors = "Shader rebuild failed!\n" + std::string(&ProgramErrorMessage[0]);
		return false;
	}

	release();

	vertBuff = VertexShaderCode;
	fragBuff = FragmentShaderCode;

	vertexShader = VertexShaderID;
	fragmentShader = FragmentShaderID;
	shaderProgram = ProgramID;
	return vertexShader && fragmentShader && shaderProgram;
}
Esempio n. 24
0
 GoldFish::GoldFish(const char* name) :Pet(name){
   prn("Creating ", this->name(), " the GoldFish");
 }
Esempio n. 25
0
 Budgie::~Budgie(){
   prn("Remove ", name(), " the Budgie");
 }
Esempio n. 26
0
 GoldFish::~GoldFish(){
   prn("Killing ", name(), " the GoldFish");
 }
Esempio n. 27
0
void printres(std::ostream& os, Value val){
  BacktracePrinter prn(-1,-1);
  prn.print(os, val);
}
Esempio n. 28
0
 Cat::~Cat(){
   prn("Remove ", name(), " the Cat");
 }
Esempio n. 29
0
File: sh.c Progetto: Ju2ender/c-e
/*
 * 该函数从根节点开始深度优先遍历整个语法树,为每个命令创建进程并执行 
 * pf1和pf2是管道线I/O句柄,pf1表示命令输入端,pf2表示命令输出端 
 * pf1[0]: 管道线输入端句柄 
 * pf1[1]: 闲置 
 * pf2[0]: 闲置 
 * pf2[1]: 管道线输出端句柄 
*/ 
void execute(int *t, int *pf1, int *pf2) 
{ 
        int i, f, pv[2]; 
        int *t1; 
        char *cp1, *cp2; 
        extern int errno; 

        if(t != 0) 
        switch(t[DTYP]) { 

        case TCOM: 
                cp1 = (char *)t[DCOM]; 
                /* 以下为内置命令*/ 
                if(equal(cp1, "chdir")) { 
                        if(t[DCOM+1] != 0) { 
                                if(chdir(t[DCOM+1]) < 0) 
                                        err("chdir: bad directory"); 
                        } else 
                                err("chdir: arg count"); 
                        return; 
                } 
                if(equal(cp1, "shift")) { 
                        if(dolc < 1) { 
                                prs("shift: no args\n"); 
                                return; 
                        } 
                        dolv[1] = dolv[0]; 
                        dolv++; 
                        dolc--; 
                        return; 
                } 
                if(equal(cp1, "login")) { 
                        if(promp != 0) { 
                                close(acctf); 
                                execv("/bin/login", t+DCOM); 
                        } 
                        prs("login: cannot execute\n"); 
                        return; 
                } 
                if(equal(cp1, "newgrp")) { 
                        if(promp != 0) { 
                                close(acctf); 
                                execv("/bin/newgrp", t+DCOM); 
                        } 
                        prs("newgrp: cannot execute\n"); 
                        return; 
                } 
                if(equal(cp1, "wait")) { 
                        pwait(-1, 0); 
                        return; 
                } 
                if(equal(cp1, ":")) 
                        return; 
/* 注意,这里没有break,筛选掉内置命令后,外部命令会继续往下走*/ 
        case TPAR: 
                f = t[DFLG]; 
                i = 0; 
                if((f&FPAR) == 0)        /* 除了复合命令中最后一个子命令,其它一律fork子进程*/ 
                        i = fork(); 
                if(i == -1) { 
                        err("try again"); 
                        return; 
                } 
                if(i != 0) {        /* 父进程代码*/ 
                        if((f&FPIN) != 0) { 
                                close(pf1[0]);        /* fork之后,子进程获得父进程的管道线句柄拷贝,我们要在父进程中关闭它,以免资源泄漏*/ 
                                close(pf1[1]); /* 注意,这里只关闭pf1,因为pf1、pf2都是pv的镜像,因此关闭pf1就是关闭pf2 */ 
                        } 
                        if((f&FPRS) != 0) {/* 打印子进程pid */ 
                                prn(i); 
                                prs("\n"); 
                        } 
                        if((f&FAND) != 0)        /* 后台异步进程无需等待*/ 
                                return; 
                        if((f&FPOU) == 0)        /* 节点为管道线末端,等待子进程终止*/ 
                                pwait(i, t); 
                        return; 
                } 
/* 以下为子进程代码,或者FPAR属性节点命令进程*/ 
                if(t[DLEF] != 0) { 
                        close(0); 
                        i = open(t[DLEF], 0);        /* 重定向stdin到左子树节点*/ 
                        if(i < 0) { 
                                prs((char *)t[DLEF]); 
                                err(": cannot open"); 
                                exit(-1); 
                        } 
                } 
                if(t[DRIT] != 0) { 
                        if((f&FCAT) != 0) { 
                                i = open(t[DRIT], 1); 
                                if(i >= 0) { 
                                        seek(i, 0, 2);                /* 追加模式*/ 
                                        goto f1; 
                                } 
                        } 
                        i = creat(t[DRIT], 0666);        /* 创建新的文件句柄*/ 
                        if(i < 0) { 
                                prs((char *)t[DRIT]); 
                                err(": cannot create"); 
                                exit(-1); 
                        } 
                f1: 
                        close(1); 
                        dup(i);                /* 重定向stdout到右子树节点*/ 
                        close(i); 
                } 
                if((f&FPIN) != 0) { 
                        close(0); 
                        dup(pf1[0]);        /* 重定向stdin到管道线输入端*/ 
                        close(pf1[0]); 
                        close(pf1[1]);        /* 子进程关闭管道线句柄*/ 
                } 
                if((f&FPOU) != 0) { 
                        close(1); 
                        dup(pf2[1]);        /* 重定向stdout  到管道线输出*/ 
                        close(pf2[0]); 
                        close(pf2[1]);        /* 子进程关闭管道线句柄*/  
                } 
                if((f&FINT)!=0 && t[DLEF]==0 && (f&FPIN)==0) { 
                        close(0);        /* 若忽略中断,且不存在管道线输入,则关闭stdin并重定向到位桶*/ 
                        open("/dev/null", 0);        /* 以免来自其它进程stdin干扰,但stdout是保留的*/ 
                } 
                if((f&FINT) == 0 && setintr) { 
                        signal(INTR, 0);        /* 无FINT标识,则恢复中断信号响应(默认是忽略的) */ 
                        signal(QUIT, 0); 
                } 
                if(t[DTYP] == TPAR) {        /* 如果是复合类型,则执行子命令,同时下推FINT标识*/ 
                        if(t1 = (int *)t[DSPR]) 
                                t1[DFLG] |= f&FINT; 
                        execute(t1, NULL, NULL); 
                        exit(0); 
                } 
                close(acctf); 
                gflg = 0; 
                scan(t, &tglob);        /* 扫描通配符*/ 
                if(gflg) { 
                        t[DSPR] = (int)"/etc/glob"; 
                        execv(t[DSPR], t+DSPR);        /* 包含通配符的命令在/etc/glob中执行*/ 
                        prs("glob: cannot execute\n"); 
                        exit(-1); 
                } 
                scan(t, &trim);        /* 解除引用标识*/ 
                *linep = 0; 
                texec((char *)t[DCOM], t);        /* 最先执行当前目录下的命令*/ 
                cp1 = linep; 
                cp2 = "/usr/bin/"; 
                while(*cp1 = *cp2++)    /* strcpy,cp1停在'\0'位置 */
                        cp1++; 
                cp2 = (char *)t[DCOM]; 
                while(*cp1++ = *cp2++);     /* strcpy,'\0'结束 */
                texec(linep+4, t);        /* 接着执行/bin目录下的命令*/ 
                texec(linep, t);        /* 最后执行/usr/bin目录下的命令*/ 
                prs((char *)t[DCOM]);   /* 若进程异常退出,表示找不到命令,退出shell */
                err(": not found"); 
                exit(-1); 

        case TFIL: 
                f = t[DFLG]; 
                pipe(pv);        /* 创建管道线,pv[0]为输入句柄,pv[1]为输出句柄*/ 
                t1 = (int *)t[DLEF]; 
                t1[DFLG] |= FPOU | (f&(FPIN|FINT|FPRS)); 
                execute(t1, pf1, pv);        /* 对于左子树节点,pv[1]作为管道线输出句柄传入,pv[0]闲置*/ 
                t1 = (int *)t[DRIT]; 
                t1[DFLG] |= FPIN | (f&(FPOU|FINT|FAND|FPRS));        /* 只有管道线末端命令才能继承FAND属性,与FPOU排斥*/ 
                execute(t1, pv, pf2);        /* 对于右子树节点,pv[0]作为管道线输入句柄传入,pv[1]闲置*/ 
                return; 

        case TLST: 
                f = t[DFLG]&FINT;                /* 对于命令序列节点,下推FINT属性到左右子树*/ 
                if(t1 = (int *)t[DLEF]) 
                        t1[DFLG] |= f; 
                execute(t1, NULL, NULL);        /* 先左后右依次执行 */
                if(t1 = (int *)t[DRIT]) 
                        t1[DFLG] |= f; 
                execute(t1, NULL, NULL); 
                return; 

        } 
} 
Esempio n. 30
0
 Cat::Cat(const char* name, int numOfLives):Pet(name){
   _numOfLives = numOfLives;
   prn("Creating ", this->name(), " the Cat");
 }