static int tconcat (lua_State *L) { luaL_Buffer b; size_t lsep; int i, last; const char *sep = luaL_optlstring(L, 2, "", &lsep); luaL_checktype(L, 1, LUA_TTABLE); i = luaL_optint(L, 3, 1); last = luaL_opt(L, luaL_checkint(L,4), 4, luaL_len(L, 1)); luaL_buffinit(L, &b); for (; i < last; i++) { addfield(L, &b, i); luaL_addlstring(&b, sep, lsep); } if (i == last) /* add last value (if interval was not empty) */ addfield(L, &b, i); luaL_pushresult(&b); return 1; }
static int tconcat (lua_State *L) { TabA ta; luaL_Buffer b; size_t lsep; lua_Integer i, last; const char *sep = luaL_optlstring(L, 2, "", &lsep); checktab(L, 1, &ta); i = luaL_optinteger(L, 3, 1); last = luaL_opt(L, luaL_checkinteger, 4, luaL_len(L, 1)); luaL_buffinit(L, &b); for (; i < last; i++) { addfield(L, &b, &ta, i); luaL_addlstring(&b, sep, lsep); } if (i == last) /* add last value (if interval was not empty) */ addfield(L, &b, &ta, i); luaL_pushresult(&b); return 1; }
/* entry_hook - called an function entry */ static void entry_hook(void *cl, Symbol cfunc) { static int nfuncs; Type ty; /* Simulate the declaration of an sframe structure, but without the tag. */ ty = newstruct(STRUCT, ""); #define addfield(name,t) \ ty->size = roundup(ty->size, t->align);\ if (ty->align < t->align) ty->align = t->align; \ newfield(string(name), ty, t)->offset = ty->size; \ ty->size += t->size addfield("up", voidptype); addfield("down", voidptype); addfield("func", inttype); addfield("module",inttype); addfield("ip", inttype); #undef addfield ty->size = roundup(ty->size, ty->align); ty->u.sym->defined = 1; ty->u.sym->generated = 1; tos = genident(AUTO, ty, LOCAL); addlocal(tos); tos->defined = 1; /* Generated the assignments to the shadow frame fields. */ #define set(name,e) walk(asgntree(ASGN,field(lvalue(idtree(tos)),string(#name)),(e)),0,0) set(down, idtree(nub_tos)); set(func, cnsttree(inttype, symboluid(cfunc))); set(module, cnsttree(inttype, uname)); #undef set walk(asgn(nub_tos, lvalue(idtree(tos))), 0, 0); foreach(identifiers, PARAM, setoffset, tos); }
static int match_field(char *map, jsmntok_t *field, int nz, char **event, jsmntok_t *val) { struct field *f; jsmntok_t newval = *val; for (f = fields; f->field; f++) if (json_streq(map, field, f->field) && nz) { cut_comma(map, &newval); addfield(map, event, ",", f->kernel, &newval); return 1; } return 0; }
static int tconcat (killa_State *L) { killaL_Buffer b; size_t lsep; int i, last; const char *sep = killaL_optlstring(L, 2, "", &lsep); killaL_checktype(L, 1, KILLA_TTABLE); #if (KILLA_BASE != 1) && (KILLA_BASE_WARNING == 1) if (killa_gettop(L) > 2) { killaL_warning(L, "using table.concat with possible base-1 index"); } #endif i = killaL_optint(L, 3, KILLA_BASE); last = killaL_opt(L, killaL_checkint, 4, killaL_len(L, 1) + KILLA_BASE - 1); killaL_buffinit(L, &b); for (; i < last; i++) { addfield(L, &b, i); killaL_addlstring(&b, sep, lsep); } if (i == last) /* add last value (if interval was not empty) */ addfield(L, &b, i); killaL_pushresult(&b); return 1; }
static void typedmemorydump(char* memory, size_t len, int fromxdr) { unsigned int i,count,rem; char line[1024]; char* pmem; char mem[8]; assert(memory[len] == 0); /* build the header*/ line[0] = '\0'; addfield("offset",line,6); addfield("hex",line,8); addfield("uint",line,12); addfield("int",line,12); addfield("float",line,12); addfield("char[4]",line,16); addfield("double",line,12); strcat(line,"\n"); fprintf(stdout,"%s",line); count = (len / sizeof(int)); rem = (len % sizeof(int)); for(pmem=memory,i=0;i<count;i++,pmem+=4) { memset(mem,0,8); if(i<(count-1)) memcpy(mem,pmem,8); else memcpy(mem,pmem,4); dumpfield(i*sizeof(unsigned int),mem,fromxdr); } if(rem > 0) { memset(mem,0,8); memcpy(mem,pmem,4); dumpfield(i*sizeof(unsigned int),mem,fromxdr); } fflush(stdout); }
static void simplememorydump(char* memory, size_t len, int fromxdr) { unsigned int i,count,rem; int* imemory; char tmp[32]; char line[1024]; assert(memory[len] == 0); /* build the header*/ line[0] = '\0'; addfield("offset",line,6); addfield("XDR (hex)",line,9); addfield("!XDR (hex)",line,10); fprintf(stdout,"%s\n",line); count = (len / sizeof(int)); rem = (len % sizeof(int)); if(rem != 0) fprintf(stderr,"ocdump: |mem|%%4 != 0\n"); imemory = (int*)memory; for(i=0;i<count;i++) { unsigned int vx = (unsigned int)imemory[i]; unsigned int v = vx; if(!xxdr_network_order) swapinline32(&v); line[0] = '\0'; sprintf(tmp,"%6d",i); addfield(tmp,line,6); sprintf(tmp,"%08x",vx); addfield(tmp,line,9); sprintf(tmp,"%08x",v); addfield(tmp,line,10); fprintf(stdout,"%s\n",line); } fflush(stdout); }
static GtkTreeModel * create_and_fill_model (void) { int cpt=0; treestore = gtk_tree_store_new(NUM_COLS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); /* Append a top level rows */ gtk_tree_store_append(treestore, &sequence_number, /*parent element*/NULL); gtk_tree_store_set(treestore, &sequence_number,COL_FIELD, "Sequence number",-1); #define NAVDATA_OPTION_DEMO(STRUCTURE,NAME,TAG) { \ gtk_tree_store_append(treestore, &navdataBlocks[TAG], NULL);\ gtk_tree_store_set (treestore, &navdataBlocks[TAG], COL_FIELD, #TAG, -1); } #define NAVDATA_OPTION(STRUCTURE,NAME,TAG) { \ gtk_tree_store_append(treestore, &navdataBlocks[TAG], NULL); \ gtk_tree_store_set (treestore, &navdataBlocks[TAG], COL_FIELD, #TAG, -1); } #define NAVDATA_OPTION_CKS(STRUCTURE,NAME,TAG) #include <navdata_keys.h> cpt=0; addfield(NAVDATA_DEMO_TAG,"ctrl_state","Control State",&cpt); addfield(NAVDATA_DEMO_TAG,"phi","deg - Phi",&cpt); addfield(NAVDATA_DEMO_TAG,"psi","deg - Psi",&cpt); addfield(NAVDATA_DEMO_TAG,"theta","deg - Theta",&cpt); cpt=0; addfield(NAVDATA_GAMES_TAG,"Double tap counter","times",&cpt); addfield(NAVDATA_GAMES_TAG,"Finish line counter","times",&cpt); return GTK_TREE_MODEL(treestore); }
//============================================================================= telldata::box_type::box_type(point_type* pfld) : tell_type(telldata::tn_box) { addfield("p1", telldata::tn_pnt, pfld); addfield("p2", telldata::tn_pnt, pfld); };
//============================================================================= telldata::point_type::point_type() : tell_type(telldata::tn_pnt) { addfield("x", telldata::tn_real, NULL); addfield("y", telldata::tn_real, NULL); };
/** * 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; }
static void dumpfield(int index, char* n8, int isxdr) { char line[1024]; char tmp[32]; union { unsigned int uv; int sv; char cv[4]; float fv; } form; union { char cv[8]; unsigned long long ll; double d; } dform; line[0] = '\0'; /* offset */ sprintf(tmp,"%6d",index); addfield(tmp,line,5); memcpy(form.cv,n8,4); /* straight hex*/ sprintf(tmp,"%08x",form.uv); addfield(tmp,line,8); if(isxdr) {swapinline32(&form.uv);} /* unsigned integer */ sprintf(tmp,"%12u",form.uv); addfield(tmp,line,12); /* signed integer */ sprintf(tmp,"%12d",form.sv); addfield(tmp,line,12); /* float */ sprintf(tmp,"%#g",form.fv); addfield(tmp,line,12); /* char[4] */ { /* use raw form (i.e. n8)*/ int i; tmp[0] = '\0'; for(i=0;i<4;i++) { char stmp[64]; unsigned int c = (n8[i] & 0xff); if(c < ' ' || c > 126) snprintf(stmp,sizeof(stmp),"\\%02x",c); else snprintf(stmp,sizeof(stmp),"%c",c); if(!occoncat(tmp,sizeof(tmp),1,stmp)) return; } } addfield(tmp,line,16); /* double */ memcpy(dform.cv,n8,2*XDRUNIT); if(isxdr) xxdrntohdouble(dform.cv,&dform.d); sprintf(tmp,"%#g",dform.d); addfield(tmp,line,12); fprintf(stdout,"%s\n",line); }
void AddProjectForm::genfields(int& line, Item* project) //создаст массив полей { FIELD* f; delfields(); if (project != NULL) { //сообщение об ошибке errmsgfield = getfieldcount(); f = addfield(new_field(1, getwidth()-2, line++, 0, 0, 0)); if (!f) ERROREX(); if (E_OK != set_field_buffer(f, 0, "Errr")) ERROREX(); if (E_OK != set_field_back(f, getcolorpair(COLOR_WHITE,COLOR_RED) | A_BOLD)) ERROREX(); if (E_OK != field_opts_off(f, O_ACTIVE)) //статический текст ERROREX(); if (E_OK != field_opts_off(f, O_VISIBLE)) //по умолчанию невидима ERROREX(); //url Item* url = project->findItem("url"); std::string s = "url : "; if (url !=NULL) projurl = url->getsvalue(); s = s + projurl; f = addfield(new_field(1, getwidth()-4, line++, 1, 0, 0)); if (E_OK != set_field_buffer(f, 0, s.c_str())) ERROREX(); if (E_OK != set_field_back(f, getcolorpair(COLOR_WHITE,COLOR_BLACK) | A_BOLD)) ERROREX(); if (E_OK != field_opts_off(f, O_ACTIVE)) //статический текст ERROREX(); //area Item* general_area = project->findItem("general_area"); s = "General area : "; if (general_area !=NULL) s = s + general_area->getsvalue(); f = addfield(new_field(1, getwidth()-4, line++, 1, 0, 0)); if (!f) ERROREX(); if (E_OK != set_field_buffer(f, 0, s.c_str())) ERROREX(); if (E_OK != set_field_back(f, getcolorpair(COLOR_WHITE,COLOR_BLACK) | A_BOLD)) ERROREX(); if (E_OK != field_opts_off(f, O_ACTIVE)) //статический текст ERROREX(); //specific area Item* specific_area = project->findItem("specific_area"); s = "Specific area: "; if (specific_area !=NULL) s = s + specific_area->getsvalue(); f = addfield(new_field(1, getwidth()-4, line++, 1, 0, 0)); if (!f) ERROREX(); if (E_OK != set_field_buffer(f, 0, s.c_str())) ERROREX(); if (E_OK != set_field_back(f, getcolorpair(COLOR_WHITE,COLOR_BLACK) | A_BOLD)) ERROREX(); if (E_OK != field_opts_off(f, O_ACTIVE)) //статический текст ERROREX(); //home s = "Home : "; Item* home = project->findItem("home"); if (home !=NULL) s = s + home->getsvalue(); f = addfield(new_field(1, getwidth()-4, line++, 1, 0, 0)); if (!f) ERROREX(); if (E_OK != set_field_buffer(f, 0, s.c_str())) ERROREX(); if (E_OK != set_field_back(f, getcolorpair(COLOR_WHITE,COLOR_BLACK) | A_BOLD)) ERROREX(); if (E_OK != field_opts_off(f, O_ACTIVE)) //статический текст ERROREX(); //description s = "Description : "; line++; Item* description = project->findItem("description"); if (description !=NULL) s = s + description->getsvalue(); int h = s.size()/(getwidth() - 4) + 1; if (h > 4) h = 4; f = addfield(new_field(h, getwidth()-4, line, 1, 0, 0)); if (!f) ERROREX(); if (E_OK != set_field_buffer(f, 0, s.c_str())) ERROREX(); if (E_OK != set_field_back(f, getcolorpair(COLOR_WHITE,COLOR_BLACK) | A_BOLD)) ERROREX(); if (E_OK != field_opts_off(f, O_ACTIVE)) //статический текст ERROREX(); line += h+1; //platforms Item* platforms = project->findItem("platforms"); s = "Platforms : "; if (platforms !=NULL) { std::vector<Item*> namelist = platforms->getItems("name"); //список названий платформ std::vector<Item*>::iterator it; for (it = namelist.begin(); it!=namelist.end(); it++) { Item* name = (*it)->findItem("name"); if (it != namelist.begin()) s = s + ','; s = s + name->getsvalue(); } } h = s.size()/(getwidth() - 4) + 1; if (h > 5) h = 5; f = addfield(new_field(h, getwidth()-4, ++line, 1, 0, 0)); if (!f) ERROREX(); if (E_OK != set_field_buffer(f, 0, s.c_str())) ERROREX(); if (E_OK != set_field_back(f, getcolorpair(COLOR_WHITE,COLOR_BLACK) | A_BOLD)) ERROREX(); if (E_OK != field_opts_off(f, O_ACTIVE)) //статический текст ERROREX(); line += h + 1; } //email line++; f = addfield(new_field(1, 10, line, 1 , 0, 0)); if (!f) ERROREX(); if (E_OK != set_field_buffer(f, 0, "email")) ERROREX(); if (E_OK != set_field_back(f, getcolorpair(COLOR_WHITE,COLOR_BLACK) | A_BOLD)) ERROREX(); if (E_OK != field_opts_off(f, O_ACTIVE)) //статический текст ERROREX(); emailfield = getfieldcount(); f = addfield(new_field(1, 40, line++, 15, 0, 0)); if (!f) ERROREX(); if (E_OK != field_opts_off(f, O_AUTOSKIP)) ERROREX(); if (E_OK != set_field_back(f, getcolorpair(COLOR_WHITE,COLOR_CYAN) | A_BOLD)) ERROREX(); //password line++; f = addfield(new_field(1, 10, line, 1 , 0, 0)); if (!f) ERROREX(); if (E_OK != set_field_buffer(f, 0, "password")) ERROREX(); if (E_OK != set_field_back(f, getcolorpair(COLOR_WHITE,COLOR_BLACK) | A_BOLD)) ERROREX(); if (E_OK != field_opts_off(f, O_ACTIVE)) //статический текст ERROREX(); passwfield = getfieldcount(); f = addfield(new_field(1, 40, line++, 15, 0, 0)); if (!f) ERROREX(); if (E_OK != set_field_back(f, getcolorpair(COLOR_WHITE,COLOR_CYAN) | A_BOLD)) ERROREX(); if (E_OK != field_opts_off(f, O_AUTOSKIP)) ERROREX(); if (!userexist) { //user name line++; f = addfield(new_field(1, 10, line, 1 , 0, 0)); if (!f) ERROREX(); if (E_OK != set_field_buffer(f, 0, "username")) ERROREX(); if (E_OK != set_field_back(f, getcolorpair(COLOR_WHITE,COLOR_BLACK) | A_BOLD)) ERROREX(); if (E_OK != field_opts_off(f, O_ACTIVE)) //статический текст ERROREX(); usernamefield = getfieldcount(); f = addfield(new_field(1, 40, line++, 15, 0, 0)); if (!f) ERROREX(); if (E_OK != field_opts_off(f, O_AUTOSKIP)) ERROREX(); if (E_OK != set_field_back(f, getcolorpair(COLOR_WHITE,COLOR_CYAN) | A_BOLD)) ERROREX(); //team name line++; f = addfield(new_field(1, 10, line, 1 , 0, 0)); if (!f) ERROREX(); if (E_OK != set_field_buffer(f, 0, "teamname")) ERROREX(); if (E_OK != set_field_back(f, getcolorpair(COLOR_WHITE,COLOR_BLACK) | A_BOLD)) ERROREX(); if (E_OK != field_opts_off(f, O_ACTIVE)) //статический текст ERROREX(); teamfield = getfieldcount(); f = addfield(new_field(1, 40, line++, 15, 0, 0)); if (!f) ERROREX(); if (E_OK != set_field_back(f, getcolorpair(COLOR_WHITE,COLOR_CYAN) | A_BOLD)) ERROREX(); if (E_OK != field_opts_off(f, O_AUTOSKIP)) ERROREX(); } //подсказки line++; f = addfield(new_field(1, getwidth()-25, line++, 20 , 0, 0)); if (!f) ERROREX(); if (E_OK != set_field_buffer(f, 0, "Enter-Ok Esc-Cancel")) ERROREX(); if (E_OK != set_field_back(f, getcolorpair(COLOR_WHITE,COLOR_BLACK) | A_BOLD)) ERROREX(); if (E_OK != field_opts_off(f, O_ACTIVE)) //статический текст ERROREX(); //финализация списка полей addfield(NULL); }
/** * 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 AddAccMgrForm::genfields(int& line, Item* mgr) //создаст массив полей { FIELD* f; delfields(); //сообщение об ошибке errmsgfield = getfieldcount(); f = addfield(new_field(1, getwidth()-2, line++, 0, 0, 0)); set_field_buffer(f, 0, "Errr"); set_field_back(f, getcolorpair(COLOR_WHITE,COLOR_RED) | A_BOLD); field_opts_off(f, O_ACTIVE); //статический текст field_opts_off(f, O_VISIBLE); //по умолчанию невидима //получить url и имя менеджера (или из конфига или от boinc клиента if (mgr != NULL) { Item* url = mgr->findItem("url"); if (url !=NULL) mgrurl = url->getsvalue(); } else { //взять url из конфига (если есть) Item* boinctui_cfg = gCfg->getcfgptr(); if (boinctui_cfg != NULL) { std::vector<Item*> mgrlist = boinctui_cfg->getItems("accmgr"); std::vector<Item*>::iterator it; for (it = mgrlist.begin(); it != mgrlist.end(); it++) { Item* name = (*it)->findItem("name"); if (name != NULL) if (name->getsvalue() == mgrname) { Item* url = (*it)->findItem("url"); if (url != NULL) { mgrurl = url->getsvalue(); break; } } } } } //имя менеджера f = addfield(new_field(1, getwidth()-4, line, 2, 0, 0)); set_field_buffer(f, 0, "Description "); set_field_back(f, getcolorpair(COLOR_WHITE,COLOR_BLACK) | A_BOLD); field_opts_off(f, O_ACTIVE); //статический текст namefield = getfieldcount(); f = addfield(new_field(1, 40, line++, 15, 0, 0)); if (mgr != NULL) { field_opts_off(f, O_STATIC); field_opts_off(f, O_ACTIVE); //статический текст } else set_field_back(f, getcolorpair(COLOR_WHITE,COLOR_CYAN) | A_BOLD); field_opts_off(f, O_AUTOSKIP); set_max_field(f,128); //max width 128 char buf[129]; strncpy(buf, gettitle(), 128); buf[128] = '\0'; char* p; p = ltrim(buf); rtrim(buf); set_field_buffer(f, 0, p); //url line++; f = addfield(new_field(1, getwidth()-4, line, 2, 0, 0)); set_field_buffer(f, 0, "URL "); set_field_back(f, getcolorpair(COLOR_WHITE,COLOR_BLACK) | A_BOLD); field_opts_off(f, O_ACTIVE); //статический текст urlfield = getfieldcount(); f = addfield(new_field(1, 40, line++, 15, 0, 0)); if (mgr != NULL) { field_opts_off(f, O_STATIC); field_opts_off(f, O_ACTIVE); //статический текст } else set_field_back(f, getcolorpair(COLOR_WHITE,COLOR_CYAN) | A_BOLD); field_opts_off(f, O_AUTOSKIP); set_max_field(f,128); //max width 128 set_field_buffer(f, 0, mgrurl.c_str()); //help line++; f = addfield(new_field(3, getwidth()-4, line++, 2, 0, 0)); set_field_buffer(f, 0, "If you have not yet registered with this account manager" \ " please do so before proceeding."); set_field_back(f, getcolorpair(COLOR_WHITE,COLOR_BLACK) | A_BOLD); field_opts_off(f, O_ACTIVE); //статический текст line = line + 2; //user name line++; f = addfield(new_field(1, 10, line, 2 , 0, 0)); set_field_buffer(f, 0, "username"); set_field_back(f, getcolorpair(COLOR_WHITE,COLOR_BLACK) | A_BOLD); field_opts_off(f, O_ACTIVE); //статический текст usernamefield = getfieldcount(); f = addfield(new_field(1, 40, line++, 15, 0, 0)); field_opts_off(f, O_AUTOSKIP); set_field_back(f, getcolorpair(COLOR_WHITE,COLOR_CYAN) | A_BOLD); //password line++; f = addfield(new_field(1, 10, line, 2 , 0, 0)); set_field_buffer(f, 0, "password"); set_field_back(f, getcolorpair(COLOR_WHITE,COLOR_BLACK) | A_BOLD); field_opts_off(f, O_ACTIVE); //статический текст passwfield = getfieldcount(); f = addfield(new_field(1, 40, line++, 15, 0, 0)); set_field_back(f, getcolorpair(COLOR_WHITE,COLOR_CYAN) | A_BOLD); field_opts_off(f, O_AUTOSKIP); //подсказки line++; f = addfield(new_field(1, getwidth()-25, line++, 20 , 0, 0)); set_field_buffer(f, 0, "Enter-Ok Esc-Cancel"); set_field_back(f, getcolorpair(COLOR_WHITE,COLOR_BLACK) | A_BOLD); field_opts_off(f, O_ACTIVE); //статический текст //финализация списка полей addfield(NULL); }