示例#1
0
文件: picol.c 项目: ivanovev/stm32f4
picolVar *picolGetVar2(picolInterp *i, char *name, int glob) {
    picolVar *v = i->callframe->vars;
    int  global = COLONED(name);
    //char buf[MAXSTR], buf2[MAXSTR], *cp, *cp2;
    if(global || glob) {
        picolCallFrame *c = i->callframe;
        while(c->parent) c = c->parent;
        v = c->vars;
        if(global) name += 2;  /* skip the "::" */
    }
#if 0
    if((cp = mymemchr((uint8_t*)name,'(',mystrnlen(name,MAXSTR)))) { /* array element syntax? */
        picolArray* ap;
        int found = 0;
        strncpy(buf,name,cp-name);
        buf[cp-name] = '\0';
        for( ;v; v = v->next) if (EQ(v->name,buf)) {found = 1; break;}
        if(!found) return NULL;
        if(!((ap = picolIsPtr(v->val)))) return NULL;
        strcpy(buf2,cp+1); /* copy the key from after the opening paren*/
        if(!((cp = strchr(buf2,')')))) return NULL;
        *cp = '\0';       /* overwrite closing paren */
        v = picolArrGet1(ap,buf2);
        if(!v) {
            if(!((cp2 = getenv(buf2)))) return NULL;
            strcpy(buf,"::env("); strcat(buf,buf2); strcat(buf,")");
            return picolArrSet1(i, buf, cp2);
        }
        return v;
    }
#endif
    for( ;v; v = v->next) {if (EQ(v->name,name)) return v;}
    return NULL;
}
示例#2
0
int32_t pcl_get_chunksz(uint8_t *ptr, int32_t fsz)
{
    if(fsz <= 0)
        return 0;
    uint8_t *ptr1 = mymemchr(ptr, 0x0A, fsz);
    //print2("ptr1[0]", ptr1[0]);
    //print2("ptr1[1]", ptr1[1]);
    if(!ptr1)
        return 0;
    uint32_t len1 = ptr1 - ptr;
    if(ptr1[1] == 0x0A)
        return len1;
    len1 += 1;
    ptr += len1;
    fsz -= len1;
    if(fsz <= 0)
        return len1;
    len1 += pcl_get_chunksz(ptr, fsz);
    return len1;
}