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; }
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; }
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; }
/** 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; }
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); }
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; }