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; }
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; }