/**************************************************************************** * * KeySupport.c ---------- Keymacro support routines. * * Author ---------------- Olaf Barthel, MXM * Brabeckstrasse 35 * D-3000 Hannover 71 * * KeyMacro © Copyright 1990 by MXM; Executable program, * documentation and source code are shareware. If you like * this program a small donation will entitle you to receive * updates and new programs from MXM. * ****************************************************************************/ /* AllocRem(): * * Allocate public memory and keep track of its size. */ VOID * AllocRem(LONG ByteSize,LONG Requirements) { LONG *MemoryBlock = NULL; LONG RemSize = ByteSize + sizeof(LONG); if(ByteSize > 0) MemoryBlock = (LONG *)AllocMem(RemSize,Requirements); if(MemoryBlock) *MemoryBlock++ = RemSize; return((VOID *)MemoryBlock); } /* FreeRem(): * * Free a tracked portion of memory. */ VOID * FreeRem(LONG *MemoryBlock) { if(MemoryBlock--) FreeMem(MemoryBlock,*MemoryBlock); return(NULL); } /* SendMacroMsg(scm_Msg,scm_Port): * * Post a cloned macro message to a MsgPort. */ VOID * SendMacroMsg(struct MacroMessage *scm_Msg,struct MsgPort *scm_Port) { struct MacroMessage *scm_TempMsg; if(scm_TempMsg = (struct MacroMessage *)AllocRem(sizeof(struct MacroMessage),MEMF_PUBLIC | MEMF_CLEAR)) { CopyMem(scm_Msg,scm_TempMsg,sizeof(struct MacroMessage)); scm_TempMsg -> mm_Message . mn_Node . ln_Name = (char *)scm_TempMsg; scm_TempMsg -> mm_Message . mn_ReplyPort = NULL; scm_TempMsg -> mm_Message . mn_Length = sizeof(struct MacroMessage); PutMsg(scm_Port,(struct Message *)scm_TempMsg); } return((VOID *)scm_TempMsg); }