MStatus pbdSolverCmd::redoIt() { //create solver node MStatus stat; MObject transform = dgMod.createNode("transform"); MObject solver= dgMod.createNode(pbdSolverNode::typeId, transform, &stat); //connect time attribute MPlug plgInTime(solver,pbdSolverNode::time); MItDependencyNodes dnTime(MFn::kTime); MObject time = dnTime.thisNode(); MPlug plgOutTime = MFnDependencyNode(time).findPlug("outTime", false); dgMod.connect(plgOutTime, plgInTime); //connect msattr MSelectionList activeSelect; MGlobal::getActiveSelectionList(activeSelect); int pnum = 0, mnum = 0; for(int i = 0;i < activeSelect.length(); ++i) { MObject tNode; activeSelect.getDependNode(i,tNode); MFnDagNode fnDagNode(tNode); MObject pNode=fnDagNode.child(0); MFnDependencyNode fnNode(pNode); //MString name=fnNode1.name().asChar(); if(fnNode.typeId() == OParticleNode::typeId) { //get solver message attribute from particleNode MPlug s_msg(pNode,OParticleNode::pbd_solver); //get particle message attribute from solverNode MPlug o_msg(solver,pbdSolverNode::orientedParticle); dgMod.connect(o_msg,s_msg); ++pnum; } else if(pNode.apiType()==MFn::kMesh) { MString name=MFnDependencyNode(pNode).name().asChar(); MPlug m_vs=fnNode.findPlug("ogc",false); MPlug s_vs(solver,pbdSolverNode::inMesh); dgMod.connect(m_vs,s_vs); ++mnum; } } if( pnum == 0 ) MGlobal::displayError(" No oriented particles are selected"); if( mnum == 0 ) MGlobal::displayError(" No mesh is selected"); MGlobal::displayInfo("PBD solver is created"); return dgMod.doIt(); }
void cmd_msg(char *cmd, t_env *e, int cs) { char *trim; char **spl; char *tmp; trim = ft_strtrim(cmd); spl = ft_strsplit(trim, ' '); ft_strdel(&trim); if (ft_strlistlen(spl) == 3) { s_msg(e, cs, spl[1], spl[2]); } else { tmp = ft_strijoin(e->fds[cs].buf_write, CLEAR_LINE, "usage: /msg [name] [message]\n", 0); ft_strcpy(e->fds[cs].buf_write, tmp); ft_strdel(&tmp); } ft_strlistdel(spl); }
static int set_keydefine_key(struct _select_def *conf, int key) { int oldmode; switch (key) { case KEY_TAB: ask_define(); return SHOW_DIRCHANGE; case 'a': /* add new user */ if (keymem_total < MAX_KEY_DEFINE) { int i,j; struct key_struct k; char buf[120]; clear(); move(1, 0); prints("请键入自定义键: "); do { i = igetkey(); get_key_name(i, buf); } while (!buf[0]&&i!=KEY_ESC); if (i==KEY_ESC) return SHOW_DIRCHANGE; prints("%s\n", buf); k.key = i; move(2, 0); prints("请输入替换序列(最多10个),按一次ESC结束: "); j=0; do { do { i = igetkey(); get_key_name(i, buf); } while (!buf[0]&&i!=KEY_ESC); if (i==KEY_ESC) break; prints("%s ", buf); k.mapped[j] = i; j++; if (j>=10) break; } while (1); if (j<10) k.mapped[j]=0; if (j==0) return SHOW_DIRCHANGE; k.status[0] = -1; add_key(&k); return SHOW_DIRCHANGE; } break; case 'e': set_modes(keymem[conf->pos-1].status); return SHOW_DIRCHANGE; case 's': { int i,j,x,y; struct key_struct k; char buf[120]; memmove(&k,keymem+conf->pos-1,sizeof(struct key_struct)); clear(); move(1, 0); prints("请键入自定义键: "); do { i = igetkey(); get_key_name(i, buf); } while (!buf[0]&&i!=KEY_ESC); if (i==KEY_ESC) return SHOW_DIRCHANGE; prints("%s\n", buf); k.key = i; move(2, 0); prints("请输入替换序列(最多10个),按一次ESC结束: "); j=0; do { do { i = igetkey(); get_key_name(i, buf); } while (!buf[0]&&i!=KEY_ESC); if (i==KEY_ESC) break; getyx(&y,&x); prints((x+strlen(buf)<t_columns-1)?"%s ":"\n%s ",buf); k.mapped[j] = i; j++; if (j>=10) break; } while (1); if (j<10) k.mapped[j]=0; if (j==0) return SHOW_DIRCHANGE; memcpy(keymem+conf->pos-1, &k, sizeof(struct key_struct)); return SHOW_DIRCHANGE; } break; case 'x': { struct key_struct k; int i; char buf[128]; memmove(&k,keymem+conf->pos-1,sizeof(struct key_struct)); clear(); move(1,0); prints("请键入自定义键: "); do { i=igetkey(); get_key_name(i,buf); } while (!buf[0]&&i!=KEY_ESC); if (i==KEY_ESC) return SHOW_DIRCHANGE; k.key=i; prints("%s",buf); memmove(keymem+conf->pos-1,&k,sizeof(struct key_struct)); prints("\n\n\033[1;33m%s\033[0;33m<Enter>\033[m","已更新!"); WAIT_RETURN; return SHOW_DIRCHANGE; } break; case 't': { struct key_struct k; int i,j,x,y; char buf[128]; memmove(&k,keymem+conf->pos-1,sizeof(struct key_struct)); clear(); move(1,0); prints("请输入替换序列(最多10个), 按一次ESC结束: "); for (j=0; j<10; j++) { do { i=igetkey(); get_key_name(i,buf); } while (!buf[0]&&i!=KEY_ESC); if (i==KEY_ESC) break; getyx(&y,&x); prints((x+strlen(buf)<t_columns-1)?"%s ":"\n%s ",buf); k.mapped[j]=i; } if (!j) return SHOW_DIRCHANGE; if (j<10) k.mapped[j]=0; memmove(keymem+conf->pos-1,&k,sizeof(struct key_struct)); prints("\n\n\033[1;33m%s\033[0;33m<Enter>\033[m","已更新!"); WAIT_RETURN; return SHOW_DIRCHANGE; } break; case 'd': /* delete existed user */ if (keymem_total > 0) { char ans[3]; getdata(t_lines - 1, 0, "确实要删除该定义键吗(Y/N)? [N]: ", ans, sizeof(ans), DOECHO, NULL, true); if (ans[0] == 'Y' || ans[0] == 'y') { remove_key(conf->pos-1); if (keymem_total==0) { struct key_struct key; key.key = 'A'; key.mapped[0] = 'A'; key.mapped[1] = 0; key.status[0] = 0; add_key(&key); } } return SHOW_DIRCHANGE; } break; case 'L': case 'l': oldmode = uinfo.mode; show_allmsgs(); modify_user_mode(oldmode); return SHOW_REFRESH; case 'W': case 'w': oldmode = uinfo.mode; if (!HAS_PERM(getCurrentUser(), PERM_PAGE)) break; s_msg(); modify_user_mode(oldmode); return SHOW_REFRESH; case 'u': oldmode = uinfo.mode; clear(); modify_user_mode(QUERY); t_query(NULL); modify_user_mode(oldmode); clear(); return SHOW_REFRESH; } return SHOW_CONTINUE; }
static int tmpl_key(struct _select_def *conf, int key) { int oldmode; switch (key) { case 'a' : tmpl_check_limit(template_num); tmpl_add(); return SHOW_DIRCHANGE; break; case 'd' : { char ans[3]; getdata(t_lines - 1, 0, "确实要删除吗(Y/N)? [N]: ", ans, sizeof(ans), DOECHO, NULL, true); if (ans[0] == 'Y' || ans[0] == 'y') { int i; deepfree(ptemplate + conf->pos - 1, currboard->filename); template_num--; for (i=conf->pos-1; i<template_num; i++) memcpy(ptemplate+i, ptemplate+i+1, sizeof(struct a_template)); ptemplate[template_num].tmpl = NULL; ptemplate[template_num].cont = NULL; tmpl_save(); } if (template_num > 0) return SHOW_DIRCHANGE; else return SHOW_QUIT; } break; case 'c': do { extern bool in_do_sendmsg; extern int super_select_board(char *bname); int ret; char bname[STRLEN] = ""; move(0,0); clrtoeol(); prints("%s","复制到讨论区 [ \033[1;32mSPACE/TAB\033[m - 自动补全, \033[1;32mESC\033[m - 退出 ]"); move(1,0); clrtoeol(); prints("请输入讨论区名称 [\033[1;32m%s\033[m]: ",currboard->filename); make_blist(0, 3); in_do_sendmsg=1; ret = namecomplete(NULL, bname); in_do_sendmsg=0; CreateNameList(); /* free list memory. */ if (ret == KEY_ESC) { /* noop */ } else if (!*bname || !strcmp(bname, currboard->filename)) { /* copy to current board */ tmpl_check_BM(currboard->filename); /* sanity check, how about stick here when deposing? */ tmpl_check_limit(template_num); if (tmpl_copy(conf->pos)) tmplcp_sorry(); else tmplcp_success(); } else { /* copy to another board */ struct a_template *ptemp; int temp_num = tmpl_init_ex(0, bname, &ptemp); if (temp_num >= 0) { tmpl_check_BM(bname); /* sanity check */ tmpl_check_limit(temp_num); if (tmpl_copy_to_board(bname, &ptemp, &temp_num, conf->pos)) tmplcp_sorry(); else tmplcp_success(); tmpl_free_ex(&ptemp, temp_num); } } } while (0); return SHOW_DIRCHANGE; /* etnlegend, 2006.05.19, move templates... */ case 'm': do { struct a_template temp; char ans[4]; int i,pos; getdata(t_lines-1,0,"请输入希望移动到的位置序号: ",ans,4,DOECHO,NULL,true); trimstr(ans); if (!isdigit(ans[0])) break; pos=atoi(ans); pos=((pos<1)?1:((pos>template_num)?template_num:pos)); if (pos==conf->pos) break; memcpy(&temp,&ptemplate[conf->pos-1],sizeof(struct a_template)); if (pos>conf->pos) { for (i=(conf->pos-1); i<(pos-1); i++) memcpy(&ptemplate[i],&ptemplate[i+1],sizeof(struct a_template)); } else { for (i=(conf->pos-1); i>(pos-1); i--) memcpy(&ptemplate[i],&ptemplate[i-1],sizeof(struct a_template)); } memcpy(&ptemplate[pos-1],&temp,sizeof(struct a_template)); tmpl_save(); } while (0); return SHOW_DIRCHANGE; /* END - etnlegend, 2006.05.19, move templates ... */ case 't' : { char newtitle[60]; strcpy(newtitle, ptemplate[conf->pos-1].tmpl->title); getdata(t_lines - 1, 0, "新名称: ", newtitle, 50, DOECHO, NULL, false); if (newtitle[0] == '\0' || newtitle[0]=='\n' || ! strcmp(newtitle,ptemplate[conf->pos-1].tmpl->title)) return SHOW_REFRESH; strncpy(ptemplate[conf->pos-1].tmpl->title, newtitle, 50); ptemplate[conf->pos-1].tmpl->title[49]='\0'; tmpl_save(); return SHOW_REFRESH; } break;/* case 'z' : { char newtitle[30]; strcpy(newtitle, ptemplate[conf->pos-1].tmpl->title_prefix); getdata(t_lines - 1, 0, "请输入此模板的文章标题前缀: ", newtitle, 20, DOECHO, NULL, false); if( newtitle[0] == '\0' || newtitle[0]=='\n' || ! strcmp(newtitle,ptemplate[conf->pos-1].tmpl->title_prefix) ) return SHOW_REFRESH; strncpy(ptemplate[conf->pos-1].tmpl->title_prefix, newtitle, 20); ptemplate[conf->pos-1].tmpl->title_prefix[19]='\0'; tmpl_save(); return SHOW_REFRESH; }*/ case 'f' : { char filepath[STRLEN]; int oldmode; oldmode = uinfo.mode; modify_user_mode(EDITUFILE); if (ptemplate[conf->pos-1].tmpl->filename[0] == '\0') { setbfile(filepath, currboard->filename, ""); if (GET_POSTFILENAME(ptemplate[conf->pos-1].tmpl->filename, filepath) != 0) { clear(); move(3,0); prints("创建模板文件失败!"); pressanykey(); return SHOW_REFRESH; } tmpl_save(); } setbfile(filepath, currboard->filename, ptemplate[conf->pos-1].tmpl->filename); vedit(filepath,0,NULL,NULL,0); modify_user_mode(oldmode); return SHOW_REFRESH; } case 's' : { char filepath[STRLEN]; setbfile(filepath, currboard->filename, ptemplate[conf->pos-1].tmpl->filename); clear(); ansimore(filepath,1); return SHOW_REFRESH; } case 'b' : { if (ptemplate[conf->pos-1].tmpl->flag & TMPL_BM_FLAG) ptemplate[conf->pos-1].tmpl->flag &= ~TMPL_BM_FLAG ; else ptemplate[conf->pos-1].tmpl->flag |= TMPL_BM_FLAG; tmpl_save(); return SHOW_REFRESH; } case 'i' : { char newtitle[STRLEN]; strcpy(newtitle, ptemplate[conf->pos-1].tmpl->title_tmpl); getdata(t_lines - 1, 0, "新文章标题: ", newtitle, STRLEN, DOECHO, NULL, false); if (newtitle[0] == '\0' || newtitle[0]=='\n' || ! strcmp(newtitle,ptemplate[conf->pos-1].tmpl->title_tmpl)) return SHOW_REFRESH; strncpy(ptemplate[conf->pos-1].tmpl->title_tmpl, newtitle, STRLEN); ptemplate[conf->pos-1].tmpl->title_tmpl[STRLEN-1]='\0'; tmpl_save(); return SHOW_REFRESH; } case 'x' : { clear(); move(2,0); prints("此模版的标题设置为"); move(4,0); prints("%s",ptemplate[conf->pos-1].tmpl->title_tmpl); pressanykey(); return SHOW_REFRESH; } /* case 'h': { clear(); move(1,0); prints(" x : 查看标题格式\n"); prints(" i : 修改标题格式"); pressanykey(); return SHOW_REFRESH; } */ case 'l': /* by pig2532 on 2005.12.01 */ oldmode = uinfo.mode; show_allmsgs(); modify_user_mode(oldmode); return SHOW_REFRESH; case 'w': /* by pig2532 on 2005-12-1 */ oldmode = uinfo.mode; if (!HAS_PERM(getCurrentUser(), PERM_PAGE)) break; s_msg(); modify_user_mode(oldmode); return SHOW_REFRESH; case 'u': /* by pig2532 on 2005-12-1 */ clear(); oldmode = uinfo.mode; modify_user_mode(QUERY); t_query(NULL); modify_user_mode(oldmode); return SHOW_REFRESH; case 'U': /* pig2532 2005.12.10 */ board_query(); return SHOW_REFRESH; default : break; } return SHOW_CONTINUE; }
static int content_key(struct _select_def *conf, int key) { int oldmode; switch (key) { case 'm': { char ans[5]; int newm; getdata(t_lines-1, 0, "移动到新次序:", ans, 4, DOECHO, NULL, true); if (ans[0]=='\0' || ans[0]=='\n' || ans[0]=='\r') return SHOW_REFRESH; newm=atoi(ans); if (newm <= 0 || newm > ptemplate[t_now].tmpl->content_num) return SHOW_REFRESH; if (newm > conf->pos) { int i; struct s_content sc; memcpy(&sc, &ptemplate[t_now].cont[conf->pos-1], sizeof(struct s_content)); for (i=conf->pos; i<newm; i++) memcpy(& ptemplate[t_now].cont[i-1], & ptemplate[t_now].cont[i], sizeof(struct s_content)); memcpy(&ptemplate[t_now].cont[newm-1], &sc, sizeof(struct s_content)); tmpl_save(); return SHOW_REFRESH; } else if (newm < conf->pos) { int i; struct s_content sc; memcpy(&sc, &ptemplate[t_now].cont[conf->pos-1], sizeof(struct s_content)); for (i=conf->pos; i>newm; i--) memcpy(& ptemplate[t_now].cont[i-1], & ptemplate[t_now].cont[i-2], sizeof(struct s_content)); memcpy(&ptemplate[t_now].cont[newm-1], &sc, sizeof(struct s_content)); tmpl_save(); return SHOW_REFRESH; } else return SHOW_REFRESH; } case 'a': if (ptemplate[t_now].tmpl->content_num >= MAX_CONTENT) { char ans[STRLEN]; move(t_lines - 1, 0); clrtoeol(); a_prompt(-1, "选项已满,按回车继续 << ", ans); move(t_lines - 1, 0); clrtoeol(); return SHOW_CONTINUE; } content_add(); return SHOW_DIRCHANGE; break; case 'd': { char ans[3]; getdata(t_lines - 1, 0, "确实要删除吗(Y/N)? [N]: ", ans, sizeof(ans), DOECHO, NULL, true); if (ans[0] == 'Y' || ans[0] == 'y') { int i=0; struct s_content *ct; if (ptemplate[t_now].tmpl->content_num == 1) { ptemplate[t_now].tmpl->content_num = 0; free(ptemplate[t_now].cont); tmpl_save(); return SHOW_QUIT; } ct = (struct s_content *) malloc(sizeof(struct s_content) * (ptemplate[t_now].tmpl->content_num-1)); memcpy(ct+i,&(ptemplate[t_now].cont[i]),sizeof(struct s_content) *(conf->pos-1)); for (i=conf->pos-1; i<ptemplate[t_now].tmpl->content_num-1; i++) memcpy(ct+i, &(ptemplate[t_now].cont[i+1]), sizeof(struct s_content)); free(ptemplate[t_now].cont); ptemplate[t_now].cont = ct; ptemplate[t_now].tmpl->content_num --; tmpl_save(); return SHOW_DIRCHANGE; } return SHOW_REFRESH; } case 't' : { char newtitle[60]; strcpy(newtitle, ptemplate[t_now].cont[conf->pos-1].text); getdata(t_lines - 1, 0, "新标题: ", newtitle, 50, DOECHO, NULL, false); if (newtitle[0] == '\0' || newtitle[0]=='\n' || ! strcmp(newtitle,ptemplate[t_now].cont[conf->pos-1].text)) return SHOW_REFRESH; strncpy(ptemplate[t_now].cont[conf->pos-1].text, newtitle, 50); ptemplate[t_now].cont[conf->pos-1].text[49]='\0'; tmpl_save(); return SHOW_REFRESH; } break; case 'l' : { char newlen[10]; int nl; sprintf(newlen,"%-3d",ptemplate[t_now].cont[conf->pos-1].length); getdata(t_lines-1, 0, "新长度: ", newlen, 5, DOECHO, NULL, false); nl = atoi(newlen); if (nl <= 0 || nl > MAX_CONTENT_LENGTH || nl == ptemplate[t_now].cont[conf->pos-1].length) return SHOW_REFRESH; ptemplate[t_now].cont[conf->pos-1].length = nl; tmpl_save(); return SHOW_REFRESH; } break; case 'w': /* by pig2532 on 2005-12-1 */ oldmode = uinfo.mode; if (!HAS_PERM(getCurrentUser(), PERM_PAGE)) break; s_msg(); modify_user_mode(oldmode); return SHOW_REFRESH; case 'u': /* by pig2532 on 2005-12-1 */ clear(); oldmode = uinfo.mode; modify_user_mode(QUERY); t_query(NULL); modify_user_mode(oldmode); return SHOW_REFRESH; case 'U': /* pig2532 2005.12.10 */ board_query(); return SHOW_REFRESH; default: break; } return SHOW_CONTINUE; }
static choose_handler_t choose_board_handler(choose_t *cp, int ch) { choose_board_t *cbrd = cp->data; board_data_t *ptr; char ans[2]; bool modify_mode = false; switch (ch) { case '*': if (cbrd->brds[cp->cur].flag & BOARD_CUSTOM_FLAG) return DONOTHING; ptr = cbrd->brds + cp->cur; show_board_info(ptr->name); return FULLUPDATE; case 'C': return tui_goodbrd_copy(cp); case 'c': cbrd->newflag = !cbrd->newflag; return PARTUPDATE; case 'L': m_read(); cp->valid = false; modify_mode = true; break; case 'M': m_new(); cp->valid = false; modify_mode = true; break; case 'u': modify_user_mode(QUERY); t_query(); modify_mode = true; break; case 'H': getdata(t_lines - 1, 0, "您选择? (1) 本日十大 (2) 系统热点 [1]", ans, 2, DOECHO, YEA); if (ans[0] == '2') show_help("etc/hotspot"); else show_help("0Announce/bbslist/day"); break; case 'l': msg_more(); modify_mode = true; break; case 'P': return tui_goodbrd_paste(cp); case '!': save_zapbuf(cbrd); free(cbrd->brds); free(cbrd->gbrds); Goodbye(); return -1; case 'h': show_help("help/boardreadhelp"); break; case '/': // TODO: search. break; case 's': if (currentuser.flags[0] & BRDSORT_FLAG) { currentuser.flags[0] ^= BRDSORT_FLAG; currentuser.flags[0] |= BRDSORT_ONLINE; cbrd->cmp = board_cmp_online; } else if (currentuser.flags[0] & BRDSORT_ONLINE) { currentuser.flags[0] ^= BRDSORT_ONLINE; cbrd->cmp = board_cmp_default; } else { currentuser.flags[0] |= BRDSORT_FLAG; cbrd->cmp = board_cmp_flag; } qsort(cbrd->brds, cbrd->num, sizeof(*cbrd->brds), cbrd->cmp); substitut_record(PASSFILE, ¤tuser, sizeof(currentuser), usernum); return PARTUPDATE; case 'y': if (cbrd->gnum) return DONOTHING; cbrd->yank = !cbrd->yank; cp->valid = false; return PARTUPDATE; case 'z': if (cbrd->gnum) return DONOTHING; if (HAS_PERM(PERM_LOGIN) && !(cbrd->brds[cp->cur].flag & BOARD_NOZAP_FLAG)) { ptr = cbrd->brds + cp->cur; ptr->zap = !ptr->zap; ptr->total = -1; cbrd->zapbuf[ptr->pos] = (ptr->zap ? 0 : login_start_time); } cp->valid = false; return PARTUPDATE; case 'a': return tui_goodbrd_add(cp); case 'A': return tui_goodbrd_mkdir(cp); case 'T': return tui_goodbrd_rename(cp); case 'd': return tui_goodbrd_rm(cp); case '\r': case '\n': case KEY_RIGHT: if (cbrd->num > 0) choose_board_read(cp); cp->valid = false; modify_mode = true; break; case 'S': if (!HAS_PERM(PERM_TALK)) return DONOTHING; s_msg(); modify_mode = true; break; case 'o': if (!HAS_PERM(PERM_LOGIN)) return DONOTHING; online_users_show_override(); modify_mode = true; break; default: return DONOTHING; } if (modify_mode) modify_user_mode(cbrd->newflag ? READNEW : READBRD); return FULLUPDATE; }