void MPluginList::show(int source_index) { int i, n=0, r=0; MPlugin *pl; char desc[15+1], file[16+1], vers[7+1]; // plus 1 for term null if (source_index <= 0) META_CONS("Currently loaded plugins:"); else META_CONS("Child plugins:"); META_CONS(" %*s %-*s %-4s %-4s %-*s v%-*s %-3s %-5s %-5s", WIDTH_MAX_PLUGINS, "", sizeof(desc)-1, "description", "stat", "pend", sizeof(file)-1, "file", sizeof(vers)-1, "ers", "src", "load ", "unlod"); for(i=0; i < endlist; i++) { pl=&plist[i]; if(pl->status < PL_VALID) continue; if ((source_index > 0) && (pl->source_plugin_index != source_index)) continue; STRNCPY(desc, pl->desc, sizeof(desc)); STRNCPY(file, pl->file, sizeof(file)); if(pl->info && pl->info->version) STRNCPY(vers, pl->info->version, sizeof(vers)); else STRNCPY(vers, " -", sizeof(vers)); META_CONS(" [%*d] %-*s %-4s %-4s %-*s v%-*s %-3s %-5s %-5s", WIDTH_MAX_PLUGINS, pl->index, sizeof(desc)-1, desc, pl->str_status(ST_SHOW), pl->str_action(SA_SHOW), sizeof(file)-1, file, sizeof(vers)-1, vers, pl->str_source(SO_SHOW), pl->str_loadable(SL_SHOW), pl->str_unloadable(SL_SHOW)); if(pl->status == PL_RUNNING) r++; n++; } META_CONS("%d plugins, %d running", n, r); }