void JoinStrFunc::execute() { ComValue listv(stack_arg(0)); static int sym_symid = symbol_add("sym"); ComValue symflagv(stack_key(sym_symid)); boolean symflag = symflagv.is_true(); reset_stack(); if (listv.is_array()) { AttributeValueList* avl = listv.array_val(); if (avl) { char cbuf[avl->Number()+1]; Iterator i; int cnt=0; for (avl->First(i); !avl->Done(i); avl->Next(i)) { cbuf[cnt] = avl->GetAttrVal(i)->char_val(); cnt++; } cbuf[cnt] = '\0'; ComValue retval(symbol_add(cbuf), symflag ? ComValue::SymbolType : ComValue::StringType); push_stack(retval); return; } } push_stack(ComValue::nullval()); }
Transformer* CreateGraphicFunc::get_transformer(AttributeList* al) { static int transform_symid = symbol_add("transform"); AttributeValue* transformv = nil; Transformer* rel = nil; AttributeValueList* avl = nil; if (al && (transformv=al->find(transform_symid)) && transformv->is_array() && (avl=transformv->array_val()) && avl->Number()==6) { float a00, a01, a10, a11, a20, a21; Iterator it; avl->First(it); a00=avl->GetAttrVal(it)->float_val(); avl->Next(it); a01=avl->GetAttrVal(it)->float_val(); avl->Next(it); a10=avl->GetAttrVal(it)->float_val(); avl->Next(it); a11=avl->GetAttrVal(it)->float_val(); avl->Next(it); a20=avl->GetAttrVal(it)->float_val(); avl->Next(it); a21=avl->GetAttrVal(it)->float_val(); rel = new Transformer(a00, a01, a10, a11, a20, a21); } else { rel = ((OverlayViewer*)_ed->GetViewer())->GetRel(); if (rel != nil) { rel = new Transformer(rel); rel->Invert(); } } return rel; }