/* * Call "talk" method */ void b_verse_talk(struct VNode *vnode) { char text[160]; text[0]='\0'; if(sbutton(text, 0, 160, "Say:")) { waitcursor(1); printf("saying %s\n", text); waitcursor(0); } } /*************************/ else if(te->idcode==ID_VN) { struct VNode *vnode = (VNode*)te->directdata; if (vnode->type==V_NT_OBJECT || vnode->type==V_NT_BITMAP) { char subscribed = 0; if((vnode->type==V_NT_OBJECT) && (((VObjectData*)vnode->data)->object!=NULL)) subscribed = 1; if((vnode->type==V_NT_BITMAP) && (((VBitmapData*)vnode->data)->image!=NULL)) subscribed = 1; if(subscribed==1) event = pupmenu("VerseNode %t| Unsubscribe %x2"); else { int has_methods = 0; if(vnode->methodgroups.first) { struct VMethodGroup *vmg; struct VMethod *vm; for(vmg= vnode->methodgroups.first; vmg; vmg= vmg->next) { for(vm=vmg->methods.first; vm; vm= vm->next) { if(strcmp(vm->name, "talk")==0) { has_methods=1; break; } } if(has_methods) break; } } if(has_methods) event = pupmenu("VerseNode %t| Subscribe %x1| Talk %x3"); else event = pupmenu("VerseNode %t| Subscribe %x1"); } switch(event) { case 1: b_verse_pop_node(vnode); break; case 2: /* Global */ b_verse_unsubscribe(vnode); break; case 3: b_verse_talk(vnode); break; } } }