void ToolbarEditor::populateList(QListWidget * w, QList<QAction *> actions_list, bool add_separators) { w->clear(); QAction * action; for (int n = 0; n < actions_list.count(); n++) { action = static_cast<QAction*> (actions_list[n]); if (action) { if (!action->objectName().isEmpty()) { QListWidgetItem * i = new QListWidgetItem; QString text = fixname(action->text(), action->objectName()); i->setText(text + " ("+ action->objectName() +")"); QIcon icon = action->icon(); if (icon.isNull()) { icon = Images::icon("empty_icon"); } i->setIcon(icon); i->setData(Qt::UserRole, action->objectName()); w->addItem(i); } else if ((action->isSeparator()) && (add_separators)) { QListWidgetItem * i = new QListWidgetItem; //i->setText(tr("(separator)")); i->setText("---------"); i->setData(Qt::UserRole, "separator"); i->setIcon(Images::icon("empty_icon")); w->addItem(i); } } } }
void dumpsyms(Biobuf *b) { Sym *s; Type *t; for(s=symbols; s; s=s->next){ t = s->type; t = defer(t); if(t->ty == Pointer){ t = t->sub; if(t && t->equiv) t = t->equiv; } if(t == nil || t->ty != Aggr) continue; Bprint(b, "complex %B %B%s%B;\n", nameof(t, 1), s->fn ? fixname(s->fn) : "", s->fn ? ":" : "", fixname(s->name)); } symbols = nil; lsym = &symbols; }
/* * open input file * Input : char* p * Output : int error code * * Try to open the file whose filename is p, return YES if opened, else NO * Updates fname with the actual opened name * input is the handle of the opened file * */ int openin (char *p) { strcpy(fname, p); strcpy(fname_copy, fname); fixname (fname); if (!checkname (fname)) return (NO); if ((input = fopen (fname, "r")) == NULL) { pl ("Open failure\n"); return (NO); } kill_line (); return (YES); }
/** * json_events - Read JSON event file from disk and call event callback. * @fn: File name to read or NULL for default. * @func: Callback to call for each event * @data: Abstract pointer to pass to func. * * The callback gets the data pointer, the event name, the event * in perf format and a description passed. * * Call func with each event in the json file * Return: -1 on failure, otherwise 0. */ int json_events(const char *fn, int (*func)(void *data, char *name, char *event, char *desc, char *pmu), void *data) { int err = -EIO; size_t size; jsmntok_t *tokens, *tok; int i, j, len; char *map; char buf[128]; const char *orig_fn = fn; if (!fn) fn = json_default_name("-core"); tokens = parse_json(fn, &map, &size, &len); if (!tokens) return -EIO; EXPECT(tokens->type == JSMN_ARRAY, tokens, "expected top level array"); tok = tokens + 1; for (i = 0; i < tokens->size; i++) { char *event = NULL, *desc = NULL, *name = NULL; char *pmu = NULL; char *filter = NULL; unsigned long long eventcode = 0; struct msrmap *msr = NULL; jsmntok_t *msrval = NULL; jsmntok_t *precise = NULL; jsmntok_t *obj = tok++; EXPECT(obj->type == JSMN_OBJECT, obj, "expected object"); for (j = 0; j < obj->size; j += 2) { jsmntok_t *field, *val; int nz; field = tok + j; EXPECT(field->type == JSMN_STRING, tok + j, "Expected field name"); val = tok + j + 1; EXPECT(val->type == JSMN_STRING, tok + j + 1, "Expected string value"); nz = !json_streq(map, val, "0"); if (match_field(map, field, nz, &event, val)) { /* ok */ } else if (json_streq(map, field, "EventCode")) { char *code = NULL; addfield(map, &code, "", "", val); eventcode |= strtoul(code, NULL, 0); free(code); } else if (json_streq(map, field, "ExtSel")) { char *code = NULL; addfield(map, &code, "", "", val); eventcode |= strtoul(code, NULL, 0) << 21; free(code); } else if (json_streq(map, field, "EventName")) { addfield(map, &name, "", "", val); } else if (json_streq(map, field, "BriefDescription")) { addfield(map, &desc, "", "", val); fixdesc(desc); } else if (json_streq(map, field, "PEBS") && nz && desc && !strstr(desc, "(Precise Event)")) { precise = val; } else if (json_streq(map, field, "MSRIndex") && nz) { msr = lookup_msr(map, val); } else if (json_streq(map, field, "MSRValue")) { msrval = val; } else if (json_streq(map, field, "Errata") && !json_streq(map, val, "null")) { addfield(map, &desc, ". ", " Spec update: ", val); } else if (json_streq(map, field, "Data_LA") && nz) { addfield(map, &desc, ". ", " Supports address when precise", NULL); } else if (json_streq(map, field, "Unit")) { const char *ppmu; char *s; ppmu = field_to_perf(unit_to_pmu, map, val); if (ppmu) { pmu = strdup(ppmu); } else { addfield(map, &pmu, "", "", val); for (s = pmu; *s; s++) *s = tolower(*s); } addfield(map, &desc, ". ", "Unit: ", NULL); addfield(map, &desc, "", pmu, NULL); } else if (json_streq(map, field, "Filter")) { addfield(map, &filter, "", "", val); } /* ignore unknown fields */ } if (precise) { if (json_streq(map, precise, "2")) addfield(map, &desc, " ", "(Must be precise)", NULL); else addfield(map, &desc, " ", "(Precise event)", NULL); } snprintf(buf, sizeof buf, "event=%#llx", eventcode); addfield(map, &event, ",", buf, NULL); if (filter) addfield(map, &event, ",", filter, NULL); if (msr != NULL) addfield(map, &event, ",", msr->pname, msrval); if (!pmu) pmu = strdup("cpu"); err = -EIO; if (name && event) { fixname(name); err = func(data, name, event, desc, pmu); } free(event); free(desc); free(name); free(pmu); free(filter); if (err) break; tok += j; } EXPECT(tok - tokens == len, tok, "unexpected objects at end"); err = 0; out_free: free_json(map, size, tokens); if (!orig_fn && !err) { fn = json_default_name("-uncore"); err = json_events(fn, func, data); /* Ignore open error */ if (err == -EIO) return 0; } if (!orig_fn) free((char *)fn); return err; }
/** * json_events - Read JSON event file from disk and call event callback. * @fn: File name to read or NULL for default. * @func: Callback to call for each event * @data: Abstract pointer to pass to func. * * The callback gets the data pointer, the event name, the event * in perf format and a description passed. * * Call func with each event in the json file * Return: -1 on failure, otherwise 0. */ int json_events(const char *fn, int (*func)(void *data, char *name, char *event, char *desc), void *data) { int err = -EIO; size_t size; jsmntok_t *tokens, *tok; int i, j, len; char *map; if (!fn) fn = json_default_name(); tokens = parse_json(fn, &map, &size, &len); if (!tokens) return -EIO; EXPECT(tokens->type == JSMN_ARRAY, tokens, "expected top level array"); tok = tokens + 1; for (i = 0; i < tokens->size; i++) { char *event = NULL, *desc = NULL, *name = NULL; struct msrmap *msr = NULL; jsmntok_t *msrval = NULL; jsmntok_t *precise = NULL; jsmntok_t *obj = tok++; EXPECT(obj->type == JSMN_OBJECT, obj, "expected object"); for (j = 0; j < obj->size; j += 2) { jsmntok_t *field, *val; int nz; field = tok + j; EXPECT(field->type == JSMN_STRING, tok + j, "Expected field name"); val = tok + j + 1; EXPECT(val->type == JSMN_STRING, tok + j + 1, "Expected string value"); nz = !json_streq(map, val, "0"); if (match_field(map, field, nz, &event, val)) { /* ok */ } else if (json_streq(map, field, "EventName")) { addfield(map, &name, "", "", val); } else if (json_streq(map, field, "BriefDescription")) { addfield(map, &desc, "", "", val); fixdesc(desc); } else if (json_streq(map, field, "PEBS") && nz && desc && !strstr(desc, "(Precise Event)")) { precise = val; } else if (json_streq(map, field, "MSRIndex") && nz) { msr = lookup_msr(map, val); } else if (json_streq(map, field, "MSRValue")) { msrval = val; } else if (json_streq(map, field, "Errata") && !json_streq(map, val, "null")) { addfield(map, &desc, ". ", " Spec update: ", val); } else if (json_streq(map, field, "Data_LA") && nz) { addfield(map, &desc, ". ", " Supports address when precise", NULL); } /* ignore unknown fields */ } if (precise) { if (json_streq(map, precise, "2")) addfield(map, &desc, " ", "(Must be precise)", NULL); else addfield(map, &desc, " ", "(Precise event)", NULL); } if (msr != NULL) addfield(map, &event, ",", msr->pname, msrval); err = -EIO; if (name && event) { fixname(name); err = func(data, name, event, desc); } free(event); free(desc); free(name); if (err) break; tok += j; } EXPECT(tok - tokens == len, tok, "unexpected objects at end"); err = 0; out_free: free_json(map, size, tokens); return err; }
void main(int argc, char *argv[]) { int i; String *t; char *termargs[10], **ap; ap = termargs; *ap++ = "samterm"; ARGBEGIN{ case 'd': dflag++; break; case 'r': machine = EARGF(usage()); break; case 'R': Rflag++; break; case 't': samterm = EARGF(usage()); break; case 's': rsamname = EARGF(usage()); break; default: dprint("sam: unknown flag %c\n", ARGC()); usage(); /* options for samterm */ case 'a': *ap++ = "-a"; break; } ARGEND *ap = nil; Strinit(&cmdstr); Strinit0(&lastpat); Strinit0(&lastregexp); Strinit0(&genstr); Strinit0(&rhs); Strinit0(&curwd); Strinit0(&plan9cmd); home = getenv(HOME); disk = diskinit(); if(home == 0) home = "/"; if(!dflag) startup(machine, Rflag, termargs, argv); notify(notifyf); getcurwd(); if(argc>0) { for(i=0; i<argc; i++) { if(!setjmp(mainloop)) { t = tmpcstr(argv[i]); Straddc(t, '\0'); Strduplstr(&genstr, t); freetmpstr(t); fixname(&genstr); logsetname(newfile(), &genstr); } } } else if(!downloaded) newfile(); seq++; if(file.nused) current(file.filepptr[0]); setjmp(mainloop); cmdloop(); trytoquit(); /* if we already q'ed, quitok will be TRUE */ exits(0); }
void fileundo(File *f, int isundo, int canredo, uint *q0p, uint *q1p, int flag) { Undo u; Rune *buf; uint i, n, up; uint stop; Buffer *delta, *epsilon; if(isundo){ /* undo; reverse delta onto epsilon, seq decreases */ delta = &f->delta; epsilon = &f->epsilon; stop = f->seq; }else{ /* redo; reverse epsilon onto delta, seq increases */ delta = &f->epsilon; epsilon = &f->delta; stop = 0; /* don't know yet */ } raspstart(f); while(delta->nc > 0){ /* rasp and buffer are in sync; sync with wire if needed */ if(needoutflush()) raspflush(f); up = delta->nc-Undosize; bufread(delta, up, (Rune*)&u, Undosize); if(isundo){ if(u.seq < stop){ f->seq = u.seq; raspdone(f, flag); return; } }else{ if(stop == 0) stop = u.seq; if(u.seq > stop){ raspdone(f, flag); return; } } switch(u.type){ default: panic("undo unknown u.type"); break; case Delete: f->seq = u.seq; if(canredo) fileundelete(f, epsilon, u.p0, u.p0+u.n); f->mod = u.mod; bufdelete(&f->Buffer, u.p0, u.p0+u.n); raspdelete(f, u.p0, u.p0+u.n, flag); *q0p = u.p0; *q1p = u.p0; break; case Insert: f->seq = u.seq; if(canredo) fileuninsert(f, epsilon, u.p0, u.n); f->mod = u.mod; up -= u.n; buf = fbufalloc(); for(i=0; i<u.n; i+=n){ n = u.n - i; if(n > RBUFSIZE) n = RBUFSIZE; bufread(delta, up+i, buf, n); bufinsert(&f->Buffer, u.p0+i, buf, n); raspinsert(f, u.p0+i, buf, n, flag); } fbuffree(buf); *q0p = u.p0; *q1p = u.p0+u.n; break; case Filename: f->seq = u.seq; if(canredo) fileunsetname(f, epsilon); f->mod = u.mod; up -= u.n; Strinsure(&f->name, u.n+1); bufread(delta, up, f->name.s, u.n); f->name.s[u.n] = 0; f->name.n = u.n; fixname(&f->name); sortname(f); break; case Dot: f->seq = u.seq; if(canredo) fileunsetdot(f, epsilon, f->dot.r); f->mod = u.mod; f->dot.r.p1 = u.p0; f->dot.r.p2 = u.p0 + u.n; break; case Mark: f->seq = u.seq; if(canredo) fileunsetmark(f, epsilon, f->mark); f->mod = u.mod; f->mark.p1 = u.p0; f->mark.p2 = u.p0 + u.n; break; } bufdelete(delta, up, delta->nc); } if(isundo) f->seq = 0; raspdone(f, flag); }
void Model::initCommon(MPQFile &f) { // assume: origVertices already set if (!animGeometry) { vertices = new Vec3D[header.nVertices]; normals = new Vec3D[header.nVertices]; } //Vec3D vmin = Vec3D( 9999999.0f, 9999999.0f, 9999999.0f); //Vec3D vmax = Vec3D(-9999999.0f,-9999999.0f,-9999999.0f); // vertices, normals for (size_t i=0; i<header.nVertices; i++) { origVertices[i].pos = fixCoordSystem(origVertices[i].pos); origVertices[i].normal = fixCoordSystem(origVertices[i].normal); if (!animGeometry) { vertices[i] = origVertices[i].pos; normals[i] = origVertices[i].normal.normalize(); } float len = origVertices[i].pos.lengthSquared(); if (len > rad){ rad = len; } /* if (origVertices[i].pos.x < vmin.x) vmin.x = origVertices[i].pos.x; if (origVertices[i].pos.y < vmin.y) vmin.y = origVertices[i].pos.y; if (origVertices[i].pos.z < vmin.z) vmin.z = origVertices[i].pos.z; if (origVertices[i].pos.x > vmax.x) vmax.x = origVertices[i].pos.x; if (origVertices[i].pos.y > vmax.y) vmax.y = origVertices[i].pos.y; if (origVertices[i].pos.z > vmax.z) vmax.z = origVertices[i].pos.z; */ } rad = sqrtf(rad); //rad = std::max(vmin.length(),vmax.length()); // textures ModelTextureDef *texdef = (ModelTextureDef*)(f.getBuffer() + header.ofsTextures); if (header.nTextures) { textures = new TextureID[header.nTextures]; for (size_t i=0; i<header.nTextures; i++) { char texname[256]; if (texdef[i].type == 0) { strncpy(texname, f.getBuffer() + texdef[i].nameOfs, texdef[i].nameLen); texname[texdef[i].nameLen] = 0; std::string path(texname); fixname(path); textures[i] = video.textures.add(texname); } else { // special texture - only on characters and such... textures[i] = 0; } } } // init colors if (header.nColors) { colors = new ModelColor[header.nColors]; ModelColorDef *colorDefs = (ModelColorDef*)(f.getBuffer() + header.ofsColors); for (size_t i=0; i<header.nColors; i++) colors[i].init(f, colorDefs[i], globalSequences); } // init transparency int16 *transLookup = (int16*)(f.getBuffer() + header.ofsTransparencyLookup); if (header.nTransparency) { transparency = new ModelTransparency[header.nTransparency]; ModelTransDef *trDefs = (ModelTransDef*)(f.getBuffer() + header.ofsTransparency); for (size_t i=0; i<header.nTransparency; i++) transparency[i].init(f, trDefs[i], globalSequences); } // just use the first LOD/view // indices - allocate space, too ModelView *view = (ModelView*)(f.getBuffer() + header.ofsViews); uint16 *indexLookup = (uint16*)(f.getBuffer() + view->ofsIndex); uint16 *triangles = (uint16*)(f.getBuffer() + view->ofsTris); nIndices = view->nTris; indices = new uint16[nIndices]; for (size_t i = 0; i<nIndices; i++) { indices[i] = indexLookup[triangles[i]]; } // render ops ModelGeoset *ops = (ModelGeoset*)(f.getBuffer() + view->ofsSub); ModelTexUnit *tex = (ModelTexUnit*)(f.getBuffer() + view->ofsTex); ModelRenderFlags *renderFlags = (ModelRenderFlags*)(f.getBuffer() + header.ofsTexFlags); uint16 *texlookup = (uint16*)(f.getBuffer() + header.ofsTexLookup); uint16 *texanimlookup = (uint16*)(f.getBuffer() + header.ofsTexAnimLookup); int16 *texunitlookup = (int16*)(f.getBuffer() + header.ofsTexUnitLookup); /* for (size_t i = 0; i<view->nSub; i++) { ModelRenderPass pass; pass.usetex2 = false; pass.indexStart = ops[i].istart; pass.indexCount = ops[i].icount; // textures for (size_t j = 0; j<view->nTex; j++) { if (tex[j].op==i) { TextureID texid = textures[texlookup[tex[j].textureid]]; if (tex[j].texunit==0) { pass.texture = texid; // TODO: figure out these flags properly -_- ModelRenderFlags &rf = renderFlags[tex[j].flagsIndex]; //pass.useenvmap = (rf.flags2 & 6)==6; //pass.useenvmap = rf.blend == 6; // ??? pass.useenvmap = texunitlookup[tex[j].texunit] == -1; pass.blendmode = rf.blend; pass.color = tex[j].colorIndex; pass.opacity = transLookup[tex[j].transid]; pass.cull = (rf.flags & 4)==0 && rf.blend==0; pass.unlit = (rf.flags & 3)!=0; pass.nozwrite = pass.blendmode >= 2; //(rf.flags & 16)!=0; pass.trans = pass.blendmode != 0; pass.p = ops[i].v.x; if (animTextures) { if (tex[j].flags & 16) { pass.texanim = -1; // no texture animation } else { pass.texanim = texanimlookup[tex[j].texanimid]; } } else { pass.texanim = -1; // no texture animation } } else if (tex[j].texunit==1) { pass.texture2 = texid; //pass.usetex2 = true; } } } passes.push_back(pass); } */ for (size_t j = 0; j<view->nTex; j++) { ModelRenderPass pass; pass.usetex2 = false; pass.texture2 = 0; size_t geoset = tex[j].op; pass.indexStart = ops[geoset].istart; pass.indexCount = ops[geoset].icount; pass.vertexStart = ops[geoset].vstart; pass.vertexEnd = pass.vertexStart + ops[geoset].vcount; pass.order = tex[j].order; TextureID texid = textures[texlookup[tex[j].textureid]]; pass.texture = texid; // TODO: figure out these flags properly -_- ModelRenderFlags &rf = renderFlags[tex[j].flagsIndex]; pass.useenvmap = texunitlookup[tex[j].texunit] == -1; pass.blendmode = rf.blend; pass.color = tex[j].colorIndex; pass.opacity = transLookup[tex[j].transid]; pass.cull = (rf.flags & 4)==0 && rf.blend==0; pass.unlit = (rf.flags & 3)!=0; pass.nozwrite = pass.blendmode >= 2; //(rf.flags & 16)!=0; pass.trans = pass.blendmode != 0; pass.p = ops[geoset].v.x; if (animTextures) { if (tex[j].flags & 16) { pass.texanim = -1; // no texture animation } else { pass.texanim = texanimlookup[tex[j].texanimid]; } } else { pass.texanim = -1; // no texture animation } passes.push_back(pass); } // transparent parts come later std::sort(passes.begin(), passes.end()); // zomg done }
/* * Load a zone from the db server. If need be, update an * existing zone. This is the start of the real sql code. */ int update_zone_mysql(struct sql_rec_head *rec_head){ MYSQL_RES *sql_res; MYSQL_ROW sql_row; char q1[]="select sqlOrigin,sqlOwner,sqlClass,sqlType,sqlData,sqlTTL,sqlPref,sqlID,unix_timestamp(sqlTime) from"; char q2[]="order by sqlID"; char sql_query[255]; struct SQL_REC tmp_sql_rec; ns_updrec *cur_ns_rec, *tmp_ns_rec; /* build up the query string for the zone */ sprintf(sql_query, "%s %s %s", q1, fixname(rec_head->dbzone), q2); /* * Connect to the db and query it. * Complain about any errors and return. */ if(db_connect(rec_head)){ warning(LOG_DB, "Error connecting to db server\n"); } /* Query the db. Complain on error. */ if(mysql_real_query(&rec_head->sql_sock, sql_query, strlen(sql_query)) < 0 || !(sql_res=mysql_store_result(&rec_head->sql_sock))){ warning(LOG_DB, "Query failed\n"); return 1; } while (sql_row=mysql_fetch_row(sql_res)) { tmp_sql_rec.sqlType = savestr(sql_row[3], 1); /* don't mess with soa's just yet */ if(strcmp(tmp_sql_rec.sqlType, "SOA")!=0){ tmp_sql_rec.sqlOrigin = savestr(sql_row[0], 1); tmp_sql_rec.sqlOwner = savestr(sql_row[1], 1); tmp_sql_rec.sqlClass = savestr(sql_row[2], 1); tmp_sql_rec.sqlData = savestr(sql_row[4], 1); tmp_sql_rec.sqlTTL = atoi(sql_row[5]); tmp_sql_rec.sqlPref = savestr(sql_row[6], 1); tmp_sql_rec.sqlID = atoi(sql_row[7]); tmp_sql_rec.sqlTime = atoi(sql_row[8]); /* start looping through the linked list to place the record */ if(rec_head->r_head == NULL){ rec_head->r_head=(ns_updrec *)new_rec(tmp_sql_rec, ADD); }else{ for(cur_ns_rec=rec_head->r_head;cur_ns_rec!=NULL;cur_ns_rec=cur_ns_rec->r_next){ /* Handle deletes and adding new records */ if(cur_ns_rec->r_next!=NULL){ if(need_del_rec(cur_ns_rec->r_next, tmp_sql_rec)){ /* put in the delete record */ tmp_ns_rec=cur_ns_rec->r_next->r_next; cur_ns_rec->r_next->r_ttl=0; cur_ns_rec->r_next->r_opcode=0; cur_ns_rec->r_next->r_next=(ns_updrec *)new_rec(tmp_sql_rec, ADD); cur_ns_rec->r_next->r_next->r_next=tmp_ns_rec; break; } }else{ if(!rec_exists(rec_head->r_head, tmp_sql_rec)) cur_ns_rec->r_next=(ns_updrec *)new_rec(tmp_sql_rec, ADD); break; } } /* close the for loop used to place records */ } /* close the null head if test */ } /* close the soa if test */ } /* close the while that loops through records */ /* Clean up after our self */ mysql_free_result(sql_res); return 0; }