Esempio n. 1
0
static void
fill (int mode)
{
    int mark;

    while (c != EOF && !isspace (c) && c != '~')
    {
        if (mode == MATH && (c == '-' || c == '_' || c == '^')) return;
        if (c == ')' || c == '}' || c == ']') return;
        else if (c == '(') mark = ')';
        else if (c == '{') mark = '}';
        else if (c == '[') mark = ']';
        else if (c == BSPAR) mark = ENDBSPAR;
        else if (c == BSSQB) mark = ENDBSSQB;
        else if (c == '$') mark = '$';
        else mark = NULLTOKEN;
        release (c);
        c = next ();
        if (mark == ENDBSPAR || mark == ENDBSSQB
        || mark == '$') skip (mark);
        else if (mark != NULLTOKEN)
        {
            if (mode == TEXT || mark == '}') content (mark);
            else math (mark);
            checkpar (mark);
            release (c);
            c = next ();
        }
    }
    while (isspace (c) || c == '~')
    {
        release (c);
        c = next ();
    }
}
Esempio n. 2
0
static void
math (int endmark)
{
    int prev;

    while (c != EOF && c != endmark)
    {
        if (c == DOT)
        {
            release ('\\');
            c = next ();
            command (MATH);
        }
        else if (c == '^' || c == '_') script ();
        else if (isalpha (c))
        {
            prev = c;
            c = next ();
            if (isalpha (c))
            {
                release ('\\');
                release (prev);
                command (MATH);
            }
            else release (prev);
        }
        else if (c == '-')
        {
            release (c);
            c = next ();
        }
        else fill (MATH);
        checkpar (endmark);
    }
}
Esempio n. 3
0
static void
content (int endmark)
{
    while (c != EOF && c != endmark)
    {
        if (c == DOT)
        {
            release ('\\');
            c = next ();
            command (TEXT);
        }
        else if (c == DASHPAR || c == EQPAR
        || c == '-' || c == '=')
        {
            formula ();
            if (c == '-') /* TEMPORARY BUG FIX */
            {
                release ('-');
                c = next ();
            }
        }
        else if (c == '*') emphas ();
        else fill (TEXT);
        checkpar (endmark);
    }
}
Esempio n. 4
0
static void
command (int mode)
{
    int mark;

    do release (c);
    while (isalpha (c = next ()));
    if (mode == TEXT) while (isspace (c) || c == '~')
    {
        release (c);
        c = next ();
    }
    while (c == '(' || c == '[')
    {
        if (c == '(')
        {
            c = '{';
            mark = ')';
        }
        else mark = ']';
        release (c);
        c = next ();
        if (mode == TEXT) content (mark);
        else math (mark);
        checkpar (mark);
        if (mark == ')') mark = '}';
        release (mark);
        c = next ();
    }
}
Esempio n. 5
0
File: code.c Progetto: k0gaMSX/mcm
char inscodeI (symbol sym, symbol ant, char chip)
{
  LOG("inscodeI %p", sym);
  LOG(" %p", gsymsig(sym));
  LOG(" %s", gsymlex(sym));
  LOG(" %d\n", gsymval(sym));

  if (gsymtype(sym) == NUMBER && gsymtype(gsymsig(sym)) == EQ) {
      ssymval(gsymsig(gsymsig(sym)), gsymval(sym)); /* This is a assign */
      return 1;
  }

  if (gsymtype(sym) == IDEN)  /* This is the case the ID of the command name */
    return 1;

  if (!gsymsig(sym)) {
    checkpar(sym, ant, chip);
    inscode(gsymval(sym));
    return 0;
  }

  if(!inscodeI(gsymsig(sym), sym, chip)) {
    inscode(gsymval(sym));
    return 0;
  }

  return 1;
}
Esempio n. 6
0
static void
script (void)
{
    release (c);
    c = next ();
    if (c == '(')
    {
        release ('{');
        c = next ();
        math (')');
        checkpar (')');
        release ('}');
        c = next ();
    }
}
Esempio n. 7
0
void handle(int newsock){
	size_t buflen = 4095;
	char buffer[buflen + 1];
	bta_pars par;
	do{
		ssize_t readed = recv(newsock, buffer, buflen, 0);
		if(readed < 1) break; // client closed or error
		parce_incoming_buf(buffer, readed, &par);
		#ifdef EBUG
			#define checkpar(val) if(par.val){ fprintf(stderr, "par: %s\n", val); }
			if(par.ALL){ fprintf(stderr, "par: ALL\n"); }
			checkpar(vel);
			checkpar(diff);
			checkpar(corr);
			checkpar(mtime);
			checkpar(sidtime);
			checkpar(meteo);
			checkpar(target);
			checkpar(p2mode);
			checkpar(eqcoor);
			checkpar(telmode);
			checkpar(horcoor);
			checkpar(valsens);
			checkpar(telfocus);
			#undef checkpar
		#endif // EBUG
		make_JSON(newsock, &par);
	}while(!par.ALL);
	close(newsock);
}
Esempio n. 8
0
/**
 * Parce data received from client
 * In case of http request we send all avaiable data
 * In case of request from client socket, parce it
 * Socket's request have structure like "par1<del>par2<del>..."
 * 		where "pars" are names of bta_pars fields
 * 		<del> is delimeter: one of symbols " &\t\n"
 * @param buf - incoming data
 * @param L - length of buf
 * @param par - returned parameters structure
 */
void parce_incoming_buf(char *buf, size_t L, bta_pars *par){
	char *tok, *got;
	memset(par, 0, sizeof(bta_pars));
	DBG("got data: %s", buf);
	// http request - send all if get == "bta_par"
	// if get == "bta_par?a&b&c...", change buf to pars
	if((got = stringscan(buf, "GET"))){
		size_t LR = strlen(RESOURCE);
		if(strcmp(got, RESOURCE) == 0){
			par->ALL = true;
			return;
		}else if(strncmp(got, RESOURCE, LR) == 0) buf = &got[LR+1];
		else exit(-1); // wrong request
	}
	// request from socket -> check all parameters
	tok = strtok(buf, " &\t\n");
	if(!tok) return;
	do{
		#define checkpar(val) if(strcasecmp(tok, val) == 0){par->val = true; continue;}
		checkpar(vel);
		checkpar(diff);
		checkpar(corr);
		checkpar(mtime);
		checkpar(meteo);
		checkpar(target);
		checkpar(p2mode);
		checkpar(eqcoor);
		checkpar(telmode);
		checkpar(sidtime);
		checkpar(horcoor);
		checkpar(valsens);
		checkpar(telfocus);
		#undef checkpar
	}while((tok = strtok(NULL, " &\t\n")));
}