示例#1
0
文件: fbpad.c 项目: pmamonov/fbpad
static int nextterm(void)
{
	int n = (cterm() + 1) % NTERMS;
	while (n != cterm()) {
		if (TERMOPEN(n))
			break;
		n = (n + 1) % NTERMS;
	}
	return n;
}
示例#2
0
文件: fbpad.c 项目: pmamonov/fbpad
static void showterm(int n)
{
	if (cterm() == n || cmdmode)
		return;
	if (taglock && ctag != n % NTAGS)
		return;
	if (ctag != n % NTAGS)
		ltag = ctag;
	switchterm(cterm(), n, !hidden, !hidden, !hidden);
	ctag = n % NTAGS;
	tops[ctag] = n / NTAGS;
}
示例#3
0
文件: fbpad.c 项目: pmamonov/fbpad
static void signalreceived(int n)
{
	if (exitit)
		return;
	/* racy, new signals may arrive before re-registeration */
	signalregister();
	switch (n) {
	case SIGUSR1:
		hidden = 1;
		switchterm(cterm(), cterm(), 0, 1, 0);
		ioctl(0, VT_RELDISP, 1);
		break;
	case SIGUSR2:
		hidden = 0;
		fb_cmap();
		switchterm(cterm(), cterm(), 1, 0, 1);
		break;
	case SIGCHLD:
		while (waitpid(-1, NULL, WNOHANG) > 0)
			;
		break;
	}
}
示例#4
0
bool Chain::is_continuous() const
{
  // go through and find elements where there is a chain break
  const double dmin = 2.0;
  std::vector<bool> cterm( dbmonomers.size(), false );
  for ( int i = 0; i < int(dbmonomers.size()-1); i++ ) {
    int j = i + 1;
    const clipper::Coord_orth co1 = dbmonomers[i].coord_o3();
    const clipper::Coord_orth co2 = dbmonomers[j].coord_p();
    if ( co1.is_null() || co2.is_null() ) return false;
    const double d2 = ( co1 - co2 ).lengthsq();
    if ( d2 > dmin*dmin ) return false;
  }
  return true;
}
示例#5
0
文件: fbpad.c 项目: pmamonov/fbpad
static void mainloop(char **args)
{
	struct termios oldtermios, termios;
	tcgetattr(0, &termios);
	oldtermios = termios;
	cfmakeraw(&termios);
	tcsetattr(0, TCSAFLUSH, &termios);
	term_load(&terms[cterm()], 1);
	term_redraw(1);
	if (args) {
		cmdmode = 1;
		execterm(args);
	}
	while (!exitit)
		if (pollterms())
			break;
	tcsetattr(0, 0, &oldtermios);
}
示例#6
0
/************************************************************************
* polynomial multiplication: C(x) = A(x) + B(x)
* parameter:
*     apoly: A(x)
*     bpoly: B(x)
*     cpoly: C(x)
************************************************************************/
void CPolynomial::Addition(CPoly& apoly,CPoly& bpoly,CPoly& cpoly)
{
    int nACount=apoly.Size();
    int nBCount=bpoly.Size();	//poly.m_poly.size();

    if(nACount==0)
    {
        cpoly.Copy(bpoly);
        return;
    }
    if(nBCount==0)
    {
        cpoly.Copy(apoly);
        return;
    }

    //initialization
    int ai=0,bi=0;

    int adeg=apoly.GetDeg();
    int bdeg=bpoly.GetDeg();
    if(adeg<bdeg)
        cpoly.SetDeg(bdeg);
    else
        cpoly.SetDeg(adeg);

    //add the two polynomials
    while(ai<nACount && bi<nBCount)
    {
        CTerm aterm=apoly.At(ai);
        CTerm bterm=bpoly.At(bi);

        if(aterm.GetDeg()==bterm.GetDeg())
        {
            CTerm cterm(aterm.GetCoef()+bterm.GetCoef(),aterm.GetDeg());
            cpoly.Append(cterm);
            ai++;
            bi++;
        }
        else if(aterm.GetDeg()<bterm.GetDeg())
        {
            CTerm cterm(bterm);
            cpoly.Append(cterm);
            bi++;
        }
        else
        {
            CTerm cterm(aterm);
            cpoly.Append(cterm);
            ai++;
        }
    }

    //add remaining terms
    if(ai<nACount)
    {
        while(ai<nACount)
        {
            CTerm cterm(apoly.At(ai));
            cpoly.Append(cterm);
            ai++;
        }
    }
    else if(bi<nBCount)
    {
        while(bi<nBCount)
        {
            CTerm cterm(bpoly.At(bi));
            cpoly.Append(cterm);
            bi++;
        }
    }
}
示例#7
0
文件: fbpad.c 项目: pmamonov/fbpad
static struct term *mainterm(void)
{
	return TERMOPEN(cterm()) ? &terms[cterm()] : NULL;
}
示例#8
0
文件: fbpad.c 项目: pmamonov/fbpad
static void peepback(int termid)
{
	if (termid != cterm())
		switchterm(termid, cterm(), !hidden, 0, 0);
}
示例#9
0
文件: fbpad.c 项目: pmamonov/fbpad
static void peepterm(int termid)
{
	if (termid != cterm())
		switchterm(cterm(), termid, 0, 0, 0);
}
示例#10
0
文件: fbpad.c 项目: pmamonov/fbpad
static void directkey(void)
{
	char *shell[32] = SHELL;
	char *mail[32] = MAIL;
	char *editor[32] = EDITOR;
	int c = readchar();
	if (PASS && locked) {
		if (c == '\r') {
			pass[passlen] = '\0';
			if (!strcmp(PASS, pass))
				locked = 0;
			passlen = 0;
			return;
		}
		if (isprint(c) && passlen + 1 < sizeof(pass))
			pass[passlen++] = c;
		return;
	}
	if (c == ESC) {
		switch ((c = readchar())) {
		case 'c':
			execterm(shell);
			return;
		case 'm':
			execterm(mail);
			return;
		case 'e':
			execterm(editor);
			return;
		case 'j':
		case 'k':
			showterm(altterm(cterm()));
			return;
		case 'o':
			showtag(ltag);
			return;
		case 'p':
			listtags();
			return;
		case '\t':
			if (nextterm() != cterm())
				showterm(nextterm());
			return;
		case CTRLKEY('q'):
			exitit = 1;
			return;
		case 's':
			term_screenshot();
			return;
		case 'y':
			term_redraw(1);
			return;
		case CTRLKEY('l'):
			locked = 1;
			passlen = 0;
			return;
		case CTRLKEY('o'):
			taglock = 1 - taglock;
			return;
		case ',':
			term_scrl(pad_rows() / 2);
			return;
		case '.':
			term_scrl(-pad_rows() / 2);
			return;
		default:
			if (strchr(tags, c)) {
				showtag(strchr(tags, c) - tags);
				return;
			}
			if (mainterm())
				term_send(ESC);
		}
	}
	if (c != -1 && mainterm())
		term_send(c);
}