96 rader
2.1 KiB
C
Executable File
96 rader
2.1 KiB
C
Executable File
/*
|
|
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);
|
|
}
|
|
}
|