home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga MA Magazine 1998 #6
/
amigamamagazinepolishissue1998.iso
/
varia
/
toolmanager
/
source
/
converter
/
exec.c
< prev
next >
Wrap
C/C++ Source or Header
|
1977-12-31
|
4KB
|
114 lines
/*
* exec.c V3.0
*
* ToolManager old preferences converter for Exec Objects
*
* 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 */
static struct MinList IDList;
static struct ExecDATAChunk edc;
/* Old Prefs stuff */
struct ExecPrefsObject {
ULONG epo_StringBits;
ULONG epo_Flags;
ULONG epo_Delay;
ULONG epo_Stack;
UWORD epo_ExecType;
WORD epo_Priority;
};
#define EXPO_NAME (1L << 0)
#define EXPO_COMMAND (1L << 1)
#define EXPO_CURDIR (1L << 2)
#define EXPO_HOTKEY (1L << 3)
#define EXPO_OUTPUT (1L << 4)
#define EXPO_PATH (1L << 5)
#define EXPO_PSCREEN (1L << 6)
#define EXPOF_ARGS (1L << 0)
#define EXPOF_TOFRONT (1L << 1)
/* Initialize Exec ID list */
void InitExecIDList(void)
{
NewList((struct List *) &IDList);
}
/* Free Exec ID list */
void FreeExecIDList(void)
{
FreeIDList(&IDList);
}
/* Find ID to corresponding Exec name */
ULONG FindExecID(const char *name)
{
return(FindIDInList(&IDList, name));
}
/* Conversion routine */
#undef DEBUGFUNCTION
#define DEBUGFUNCTION ConvertExecConfig
BOOL ConvertExecConfig(void *chunk, struct IFFHandle *iffh, ULONG id)
{
struct ExecPrefsObject *epo = chunk;
char *s = (char *) (epo + 1);
BOOL rc = FALSE;
EXEC_LOG(LOG3(Entry, "Chunk 0x%08lx IFF Handle 0x%08lx ID 0x%08lx",
chunk, iffh, id))
/* Get name to create ID list entry */
if ((epo->epo_StringBits & EXPO_NAME) && AddIDToList(&IDList, s, id)) {
/* Copy fixed data */
edc.edc_Standard.sdc_ID = id;
edc.edc_Standard.sdc_Flags = 0;
edc.edc_ExecType = epo->epo_ExecType;
edc.edc_Priority = epo->epo_Priority;
edc.edc_Stack = epo->epo_Stack;
/* Copy flags */
if (epo->epo_Flags & EXPOF_ARGS) edc.edc_Standard.sdc_Flags
= DATA_EXECF_ARGUMENTS;
if (epo->epo_Flags & EXPOF_TOFRONT) edc.edc_Standard.sdc_Flags
|= DATA_EXECF_TOFRONT;
/* Create new config entry */
rc = (PushChunk(iffh, ID_TMEX, ID_FORM, IFFSIZE_UNKNOWN) == 0) &&
(PushChunk(iffh, 0, ID_DATA, IFFSIZE_UNKNOWN) == 0) &&
(WriteChunkBytes(iffh, &edc, sizeof(struct ExecDATAChunk))
== sizeof(struct ExecDATAChunk)) &&
(PopChunk(iffh) == 0) &&
(((epo->epo_StringBits & EXPO_NAME) == 0) ||
(s = ConvertConfigString(s, iffh, ID_NAME))) &&
(((epo->epo_StringBits & EXPO_COMMAND) == 0) ||
(s = ConvertConfigString(s, iffh, ID_CMND))) &&
(((epo->epo_StringBits & EXPO_CURDIR) == 0) ||
(s = ConvertConfigString(s, iffh, ID_CDIR))) &&
(((epo->epo_StringBits & EXPO_HOTKEY) == 0) ||
(s = ConvertConfigString(s, iffh, ID_HKEY))) &&
(((epo->epo_StringBits & EXPO_OUTPUT) == 0) ||
(s = ConvertConfigString(s, iffh, ID_OUTP))) &&
(((epo->epo_StringBits & EXPO_PATH) == 0) ||
(s = ConvertConfigString(s, iffh, ID_PATH))) &&
(((epo->epo_StringBits & EXPO_PSCREEN) == 0) ||
(s = ConvertConfigString(s, iffh, ID_PSCR))) &&
(PopChunk(iffh) == 0) ;
}
EXEC_LOG(LOG1(Result, "%ld", rc))
return(rc);
}