Example #1
0
static void parse_cond( cheevos_cond_t* cond, const char** memaddr )
{
  const char* str = *memaddr;

  if ( *str == 'R' && str[ 1 ] == ':' )
  {
    cond->type = CHEEVOS_COND_TYPE_RESET_IF;
    str += 2;
  }
  else if ( *str == 'P' && str[ 1 ] == ':' )
  {
    cond->type = CHEEVOS_COND_TYPE_PAUSE_IF;
    str += 2;
  }
  else
  {
    cond->type = CHEEVOS_COND_TYPE_STANDARD;
  }

  parse_var( &cond->source, &str );
  cond->op = parse_operator( &str );
  parse_var( &cond->target, &str );
  cond->curr_hits = 0;
  cond->req_hits = read_hits( &str );

  *memaddr = str;
}
Example #2
0
static void parse_file(const char *fn)
{
	char *ln = NULL;
	FILE *fp;

	if (strcmp(fn, "-") == 0)
		fp = fdopen(STDIN_FILENO, "r");
	else
		fp = fopen(fn, "r");

	if (fp == NULL) {
		fprintf(stderr, "** Could not open %s: %s\n", fn, strerror(errno));
		return;
	}

	while (HX_getl(&ln, fp) != NULL) {
		HX_chomp(ln);
		HX_strlower(ln);
		if (*ln == '#' || *ln == '\0') {
			continue;
		} else if (*ln == '$') {
			parse_var(fp, ln);
			continue;
		}
		parse_str(ln);
	}

	HXmc_free(ln);
}
int getop(char str[]) {
    int i, c, cmd;
    if (line_i == 0) {
        mgetline(line);
    }

    /* skip ' ' and '\t' */
    while((c=line[line_i++]) != '\0') {
        if (c != ' ' && c != '\t') {
            break;
        }
    }

    /* not a number */
    if(isdigit(c) == 0 && c != '.') {
        if (c == '-') {
            if (isdigit(line[line_i]) == 0) {
                return '-';
            } 
        } else {
            if (parse_var(c) == VAR) {
                str[0] = c;
                str[1] = '\0';
                return VAR;
            }

            if ((cmd = parse_cmd(c)) != NONECMD) {
                return cmd;
            } else {
                if (c == '\n') {
                    line_i = 0;
                }
                return c;
            }
        }
    }

    /* put number into str */
    line[--line_i] = c;
    i = 0;
    while((c=line[line_i++]) != EOF) {
        if (isdigit(c) || c == '.' || c == '-') {
            str[i++] = c;
        } else {
            break;
        }
    }
    str[i] = '\0';
    line[--line_i] = c;

    return NUMBER;
}
Example #4
0
void* handle_gps(int *arg)
{
	char one_line[512] = {0};
//	int ret = 0;
//	unsigned int count = 0;
	char *p = one_line;
	char ch = 0;
	int valid_flag = 0;
	
	NOTE("GPS Thread start...\n");
	int fd = open_gps_com("/dev/ttyS0");
	while(!exit_flag) {
		ch = get_char(fd);
		if(ch <=0)
			goto RECONN;
		if(ch == '$') {
			memset(one_line,0,512);
			p = one_line;
			*p = ch;
			valid_flag = 1;
		} else if(ch == '\r' || ch == '\n') {
			if(valid_flag) {
				//valid data is between '$' to '\r' or '\n'
				//tail add ','
				*p = ',';
				p++;
				*p = '\0';
// 				DEBUG("[%d][%s]\n",++count,one_line);
				parse_var(one_line,"/tmp/gps_info"); 
				//the all gps info,can not sleep here
			}
			valid_flag = 0;
		}
		if(valid_flag) {
			*p = ch;
			p++;
		}
		continue;
	RECONN:
		ERROR("Read GPS Com Error!%d:%s\n",errno,strerror(errno));
		if(fd >= 0) port_close(fd);
		sleep_seconds_intr(10);
		fd = open_gps_com("/dev/ttyS0");
	}
	NOTE("GPS Thread exit!\n");
	if(fd >= 0) port_close(fd);
	system("/bin/echo GPS_thread_EXIT > /tmp/gps_status");
	return NULL;
}
Example #5
0
/** Parse class, struct or interface member.
 *
 * @param parse		Parser object.
 * @param outer_csi	CSI containing this declaration.
 * @return		New syntax tree node. In case of parse error,
 *			@c NULL may (but need not) be returned.
 */
static stree_csimbr_t *parse_csimbr(parse_t *parse, stree_csi_t *outer_csi)
{
	stree_csimbr_t *csimbr;

	stree_csi_t *csi;
	stree_ctor_t *ctor;
	stree_deleg_t *deleg;
	stree_enum_t *enum_d;
	stree_fun_t *fun;
	stree_var_t *var;
	stree_prop_t *prop;

	csimbr = NULL;

	switch (lcur_lc(parse)) {
	case lc_class:
	case lc_struct:
	case lc_interface:
		csi = parse_csi(parse, lcur_lc(parse), outer_csi);
		if (csi != NULL) {
			csimbr = stree_csimbr_new(csimbr_csi);
			csimbr->u.csi = csi;
		}
		break;
	case lc_new:
		ctor = parse_ctor(parse, outer_csi);
		if (ctor != NULL) {
			csimbr = stree_csimbr_new(csimbr_ctor);
			csimbr->u.ctor = ctor;
		}
		break;
	case lc_deleg:
		deleg = parse_deleg(parse, outer_csi);
		if (deleg != NULL) {
			csimbr = stree_csimbr_new(csimbr_deleg);
			csimbr->u.deleg = deleg;
		}
		break;
	case lc_enum:
		enum_d = parse_enum(parse, outer_csi);
		if (enum_d != NULL) {
			csimbr = stree_csimbr_new(csimbr_enum);
			csimbr->u.enum_d = enum_d;
		}
		break;
	case lc_fun:
		fun = parse_fun(parse, outer_csi);
		csimbr = stree_csimbr_new(csimbr_fun);
		csimbr->u.fun = fun;
		break;
	case lc_var:
		var = parse_var(parse, outer_csi);
		if (var != NULL) {
			csimbr = stree_csimbr_new(csimbr_var);
			csimbr->u.var = var;
		}
		break;
	case lc_prop:
		prop = parse_prop(parse, outer_csi);
		csimbr = stree_csimbr_new(csimbr_prop);
		csimbr->u.prop = prop;
		break;
	default:
		lunexpected_error(parse);
		lex_next(parse->lex);
		break;
	}

	return csimbr;
}
Example #6
0
void
do_build_tree(char *s, struct lacy_env *env)
{
    int escaped = 0;
    struct page *p = env_get_page(env);
    struct ut_str buffer;
    str_init(&buffer);

    while (*s != '\0') {
        if (*s == '\\') {
            escaped = 1;
            s++;
        }
        if (slook_ahead(s, "{{", 2)) {
            if (escaped) {
                str_append(&buffer, *s);
                escaped = 0;
            } 
            else {
                s += 2;
                tree_push(BLOCK, buffer.s);
                str_clear(&buffer);
                s = parse_var(s, p, env);
                continue;
            }
        }
        else if (slook_ahead(s, "{%", 2)) {
            if (escaped) {
                str_append(&buffer, *s);
                escaped = 0;
            } 
            else {
                s += 2;
                tree_push(BLOCK, buffer.s);
                str_clear(&buffer);
                s = parse_expression(s, env);
                continue;
            }
        }
        else if (slook_ahead(s, "{$", 2)) {
            if (escaped) {
                str_append(&buffer, *s);
                escaped = 0;
            } 
            else {
                s += 2;
                tree_push(BLOCK, buffer.s);
                str_clear(&buffer);
                s = parse_sh_exp(s, env);
                continue;
            }
        }
        else {
            if (escaped) {
                str_append(&buffer, '\\');
                str_append(&buffer, *s);
                escaped = 0;
            } else {
                str_append(&buffer, *s);
            }
        }
        ++s;
    }
    tree_push(BLOCK, buffer.s);
    str_free(&buffer);
}
Example #7
0
void* handle_agps(int *arg)
{
	char ttydev[32] = {0};
	char atcfgfile[64] = {0};
	char one_line[512] = {0};
	char *p = one_line;
	char ch = 0;
	int valid_flag = 0;
    int count = 0;
	int fd = -1;
	
	NOTE("AGPS Thread start...\n");
WAIT_TYPE:
	read_file("/tmp/modem_type",one_line,64);
	if(strstr(one_line,"EC20")) {
		strcpy(ttydev,"/dev/ttyUSB1");
		strcpy(atcfgfile,"/etc/gcom/longsangagps.gcom");
	} else if(strstr(one_line,"LONGSUNG")) {
		strcpy(ttydev,"/dev/ttyUSB3");
		strcpy(atcfgfile,"/etc/gcom/ec20agps.gcom");
	} else {
		NOTE("AGPS Thread wait modem_type [%s]\n",one_line);
		sleep_seconds_intr(3);
		memset(one_line,0,sizeof(one_line));
		goto WAIT_TYPE;
	}
	
	if(access(ttydev,F_OK) == 0) {
		NOTE("send AGPS Start AT CMD\n");
		sprintf(one_line,"/usr/bin/gcom -d %s -s %s > /tmp/agps_status",ttydev,atcfgfile);
		//system(one_line); // exec at 3g.sh
	}
	
	NOTE("AGPS dev is %s\n",ttydev);
	NOTE("AGPS AT cmd is %s\n",atcfgfile);
	while(!exit_flag) {
		if(access(ttydev,F_OK) != 0) {
			ERROR("APGS:DEV %s is not exist!\n",ttydev);
			if(fd > 0) port_close(fd);
			fd = -1;
			sleep_seconds_intr(120);
			continue;
		}
		
		if(fd < 0) {
			NOTE("APGS: Reopen GPS dev %s\n",ttydev);
			fd = open_gps_com(ttydev);
			if(fd < 0)
				goto RECONN;
		}
		ch = get_agps_char(fd);
		if(ch < 0)
			goto RECONN;
		if(ch == '$') {
			memset(one_line,0,512);
			p = one_line;
			*p = ch;
			valid_flag = 1;
			count = 0;
		} else if(ch == '\r' || ch == '\n' || count >510) {
			if(valid_flag) {
				//valid data is between '$' to '\r' or '\n'
				//add ',' tail
				*p = ',';
				p++;
				*p = '\0';
 				//printf("[%d][%s]\n",++count,one_line);
				parse_var(one_line,"/tmp/agps_info"); 
				//the all gps info,can not sleep here
			}
			valid_flag = 0;
			count = 0;
		}
		if(valid_flag) {
			*p = ch;
			p++;
			count++;
		}
		continue;
	RECONN:
		ERROR("Read AGPS Com Error!%d:%s\n",errno,strerror(errno));
		if(fd > 0) port_close(fd);
		fd = -1;
		sleep_seconds_intr(60);
	}
	NOTE("AGPS Thread exit! need to close AT ?\n");
	if(fd >0) port_close(fd);
	system("/bin/echo AGPS_thread_EXIT > /tmp/agps_status");
	return NULL;
}