static void assembleurl(DAPURL* durl, OCbytes* buf, int what) { encodeurltext(durl->url,buf); if(what & WITHPROJ) { ocbytescat(buf,"?"); encodeurltext(durl->projection,buf); } if(what & WITHSEL) encodeurltext(durl->selection,buf); }
static void tabto(int pos, OCbytes* buffer) { int bol,len,pad; len = ocbyteslength(buffer); /* find preceding newline */ for(bol=len-1;;bol--) { int c = ocbytesget(buffer,bol); if(c < 0) break; if(c == '\n') {bol++; break;} } len = (len - bol); pad = (pos - len); while(pad-- > 0) ocbytescat(buffer," "); }
static void encodeurltext(char* text, OCbytes* buf) { /* Encode the URL to handle illegal characters */ len = strlen(url); encoded = ocmalloc(len*4+1); /* should never be larger than this*/ if(encoded==NULL) return; p = url; q = encoded; while((c=*p++)) { if(strchr(mustencode,c) != NULL) { char tmp[8]; int hex1, hex2; hex1 = (c & 0x0F); hex2 = (c & 0xF0) >> 4; tmp[0] = '0'; tmp[1] = 'x'; tmp[2] = hexchars[hex2]; tmp[3] = hexchars[hex1]; tmp[4] = '\0'; ocbytescat(buf,tmp); } else *q++ = (char)c;
static void ocdumpmemdata1(OCmemdata* md, OCbytes* buf, int depth) { OCmemdata** mdp; unsigned int i; char tmp[1024]; switch ((OCtype)md->octype) { case OC_Sequence: case OC_Grid: case OC_Structure: case OC_Dataset: sprintf(tmp,"%s%s/%s (%lu) {\n",dent(depth), octypetostring((OCtype)md->octype), ocmodestr(md->mode), (unsigned long)md->count); ocbytescat(buf,tmp); mdp = (OCmemdata**)md->data.data; switch ((OCmode)md->mode) { case Fieldmode: for(i=0;i<md->count;i++) { sprintf(tmp,"%s[%u]",dent(depth+1),i); ocbytescat(buf,tmp); ocdumpmemdata1(mdp[i],buf,depth+1); } break; case Dimmode: for(i=0;i<md->count;i++) { sprintf(tmp,"%s(%u)",dent(depth+1),i); ocbytescat(buf,tmp); ocdumpmemdata1(mdp[i],buf,depth+1); } break; case Recordmode: for(i=0;i<md->count;i++) { sprintf(tmp,"%s{%u}",dent(depth+1),i); ocbytescat(buf,tmp); ocdumpmemdata1(mdp[i],buf,depth+1); } break; default: break; } sprintf(tmp,"%s}\n",dent(depth)); break; case OC_Primitive: { OCtype etype = (OCtype)md->etype; char* data = md->data.data; sprintf(tmp,"%s%s/%s (%lu) {",dent(depth), octypetostring(etype),ocmodestr(md->mode),(unsigned long)md->count); ocbytescat(buf,tmp); for(i=0;i<md->count;i++) { char* p = data + (octypesize(etype)*i); ocbytescat(buf," "); octypeprint(etype,tmp,sizeof(tmp),(void*)p); ocbytescat(buf,tmp); } ocbytescat(buf," }\n"); } break; default: break; } }