ToolsMenu/common.c

96 lines
2.1 KiB
C
Raw Permalink Normal View History

2018-12-03 20:09:59 +00:00
/*
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
<http://www.gnu.org/licenses/>.
The author can be contacted on <kimflarsen@hotmail.com>
*/
#include <exec/lists.h>
#include <exec/memory.h>
#include <clib/exec_protos.h>
#ifdef USE_PRAGMAS
#include <proto/exec.h>
#endif
#include <string.h>
#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);
}
}