- int num_uints = swf_GetU30(tag);
- DEBUG printf("%d uints\n", num_uints);
- for(t=1;t<num_uints;t++) {
- U32 v = swf_GetS30(tag);
- DEBUG printf("uint %d) %d\n", t, v);
- dict_append(pool->uints, 0, (void*)(ptroff_t)v);
- }
-
- int num_floats = swf_GetU30(tag);
- DEBUG printf("%d floats\n", num_floats);
- for(t=1;t<num_floats;t++) {
- double d = swf_GetD64(tag);
- DEBUG printf("float %d) %f\n", t, d);
- dict_append(pool->floats, 0, 0);
- }
-
- int num_strings = swf_GetU30(tag);
- DEBUG printf("%d strings\n", num_strings);
- for(t=1;t<num_strings;t++) {
- int len = swf_GetU30(tag);
- char*s = malloc(len+1);
- swf_GetBlock(tag, s, len);
- s[len] = 0;
- dict_append(pool->strings, s, 0);
- DEBUG printf("%d) \"%s\"\n", t, pool->strings->d[t].name);
- }
- int num_namespaces = swf_GetU30(tag);
- DEBUG printf("%d namespaces\n", num_namespaces);
- for(t=1;t<num_namespaces;t++) {
- U8 type = swf_GetU8(tag);
- int namenr = swf_GetU30(tag);
- const char*name = dict_getstr(pool->strings, namenr);
- abc_namespace_t*ns = malloc(sizeof(abc_namespace_t));
- memset(ns, 0, sizeof(abc_namespace_t));
- ns->access = type;
- ns->name = strdup(name);
- dict_append(pool->namespaces, name, ns);
- int w = 0;
- DEBUG w=1;
- if(w) {
- if(type==0x08) printf("Namespace %s\n", name);
- else if(type==0x16) printf("PackageNamespace %s\n", name);
- else if(type==0x17) printf("PackageInternalNs %s\n", name);
- else if(type==0x18) printf("ProtectedNamespace %s\n", name);
- else if(type==0x19) printf("ExplicitNamespace %s\n", name);
- else if(type==0x1A) printf("StaticProtectedNs %s\n", name);
- else if(type==0x05) printf("PrivateNs %s\n", name);
- else {
- printf("Undefined namespace type\n");
- return 0;
- }
- }
- }
- int num_sets = swf_GetU30(tag);
- DEBUG printf("%d namespace sets\n", num_sets);
- for(t=1;t<num_sets;t++) {
- int count = swf_GetU30(tag);
- int s;
- const char**name = malloc(sizeof(const char*)*count);
- int l = 0;
- for(s=0;s<count;s++) {
- int nsnr = swf_GetU30(tag);
- name[s] = dict_getstr(pool->namespaces, nsnr);
- l += strlen(name[s])+1;
- }
- char*desc = malloc(l+16);
- strcpy(desc, "{");
- for(s=0;s<count;s++) {
- strcat(desc, name[s]);
- strcat(desc, ",");
- }
- strcat(desc, "}");
- dict_append(pool->namespace_sets, desc, 0);
- DEBUG printf("set %d) %s\n", t, desc);
- }
-
- int num_multinames = swf_GetU30(tag);
- DEBUG printf("%d multinames\n", num_multinames);
- for(t=1;t<num_multinames;t++) {
- abc_multiname_t*m = malloc(sizeof(abc_multiname_t));
- memset(m, 0, sizeof(abc_multiname_t));
-
- m->type = swf_GetU8(tag);
-
- if(m->type==0x07 || m->type==0x0d) {
- int nr1 = swf_GetU30(tag);
- m->ns = (abc_namespace_t*)dict_getdata(pool->namespaces, nr1);
- int name_index = swf_GetU30(tag);
- m->name = dict_getstr(pool->strings, name_index);
- } else if(m->type==0x0f || m->type==0x10) {
- int name_index = swf_GetU30(tag);
- m->name = dict_getstr(pool->strings, name_index);
- } else if(m->type==0x11 || m->type==0x12) {
- } else if(m->type==0x09 || m->type==0x0e) {
- int name_index = swf_GetU30(tag);
- int namespace_set_index = swf_GetU30(tag);
- m->name = dict_getstr(pool->strings, name_index);
- m->namespace_set_name = dict_getstr(pool->namespace_sets, namespace_set_index);
- } else if(m->type==0x1b || m->type==0x1c) {
- int namespace_set_index = swf_GetU30(tag);
- m->namespace_set_name = dict_getstr(pool->namespace_sets, namespace_set_index);
- } else {
- printf("can't parse type %d multinames yet\n", m->type);
- return 0;
- }
- char*mname = multiname_to_string(m);
- DEBUG printf("multiname %d) %s\n", t, mname);
- dict_append(pool->multinames, mname, m);
- free(mname);
- }
-