home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga MA Magazine 1998 #6
/
amigamamagazinepolishissue1998.iso
/
varia
/
toolmanager
/
source
/
converter
/
misc.c
< prev
next >
Wrap
C/C++ Source or Header
|
1977-12-31
|
3KB
|
118 lines
/*
* misc.c V3.0
*
* ToolManager preferences file converter misc. routines
*
* Copyright (C) 1990-97 Stefan Becker
*
* This source code is for educational purposes only. You may study it
* and copy ideas or algorithms from it for your own projects. It is
* not allowed to use any of the source codes (in full or in parts)
* in other programs. Especially it is not allowed to create variants
* of ToolManager or ToolManager-like programs from this source code.
*
*/
#include "converter.h"
/* Local data structures */
struct IDListEntry {
struct Node ile_Node;
ULONG ile_ID;
};
/* Convert one string config parameter and return pointer to next string */
#define DEBUGFUNCTION ConvertConfigString
char *ConvertConfigString(char *buf, struct IFFHandle *iffh, ULONG id)
{
ULONG len = strlen(buf) + 1;
MISC_LOG(LOG3(Entry, "Chunk 0x%08lx String '%s' (0x%08lx)", id, buf, buf))
/* Push, write and pop chunk */
return(((PushChunk(iffh, 0, id, len) == 0) &&
(WriteChunkBytes(iffh, buf, len) == len) &&
(PopChunk(iffh) == 0)) ? (buf + len) : NULL);
}
/* Add on entry to the ID list */
#undef DEBUGFUNCTION
#define DEBUGFUNCTION AddToIDList
BOOL AddIDToList(struct MinList *l, const char *name, ULONG id)
{
ULONG len = sizeof(struct IDListEntry) + strlen(name) + 1;
struct IDListEntry *ile;
MISC_LOG(LOG4(Entry, "List 0x%08lx Name '%s' (0x%08lx) ID 0x%08lx",
l, name, name, id))
/* Allocate ID list entry */
if (ile = GetVector(len)) {
MISC_LOG(LOG2(Allocated, "Entry 0x%08lx Length %ld", ile, len))
/* Initialize list entry */
ile->ile_Node.ln_Name = (char *) (ile + 1);
ile->ile_ID = id;
/* Copy name */
strcpy(ile->ile_Node.ln_Name, name);
/* Add entry to list */
AddTail((struct List *) l, (struct Node *) ile);
}
return(ile != NULL);
}
/* Find ID in list */
#undef DEBUGFUNCTION
#define DEBUGFUNCTION FindIDInList
ULONG FindIDInList(struct MinList *l, const char *name)
{
ULONG rc = 0;
struct IDListEntry *ile = (struct IDListEntry *) GetHead(l);
MISC_LOG(LOG3(Entry, "List 0x%08lx Name '%s' (0x%08lx)", l, name, name))
/* Scan list */
for (ile = (struct IDListEntry *) l->mlh_Head;
ile->ile_Node.ln_Succ;
ile = (struct IDListEntry *) ile->ile_Node.ln_Succ)
/* Name found? */
if (strcmp(name, ile->ile_Node.ln_Name) == 0) {
/* Get ID */
rc = ile->ile_ID;
/* Leave loop */
break;
}
MISC_LOG(LOG1(Result, "%ld", rc))
return(rc);
}
#undef DEBUGFUNCTION
#define DEBUGFUNCTION FreeIDList
void FreeIDList(struct MinList *l)
{
struct IDListEntry *ile;
MISC_LOG(LOG1(List, "0x%08lx", l))
/* Scan list */
while (ile = (struct IDListEntry *) RemTail((struct List *) l)) {
MISC_LOG(LOG1(Entry, "0x%08lx", ile))
/* Free entry */
FreeVector(ile);
}
}
/* Include global miscellaneous code */
#include "/global_misc.c"