-
- for (i = 0; i < nGroups; i++) {
- GroupInfo *groupi = &keyi->groups[i];
-
- if (!darray_empty(groupi->syms)) {
- /* fill key to "width" symbols*/
- for (tmp = 0; tmp < width; tmp++) {
- LevelInfo *leveli = NULL;
-
- if (tmp < darray_size(groupi->levels))
- leveli = &darray_item(groupi->levels, tmp);
-
- if (leveli && leveli->num_syms != 0) {
- memcpy(&key->syms[symIndex],
- &darray_item(groupi->syms, leveli->sym_index),
- leveli->num_syms * sizeof(*key->syms));
- key->sym_index[(i * width) + tmp] = symIndex;
- key->num_syms[(i * width) + tmp] = leveli->num_syms;
- symIndex += key->num_syms[(i * width) + tmp];
- }
- else {
- key->sym_index[(i * width) + tmp] = 0;
- key->num_syms[(i * width) + tmp] = 0;
- }
-
- if (key->actions && leveli &&
- leveli->act.type != ACTION_TYPE_NONE)
- key->actions[i * width + tmp] = leveli->act;
- }
- }
+ if (haveActions) {
+ key->actions = calloc(key->num_groups * key->width,
+ sizeof(*key->actions));
+ key->explicit |= EXPLICIT_INTERP;