예제 #1
0
void DebugDrawing3D::draw()
{
  if(robotConsole)
  {
    SYNC_WITH(*robotConsole);
    draw2();
  }
  else
    draw2();
}
예제 #2
0
        virtual void onDrawContent(SkCanvas* canvas)
            {
            canvas->translate(SkIntToScalar(20), SkIntToScalar(20));

            draw2(canvas, fBM8);
            canvas->translate(0, SkIntToScalar(fBM8.height() *3));
            draw2(canvas, fBM32);

            canvas->translate(0, SkIntToScalar(fBM8.height() *3));
            draw_gradient(canvas);
            }
예제 #3
0
파일: rect.c 프로젝트: berndf/avg_q
/*
 * rect
 *
 * draw a rectangle given two opposite corners
 *
 */
void
rect(Coord x1, Coord y1, Coord x2, Coord y2)
{
	if (!vdevice.initialised)
		verror("rect: vogl not initialised");

	move2(x1, y1);
	draw2(x2, y1);
	draw2(x2, y2);
	draw2(x1, y2);
	draw2(x1, y1);
}
    virtual void onDrawContent(SkCanvas* canvas) {
        canvas->translate(SkIntToScalar(20), SkIntToScalar(20));

        draw2(canvas, fBM8);
        canvas->translate(0, SkIntToScalar(fBM8.height() *3));
        draw2(canvas, fBM32);

        canvas->translate(0, SkIntToScalar(fBM8.height() *3));
        draw_gradient(canvas);

        char resultTrue[] = "SkRegion::setPath returned true";
        char resultFalse[] = "SkRegion::setPath returned false";
        SkPaint p;
        if (fResult)
            canvas->drawText(resultTrue, sizeof(resultTrue) - 1, 0, 50, p);
        else
            canvas->drawText(resultFalse, sizeof(resultFalse) - 1, 0, 50, p);
    }
예제 #5
0
void SceneArea::display() {
	_bounds.left = _pt.x - (_surface.getBounds().width() / 2);
	_bounds.top = _pt.y + 1 - _surface.getBounds().height();
	_bounds.setWidth(_surface.getBounds().width());
	_bounds.setHeight(_surface.getBounds().height());

	_savedArea = Surface_getArea(_globals->_gfxManagerInstance.getSurface(), _bounds);
	draw2();
}
예제 #6
0
void CursesMessageDisplay::draw()
{
	// About to redraw the screen, clear the link cache

	CursesMessage *messageInfo=messageInfoPtr;

	if (messageInfo)
		messageInfo->clearlinks();

	draw2();
}
예제 #7
0
void drawScoreboard(paddle *p1, paddle *p2){
  uint32_t gold = 0xffff00; //white = 0xffffff;

  if ( p1->score == 0 )
    draw0(gold,P1_SCORE_X,P1_SCORE_Y);
  else if ( p1->score == 1 )
    draw1(gold,P1_SCORE_X,P1_SCORE_Y); 
  else if ( p1->score == 2 )
    draw2(gold,P1_SCORE_X,P1_SCORE_Y);
  else if ( p1->score == 3 )
    draw3(gold,P1_SCORE_X,P1_SCORE_Y);
  if ( p2->score == 0 )
    draw0(gold,P2_SCORE_X,P2_SCORE_Y);
  else if ( p2->score == 1 )
    draw1(gold,P2_SCORE_X,P2_SCORE_Y); 
  else if ( p2->score == 2 )
    draw2(gold,P2_SCORE_X,P2_SCORE_Y);
  else if ( p2->score == 3 )
    draw3(gold,P2_SCORE_X,P2_SCORE_Y);
}
예제 #8
0
void  set_message_viewport()
{
#ifdef ksdslslslsl
	if(in_which_viewport == MESSAGE_VIEWPORT)
		return;

	in_which_viewport = MESSAGE_VIEWPORT;




	wrmask(0xff);

	my_size_chars(0);

	window(W_LEFT + CHAR_X_SHIFT,W_RIGHT + CHAR_X_SHIFT,
		W_BOTTOM + CHAR_Y_SHIFT,W_TOP + CHAR_Y_SHIFT);
	viewport(V_LEFT,V_RIGHT,V_BOTTOM,V_TOP);


	color(BORDER_COLOR);
	move2(W_LEFT + CHAR_X_SHIFT + W_BORDER_INDENT,
		W_BOTTOM + CHAR_Y_SHIFT + W_BORDER_INDENT);
	draw2(W_LEFT + CHAR_X_SHIFT + W_BORDER_INDENT,
		W_TOP + CHAR_Y_SHIFT - W_BORDER_INDENT);
	draw2(W_RIGHT + CHAR_X_SHIFT - W_BORDER_INDENT,
		W_TOP + CHAR_Y_SHIFT - W_BORDER_INDENT);
	draw2(W_RIGHT + CHAR_X_SHIFT - W_BORDER_INDENT,
		W_BOTTOM + CHAR_Y_SHIFT + W_BORDER_INDENT);
	draw2(W_LEFT + CHAR_X_SHIFT + W_BORDER_INDENT,
		W_BOTTOM + CHAR_Y_SHIFT + W_BORDER_INDENT);

	window(W_LEFT + CHAR_X_SHIFT + CHAR_WIDTH,
		W_RIGHT + CHAR_X_SHIFT  - CHAR_WIDTH,
		W_BOTTOM + CHAR_Y_SHIFT + CHAR_HEIGHT,
		W_TOP + CHAR_Y_SHIFT  - CHAR_HEIGHT);
	viewport(V_LEFT + V_BORDER_INDENT,V_RIGHT - V_BORDER_INDENT,
		V_BOTTOM + V_BORDER_INDENT,V_TOP - V_BORDER_INDENT);

#endif
}
예제 #9
0
/*
 * drawgrid
 *
 *	draw a grid in the middle of the screen
 */
void
drawgrid()
{
	float	x;
	int	i;

	color(GREEN);

	rect(0.1, 0.4, 0.9, 0.6);

	x = 0.2;
	for (i = 0; i < 8; i++) {
		move2(x, 0.4);
		draw2(x, 0.6);
		x += 0.1;
	}
	move2(0.1, 0.5);
	draw2(0.9, 0.5);

	color(YELLOW);
}
예제 #10
0
void Drawable::draw()
{
	glPushMatrix();
		glTranslated(Pos.x, Pos.y, 0); // translate to Drawable's location
		glPushMatrix();
			//Draw the scaled object
			glScaled(Scale.x, Scale.y, 1.0f);
			glRotated(RadToDeg(Rot), 0, 0, 1);
			draw2();
		glPopMatrix();
		//Draw all the children
		for (std::list<Drawable*>::iterator dPtr = Children.begin();dPtr != Children.end(); ++dPtr) {
			(*dPtr)->draw();
		}
	glPopMatrix();
}
예제 #11
0
파일: Animation.cpp 프로젝트: baens/SchooGL
// private set ups
void Animation::setupEnter(){
	Point* p1 = new Point(-9.75, -5.0);	Point* p2 = new Point(-9.25, -5.0);	Point* p3 = new Point(-8.75, -5.0);
	Point* p4 = new Point(-8.25, -5.0);	Point* p5 = new Point(-7.75, -5.0);	Point* p6 = new Point(-7.25, -5.0);
	Point* p7 = new Point(-6.75, -5.0);	Point* p8 = new Point(-6.25, -5.0);	Point* p9 = new Point(-5.75, -5.0);
	Point* p10 = new Point(-5.25, -5.0); Point* p11 = new Point(-4.75, -5.0); Point* p12 = new Point(-4.25, -5.0);
	Point* p13 = new Point(-3.75, -5.0); Point* p14 = new Point(-3.25, -5.0); Point* p15 = new Point(-2.75, -5.0);
	Point* p16 = new Point(-2.25, -5.0); Point* p17 = new Point(-1.75, -5.0); Point* p18 = new Point(-1.25, -5.0);
	Rectangle1 nostep(5.0, 5.0, Point(-10.75, -5.0), "data/character/nostep",UserManager::getProfile().getColor());
	Rectangle1 step(5.0, 5.0, Point(-10.25, -5.0), "data/character/step",UserManager::getProfile().getColor());
	Rectangle1 draw1(5.0, 5.0, Point(-1.25, -5.0), "data/character/draw1",UserManager::getProfile().getColor());
	Rectangle1 draw2(5.0, 5.0, Point(-1.25, -5.0), "data/character/draw2",UserManager::getProfile().getColor());
	Rectangle1 draw3(5.0, 5.0, Point(-1.25, -5.0), "data/character/draw3",UserManager::getProfile().getColor());
	Rectangle1 defense(5.0, 5.0, Point(-1.25, -5.0), "data/character/defensivestance",UserManager::getProfile().getColor());
	enter.push_back(nostep); enter.push_back(step); nostep.setPoint(p1); step.setPoint(p2);
	enter.push_back(nostep); enter.push_back(step);	nostep.setPoint(p3); step.setPoint(p4);
	enter.push_back(nostep); enter.push_back(step);	nostep.setPoint(p5); step.setPoint(p6);
	enter.push_back(nostep); enter.push_back(step);	nostep.setPoint(p7); step.setPoint(p8);
	enter.push_back(nostep); enter.push_back(step);	nostep.setPoint(p9); step.setPoint(p10);
	enter.push_back(nostep); enter.push_back(step);	nostep.setPoint(p11); step.setPoint(p12);
	enter.push_back(nostep); enter.push_back(step);	nostep.setPoint(p13); step.setPoint(p14);
	enter.push_back(nostep); enter.push_back(step);	nostep.setPoint(p15); step.setPoint(p16);
	enter.push_back(nostep); enter.push_back(step);	nostep.setPoint(p17); step.setPoint(p18);
	enter.push_back(nostep); enter.push_back(step);	enter.push_back(draw1);	enter.push_back(draw2);	enter.push_back(draw3);	enter.push_back(defense);
	Rectangle1 monster(5.0, 5.0, Point(10.5, -6), "data/monster/" + mon);
	enemyEnter.push_back(monster); Point* point = new Point(10.0, -6); monster.setPoint(point);
	enemyEnter.push_back(monster); point = new Point(9.5, -6); monster.setPoint(point);
	enemyEnter.push_back(monster); point = new Point(9.0, -6); monster.setPoint(point);
	enemyEnter.push_back(monster); point = new Point(8.5, -6); monster.setPoint(point);
	enemyEnter.push_back(monster); point = new Point(8.0, -6); monster.setPoint(point);
	enemyEnter.push_back(monster); point = new Point(7.5, -6); monster.setPoint(point);
	enemyEnter.push_back(monster); point = new Point(7.0, -6); monster.setPoint(point);
	enemyEnter.push_back(monster); point = new Point(6.5, -6); monster.setPoint(point);
	enemyEnter.push_back(monster); point = new Point(6.0, -6); monster.setPoint(point);
	enemyEnter.push_back(monster); point = new Point(5.5, -6); monster.setPoint(point);
	enemyEnter.push_back(monster); point = new Point(4.0, -6); monster.setPoint(point);
	enemyEnter.push_back(monster); point = new Point(3.5, -6); monster.setPoint(point);
	enemyEnter.push_back(monster); point = new Point(3.0, -6); monster.setPoint(point);
	enemyEnter.push_back(monster); point = new Point(2.5, -6); monster.setPoint(point);
	enemyEnter.push_back(monster); enemyEnter.push_back(monster); enemyEnter.push_back(monster); 
	enemyEnter.push_back(monster); enemyEnter.push_back(monster); enemyEnter.push_back(monster);
	enemyEnter.push_back(monster); enemyEnter.push_back(monster); enemyEnter.push_back(monster);
	enemyEnter.push_back(monster);
}
예제 #12
0
파일: OsuCircle.cpp 프로젝트: McKay42/McOsu
void OsuCircle::drawVR2(Graphics *g, Matrix4 &mvp, OsuVR *vr)
{
	// TODO: performance! if nothing of the circle is visible, then we don't have to calculate anything
	///if (m_bVisible)
	{
		float clampedApproachScalePercent = m_fApproachScale - 1.0f; // goes from <m_osu_approach_scale_multiplier_ref> to 0
		clampedApproachScalePercent = clamp<float>(clampedApproachScalePercent / m_osu_approach_scale_multiplier_ref->getFloat(), 0.0f, 1.0f); // goes from 1 to 0

		if (m_osu_vr_approach_circles_on_playfield->getBool())
			clampedApproachScalePercent = 0.0f;

		Matrix4 translation;
		translation.translate(0, 0, -clampedApproachScalePercent*vr->getApproachDistance());
		Matrix4 finalMVP = mvp * translation;

		vr->getShaderTexturedLegacyGeneric()->setUniformMatrix4fv("matrix", finalMVP);
		draw2(g);
	}
}
예제 #13
0
파일: banner.c 프로젝트: yylyyl/OSLab1
void update_banner(void) {
	banner[1] = ani[tsc];
	tsc = (tsc + 1) % (sizeof(ani) - 1);
	char *p = banner + SCR_W - 20;
	Time tm;
	get_time(&tm);
	*p ++ = '2';
	*p ++ = '0';
	draw2(&p, tm.year % 100); *p ++ = '/';
	draw2(&p, tm.month); *p ++ = '/';
	draw2(&p, tm.day); *p ++ = ' ';
	draw2(&p, tm.hour); *p ++ = ':';
	draw2(&p, tm.minute); *p ++ = ':';
	draw2(&p, tm.second);
	banner[3] = 't';
	banner[4] = 't';
	banner[5] = 'y';
	banner[6] = '1' + current_consl - ttys;
	consl_sync(current_consl);
}
예제 #14
0
bool CursesMessageDisplay::processKeyInFocus(const Curses::Key &key)
{
	CursesMessage *messageInfo=messageInfoPtr;

	if (!messageInfo)
		return false;

	if (key == key.ENTER)
	{
		size_t row;
		size_t col;
		std::string url;

		if (!messageInfo->getCurrentLink(row, col, url))
			return true;


		if (url.substr(0, 7) == "mailto:")
		{
			if (myMessage::checkInterrupted(false) &&
			    (messageInfo=messageInfoPtr) != NULL)
				myMessage::newMessage(messageInfo->myfolder
						      ->getFolder(),
						      messageInfo->myfolder
						      ->getServer(),
						      url.substr(7));
			return true;
		}


		std::string handler;

		size_t p=url.find(':');

		if (p != std::string::npos)
		{
			handler=myServer::getConfigDir() + "/"
				+ url.substr(0, p) + ".handler";

			if (access(handler.c_str(), X_OK))
			{
				handler=FILTERDIR "/"
					+ url.substr(0, p) + ".handler";

				if (access(handler.c_str(), X_OK))
					handler="";
			}
		}

		if (handler.size() == 0)
		{
			statusBar->clearstatus();
			statusBar->
				status(Gettext(_("Cannot find handler for %1%"))
				       << url);
			statusBar->beepError();
			return true;
		}

		pid_t pp=fork();

		if (pp < 0)
		{
			statusBar->clearstatus();
			statusBar->status(strerror(errno));
			statusBar->beepError();
			return true;
		}

		if (pp == 0)
		{
			close(1);
			open("/dev/null", O_WRONLY);
			dup2(1, 2);
			dup2(1, 0);

			execl(handler.c_str(), handler.c_str(), url.c_str(),
			      (char *)NULL);

			exit(1);
		}

		pid_t p2;
		int waitstat;

		while ((p2=wait(&waitstat)) != pp)
		{
			if (p2 < 0 && errno != EINTR)
				break;
		}

		if (p2 == pp && WIFEXITED(waitstat) &&
		    WEXITSTATUS(waitstat) == 0)
		{
			statusBar->status(_("Started external handler."));
			return true;
		}

		statusBar->clearstatus();
		statusBar->status(_("External handler terminated with a non-zero exit code."),
				  statusBar->SYSERROR);
		return true;
	}

	if (key == key_TAKEADDR)
	{
		mail::envelope *e=messageInfo->getEnvelope();

		std::vector<mail::address> addrList;

		addrList.reserve(e->from.size() +
				 e->to.size() +
				 e->cc.size() +
				 e->bcc.size() +
				 e->sender.size() +
				 e->replyto.size());

		addrList.insert(addrList.end(),
				e->from.begin(),
				e->from.end());

		addrList.insert(addrList.end(),
				e->to.begin(),
				e->to.end());

		addrList.insert(addrList.end(),
				e->cc.begin(),
				e->cc.end());

		addrList.insert(addrList.end(),
				e->bcc.begin(),
				e->bcc.end());

		addrList.insert(addrList.end(),
				e->sender.begin(),
				e->sender.end());

		addrList.insert(addrList.end(),
				e->replyto.begin(),
				e->replyto.end());

		AddressBook::take(addrList);
		return true;
	}
	if (key == key_FOLDERINDEX ||
	    key == key_LESSTHAN)
	{
		keepgoing=false;
		myServer::nextScreen=&folderIndexScreen;
		myServer::nextScreenArg=messageInfo->myfolder;
		return true;
	}


	if (key == key_DELETE)
		messageInfo->myfolder->markDeleted( messageInfo->messagesortednum,
						    true, false);

	if (key == key_UNDELETE)
		messageInfo->myfolder->markDeleted( messageInfo->messagesortednum,
						    false, false);

	if (key == key_NEXTMESSAGE ||
	    key == key_DELETE ||
	    key == key_UNDELETE)
	{
		size_t dummy;

		if (messageInfo->myfolder->getNextMessage(dummy))
		{
			Curses::keepgoing=false;
			myServer::nextScreen= &goNextMessage;
			myServer::nextScreenArg=messageInfo->myfolder;
			return true;
		}
		return true;
	}

	if (key == key_PREVMESSAGE)
	{
		size_t dummy;

		if (messageInfo->myfolder->getPrevMessage(dummy))
		{
			Curses::keepgoing=false;
			myServer::nextScreen= &goPrevMessage;
			myServer::nextScreenArg=messageInfo->myfolder;
		}
		return true;
	}

	if (key == ' ' || key == Key::RIGHT ||
	    key == Key::PGDN || key == Key::DOWN)
	{
		if ((key == Key::DOWN || key == Key::RIGHT) &&
		    messageInfo->nextLink())
			return true; // Went to next link instead

		size_t nLines=messageInfo->nLines();
		size_t h=getHeight();

		size_t lastLine= nLines > h ? nLines-h:0;

		size_t firstLineSaved=getFirstLineShown();

		if (key == Key::DOWN || key == Key::RIGHT)
			setFirstLineShown(getFirstLineShown()+1);
		else
			setFirstLineShown(getFirstLineShown()+h);

		if (getFirstLineShown() > lastLine)
			setFirstLineShown(lastLine);

		if (firstLineSaved == getFirstLineShown() && key == ' ')
		{
			size_t dummy;

			if (messageInfo->myfolder->
			    getNextUnreadMessage(dummy))
			{
				Curses::keepgoing=false;
				myServer::nextScreen= &goNextUnreadMessage;
				myServer::nextScreenArg=messageInfo->myfolder;
				return true;
			}

			statusBar->clearstatus();
			statusBar->status(Gettext(_("No more unread mail in %1%"))
					  << messageInfo->myfolder
					  ->getFolder()->getName());
			return true;
		}

		folderUpdated();
		draw2();
		messageInfo->toLastLink();
		return true;
	}

	if (key == Key::LEFT || key == Key::PGUP || key == Key::UP)
	{
		if (key != Key::PGUP && messageInfo->prevLink())
			return true;

		size_t h=key != Key::PGUP ? 1:getHeight();

		setFirstLineShown(getFirstLineShown() < h ? 0:
				  getFirstLineShown()-h);
		folderUpdated();
		draw2();
		return true;
	}

	if (key == key_VIEWATT)
	{
		Curses::keepgoing=false;
		myServer::nextScreen=showAttachments;
		myServer::nextScreenArg=messageInfo;
		return true;
	}

	if (key == key_SAVE)
	{
		std::string filename;

		{
			SaveDialog save_dialog(filename);

			save_dialog.requestFocus();
			myServer::eventloop();

			filename=save_dialog;
			mainScreen->erase();
		}
		mainScreen->draw();
		requestFocus();

		if (messageInfoPtr.isDestroyed() || filename == "")
			return true;

		CursesAttachmentDisplay::downloadTo(messageInfoPtr,
						    messageInfoPtr->shownMimeId
						    != ""
						    ?
						    messageInfoPtr->structure
						    .find(messageInfoPtr->
							  shownMimeId)
						    :NULL,
						    filename);
		return true;
	}


	if (key == key_BOUNCE)
	{
		if (messageInfo->shownMimeId.size())
		{
			statusBar->clearstatus();
			statusBar->status(_("Cannot forward only an attachment, just the whole message."));
			statusBar->beepError();
			return true;
		}

		mail::smtpInfo sendInfo;

		std::string from;
		std::string replyto;
		std::string fcc;
		std::string customheaders;

		if (!myMessage::getDefaultHeaders(messageInfo->myfolder
						  ->getFolder(),
						  messageInfo->myfolder
						  ->getServer(),
						  from, replyto, fcc,
						  customheaders))
		{
			return true;
		}

		{
			std::vector<mail::address> addrList;
			size_t errIndex;

			if (mail::address::fromString(from, addrList,
						      errIndex)
			    && addrList.size() > 0)
				sendInfo.sender=addrList[0].getAddr();
		}

		mail::ptr<myFolder> folderPtr=messageInfo->myfolder;

		if (!CursesMessage::getBounceTo(sendInfo)
		    || !CursesMessage::getSendInfo(Gettext(_("Blind-forward message to %1% address(es)? (Y/N) "))
						   << sendInfo.recipients
						   .size(), "",
						   sendInfo, NULL))
			return true;

		disconnectCallbackStub disconnectStub;
		myServer::Callback sendCallback;

		mail::account *smtpServer;
		mail::folder *folder=
			CursesMessage::getSendFolder(sendInfo, smtpServer,
						     NULL,
						     disconnectStub);

		if (!folder)
			return true;

		if (folderPtr.isDestroyed() || messageInfoPtr.isDestroyed())
		{
			delete folder;
			if (smtpServer)
				delete smtpServer;
			return true;
		}

		try {
			messageInfo->copyContentsTo(folder, sendCallback);

			bool rc=myServer::eventloop(sendCallback);

			delete folder;
			folder=NULL;

			if (smtpServer)
			{
				if (rc)
				{
					myServer::Callback disconnectCallback;

					disconnectCallback.noreport=true;

					smtpServer->logout(disconnectCallback);
					myServer::
						eventloop(disconnectCallback);
				}

				delete smtpServer;
				smtpServer=NULL;
			}
			

		} catch (...) {

			if (folder)
				delete folder;
			if (smtpServer)
				delete smtpServer;
			LIBMAIL_THROW(LIBMAIL_THROW_EMPTY);
		}

		return true;
	}

	if (key == key_REPLY)
	{
		mail::ptr<myFolder> folder=messageInfo->myfolder;

		if (myMessage::checkInterrupted() &&
		    !folder.isDestroyed() &&
		    !messageInfoPtr.isDestroyed())
			messageInfo->reply();
		return true;
	}

	if (key == key_FWD)
	{
		mail::ptr<myFolder> folder=messageInfo->myfolder;

		if (myMessage::checkInterrupted() &&
		    !folder.isDestroyed() &&
		    !messageInfoPtr.isDestroyed())
			messageInfo->forward();
		return true;
	}

	if (key == key_HEADERS)
	{
		erase();
		messageInfo->fullEnvelopeHeaders=
			!messageInfo->fullEnvelopeHeaders;
		setFirstLineShown(0);
		messageInfo->beginReformat(getWidth());
		folderUpdated();
		return true;
	}

	if (key == key_PRINT)
	{
		mail::ptr<CursesMessage> ptr=messageInfo;
		int pipefd[2];
		pid_t pid1;

		myServer::promptInfo
			printPrompt(_("Print to: "));

		if (printCommand.size() == 0)
			printCommand="lpr";

		printPrompt=myServer::prompt(printPrompt
					     .initialValue(printCommand));

		if (printPrompt.abortflag || ptr.isDestroyed())
			return true;

		std::vector<const char *> args;

		{
			const char *p=getenv("SHELL");

			if (!p || !*p)
				p="/bin/sh";

			args.push_back(p);
		}

		args.push_back("-c");

		printCommand=printPrompt;

		args.push_back(printCommand.c_str());
		args.push_back(0);

		//
		// Fork a child process which writes the text image of the
		// message to a pipe.
		//
		// The parent process runs the print command, piping the text
		// into it.

		signal(SIGCHLD, SIG_DFL);

		if (pipe(pipefd) < 0)
		{
			statusBar->clearstatus();
			statusBar->status(strerror(errno));
			statusBar->beepError();
			return true;
		}

		if ((pid1=fork()) == 0)
		{
			FILE *fp;

			// First child exits, the second child generates the
			// text.

			if (fork())
				exit(0);
			signal(SIGPIPE, SIG_DFL);
			close(pipefd[0]);

			fp=fdopen(pipefd[1], "w");
			if (fp)
			{
				size_t nLines=messageInfo->nLines();
				size_t i;
				std::vector<std::pair<textAttributes, std::string> > line;

				std::vector<std::pair<textAttributes, std::string> >
					::iterator b, e;

				for (i=0; i<nLines; i++)
				{
					messageInfo->getLineImage(i, line);

					for (b=line.begin(), e=line.end();
					     b != e; ++b)
					{
						fprintf(fp, "%s",
							b->second.c_str());
					}
					fprintf(fp, "\n");
				}
				fflush(fp);
			}
			exit(0);
		}

		// Wait for the first child to exit.

		if (pid1 < 0)
		{
			close(pipefd[0]);
			close(pipefd[1]);
			statusBar->clearstatus();
			statusBar->status(strerror(errno));
			statusBar->beepError();
			return true;
		}

		close(pipefd[1]);

		while (wait(NULL) != pid1)
			;

		Curses::runCommand(args, pipefd[0], "");
		close(pipefd[0]);
		return true;
	}

	if (key == key_ROT13)
	{
		erase();
		messageInfo->rot13=!messageInfo->rot13;
		setFirstLineShown(0);
		messageInfo->beginReformat(getWidth());
		folderUpdated();
		return true;
	}

	if ((key == key_UNENCRYPT) &&
	    (messageInfo->isSigned() ||
	     messageInfo->isEncrypted()) &&
	    GPG::gpg.gpg_installed())
	{
		mail::ptr<CursesMessage> ptr=messageInfo;
		std::string passphrase;
		std::vector<std::string> options;
		bool wasEncrypted=messageInfo->isEncrypted();

		if (wasEncrypted)
		{
			if (!PasswordList::passwordList.check("decrypt:",
							      passphrase))
			{

				myServer::promptInfo
					passPrompt(_("Passphrase (if"
						     " required): "));

				passPrompt=myServer::prompt(passPrompt
							    .password());

				if (passPrompt.abortflag || ptr.isDestroyed())
					return true;

				passphrase=passPrompt;
			}
		}

		std::string::iterator b=GPG::gpg.extraDecryptVerifyOptions.begin();

		while (b != GPG::gpg.extraDecryptVerifyOptions.end())
		{
			if (unicode_isspace((unsigned char)*b))
			{
				b++;
				continue;
			}

			std::string::iterator s=b;

			while (b != GPG::gpg.extraDecryptVerifyOptions.end())
			{
				if (unicode_isspace((unsigned char)*b))
					break;
				b++;
			}

			options.push_back(std::string(s, b));
		}

		bool decryptFailed;

		if (messageInfo->decrypt(passphrase, options, decryptFailed))
		{
			if (wasEncrypted && !decryptFailed)
				PasswordList::passwordList
					.save("decrypt:", passphrase);

			erase();
			setFirstLineShown(0);
			messageInfo->beginReformat(getWidth());
			folderUpdated();

			if (wasEncrypted && decryptFailed)
			{
				statusBar->clearstatus();
				statusBar->status(_("ERROR: Decryption failed,"
						    " passphrase forgotten."));
				statusBar->beepError();
			}
		}

		return true;
	}
	
	if (key == key_MSGSEARCH)
	{
		mail::ptr<CursesMessage> ptr=messageInfo;

		myServer::promptInfo searchPrompt(_("Search: "));

		searchPrompt=myServer::prompt(searchPrompt
					      .initialValue(searchString));

		if (searchPrompt.abortflag || ptr.isDestroyed())
			return true;

		searchString=searchPrompt;

		if (searchString.size() == 0)
			return true;

		mail::Search searchEngine;

		if (!searchEngine.setString(searchString,
					    unicode_default_chset()))
		{
			statusBar->clearstatus();
			statusBar->status(strerror(errno));
			statusBar->beepError();
			return true;
		}

		searchEngine.reset();

		statusBar->clearstatus();
		statusBar->status(_("Searching..."));
		statusBar->flush();

		size_t n=messageInfo->nLines();

		std::vector<std::pair<textAttributes, std::string> > line;

		while (firstLineToSearch < n)
		{
			messageInfo->getLineImage(firstLineToSearch, line);

			std::string s;

			std::vector<std::pair<textAttributes, std::string> >
				::iterator b, e;

			for (b=line.begin(), e=line.end(); b != e; ++b)
				s += Gettext::toutf8(b->second);

			unicode_char *uc;
			size_t ucsize;

			if (unicode_convert_tou_tobuf(s.c_str(),
							s.size(),
							"utf-8",
							&uc,
							&ucsize,
							NULL))
			{
				statusBar->clearstatus();
				statusBar->status(strerror(errno));
				statusBar->beepError();
				return true;
			}

			if (ucsize == 0)
			{
				free(uc);
				++firstLineToSearch;
				continue;
			}

			size_t i;

			for (i=0; i<ucsize; ++i)
			{
				searchEngine << uc[i];
			}
			free(uc);
			searchEngine << (unicode_char)' '; // EOL

			if (searchEngine)
			{
				size_t nLines=messageInfo->nLines();
				size_t h=getHeight();
				size_t lastLine= nLines > h ? nLines-h:0;

				size_t foundAt=firstLineToSearch;

				size_t n=foundAt > 0 ? foundAt-1:0;

				if (n > lastLine)
					n=lastLine;

				setFirstLineShown(n);
				firstLineToSearch=foundAt+1;

				statusBar->clearstatus();
				statusBar->status(Gettext(_("Text located,"
							    " displayed on"
							    " line #%1%"))
						  << (firstLineToSearch-n));
				draw();
				return true;
			}
			++firstLineToSearch;
		}
		statusBar->clearstatus();
		statusBar->status(_("Not found."));
		return true;
	}

	if (key.fkey())
	{
		std::string local_cmd;

		if (!CursesIndexDisplay::FilterMessageCallback
		    ::getFilterCmd(key.fkeynum(), local_cmd))
			return true;

		CursesIndexDisplay::FilterMessageCallback cb(local_cmd);

		std::vector<size_t> msgvec;

		msgvec.push_back(messageInfo->myfolder->getServerIndex
				 (messageInfo->myfolder->getCurrentMessage()));

		messageInfo->myfolder->getServer()
			->server->readMessageContent(msgvec, true,
						     mail::readBoth, cb);

		if (myServer::eventloop(cb))
		{
			cb.finish();

			if (myServer::nextScreen)
				return true;

			if (cb.errmsg.size())
			{
				statusBar->clearstatus();
				statusBar->status(cb.errmsg);
				statusBar->beepError();
			}
		}
		return true;
	}
	return false;
}
예제 #15
0
void draw2(const char* filename,const int ivt1)
{
    TFile *f=new TFile(filename,"READ");
    draw2(ivt1);
}
예제 #16
0
//-------------------------------------------------------------------------------------
void BillBoard::draw(ZFrustum* pFrustum){
	draw2(pFrustum->m_matView); //뷰 매트릭스 넘김
}
예제 #17
0
void CutInWindow::safeDraw(Graphics *const graphics)
{
    Window::safeDraw(graphics);
    draw2(graphics);
}