- ret->Side[0].BackPtr = ret;
-// ret->Side[0].Ops = ThisEnd->Module->InitInfo->Op;
- ret->Side[1].BackPtr = ret;
+ ret->MetaOpsNum = meta_ops_num;
+ for( int i = 0; i < 2; i ++ )
+ {
+ if( !ends[i].inst ) {
+ continue ;
+ }
+ tUDI_DriverModule *mod = ends[i].inst->Module;
+ ret->Side[i].BackPtr = ret;
+ udi_ops_init_t *ops = mod->InitInfo->ops_init_list;;
+ while( ops->ops_idx && ops->ops_idx != ends[i].ops_index )
+ ops++;
+ ASSERTR(ops->ops_idx, NULL); // TODO: Pretty error
+ ASSERTCR(ops->meta_idx, <, mod->nMetaLangs, NULL);
+ ASSERTCR(mod->MetaLangs[ops->meta_idx], ==, metalang, NULL);
+ ASSERTCR(ops->meta_ops_num, ==, meta_ops_num, NULL);
+ if( ops->chan_context_size ) {
+ ret->Side[i].Context = malloc(ops->chan_context_size);
+ }
+ ret->Side[i].Ops = ops->ops_vector;
+ }