/* ToolsMenu - Add tools to the Workbench Tools menu Copyright (C) 2015, 2018 Kim Fastrup Larsen This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either ver- sion 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be use- ful, but WITHOUT ANY WARRANTY; without even the implied war- ranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public Li- cense along with this program. If not, see . The author can be contacted on */ #include #include #include #ifdef USE_PRAGMAS #include #endif #include #include "common.h" char *copy_of(char *s) { char *result; if ((result = AllocVec(strlen(s) + 1, MEMF_PUBLIC)) != NULL) strcpy(result, s); return result; } void for_all(struct List *l, void (*f)(void *)) { struct Node *n, *next; /* This form of iteration allows f() to free nodes */ for (n = l->lh_Head; (next = n->ln_Succ) != NULL; n = next) (*f)(n); } Bool is_in_list(struct List *l, struct Node *node) { struct Node *n; for (n = l->lh_Head; n->ln_Succ != NULL; n = n->ln_Succ) if (n == node) return YES; return NO; } struct Node *node_at(struct List *l, int i) { struct Node *n; for (n = l->lh_Head; n->ln_Succ != NULL; n = n->ln_Succ) { if (i == 0) return n; --i; } return NULL; } int length_of(struct List *l) { struct Node *n; int result = 0; for (n = l->lh_Head; n->ln_Succ != NULL; n = n->ln_Succ) ++result; return result; } void delete_port(struct MsgPort *port) { struct Message *msg; if (port != NULL) { while ((msg = GetMsg(port)) != NULL) ReplyMsg(msg); DeleteMsgPort(port); } }