executor/src/ctlMisc.c

216 lines
5.3 KiB
C

/* Copyright 1986, 1988, 1989, 1990, 1995 by Abacus Research and
* Development, Inc. All rights reserved.
*/
#if !defined (OMIT_RCSID_STRINGS)
char ROMlib_rcsid_ctlMisc[] =
"$Id: ctlMisc.c 63 2004-12-24 18:19:43Z ctm $";
#endif
/* Forward declarations in ControlMgr.h (DO NOT DELETE THIS LINE) */
#include "rsys/common.h"
#include "WindowMgr.h"
#include "ControlMgr.h"
#include "EventMgr.h"
#include "MemoryMgr.h"
#include "rsys/cquick.h"
#include "rsys/ctl.h"
#include "rsys/resource.h"
#include "rsys/hook.h"
/* cheat, and make this a plain ctab, so we can use our old accessor
macros */
AuxCtlHandle default_aux_ctl;
#define BLACK_RGB { CWC (0), CWC (0), CWC (0), }
#define WHITE_RGB { CWC (0xFFFF), CWC (0xFFFF), CWC (0xFFFF), }
#define LT_BLUISH_RGB { CWC (0xCCCC), CWC (0xCCCC), CWC (0xFFFF) }
#define DK_BLUISH_RGB { CWC (0x3333), CWC (0x3333), CWC (0x6666) }
#define DK_GRAY { CWC (0x5555), CWC (0x5555), CWC (0x5555) }
const ColorSpec default_ctl_colors[] =
{
{ CWC (cFrameColor), BLACK_RGB },
{ CWC (cBodyColor), WHITE_RGB },
{ CWC (cTextColor), BLACK_RGB },
{ CWC (cThumbColor), WHITE_RGB },
{ CWC (4), DK_GRAY },
{ CWC (cArrowsColorLight), WHITE_RGB },
{ CWC (cArrowsColorDark), BLACK_RGB },
{ CWC (cThumbLight), WHITE_RGB },
{ CWC (cThumbDark), BLACK_RGB },
/* used same as the w... color component */
{ CWC (cHiliteLight), WHITE_RGB },
{ CWC (cHiliteDark), BLACK_RGB },
{ CWC (cTitleBarLight), WHITE_RGB },
{ CWC (cTitleBarDark), BLACK_RGB },
{ CWC (cTingeLight), LT_BLUISH_RGB },
{ CWC (cTingeDark), DK_BLUISH_RGB },
};
#define KEEP_DEFAULT_CTL_CTAB_AROUND_FOR_OLD_SYSTEM_FILE_USERS
#if defined (KEEP_DEFAULT_CTL_CTAB_AROUND_FOR_OLD_SYSTEM_FILE_USERS)
PUBLIC CTabHandle default_ctl_ctab;
#endif
void
ctl_color_init (void)
{
default_aux_ctl = (AuxCtlHandle) NewHandle (sizeof (AuxCtlRec));
#if defined (KEEP_DEFAULT_CTL_CTAB_AROUND_FOR_OLD_SYSTEM_FILE_USERS)
default_ctl_ctab = (CTabHandle) ROMlib_getrestid (TICK ("cctb"), 0);
if (!default_ctl_ctab)
{
default_ctl_ctab
= (CTabHandle) NewHandle (CTAB_STORAGE_FOR_SIZE (14));
CTAB_SIZE_X (default_ctl_ctab) = CWC (14);
CTAB_SEED_X (default_ctl_ctab) = CLC (0);
CTAB_FLAGS_X (default_ctl_ctab) = CWC (0);
memcpy (&CTAB_TABLE (default_ctl_ctab)[0],
&default_ctl_colors[0],
15 * sizeof default_ctl_colors[0]);
}
#endif
HxX (default_aux_ctl, acNext) = CLC_NULL;
HxX (default_aux_ctl, acOwner) = CLC_NULL;
HxX (default_aux_ctl, acCTable) = (CCTabHandle) RM (GetResource (TICK("cctb"), 0));
HxX (default_aux_ctl, acFlags) = CWC (0);
HxX (default_aux_ctl, acReserved) = CLC (0);
HxX (default_aux_ctl, acRefCon) = CLC (0);
}
AuxCtlHandle *
lookup_aux_ctl (ControlHandle ctl)
{
AuxCtlHandle *t;
for (t = &AuxCtlHead;
*t && HxP (MR (*t), acOwner) != ctl;
t = &HxX (MR (*t), acNext))
;
return t;
}
P2(PUBLIC pascal trap, void, SetCRefCon, ControlHandle, c, /* IMI-327 */
LONGINT, data)
{
HxX(c, contrlRfCon) = CL(data);
}
P1(PUBLIC pascal trap, LONGINT, GetCRefCon, ControlHandle, c) /* IMI-327 */
{
return Hx(c, contrlRfCon);
}
P2(PUBLIC pascal trap, void, SetCtlAction, ControlHandle, c, /* IMI-328 */
ProcPtr, a)
{
if ((LONGINT) a != CLC (-1))
HxX(c, contrlAction) = RM(a);
else
HxX(c, contrlAction) = (ProcPtr) CLC (-1);
}
P1(PUBLIC pascal trap, ProcPtr, GetCtlAction, ControlHandle, c) /* IMI-328 */
{
return HxP(c, contrlAction);
}
P1(PUBLIC pascal trap, INTEGER, GetCVariant, ControlHandle, c) /* IMV-222 */
{
AuxCtlHandle h;
for (h = MR(AuxCtlHead) ; h != 0 && HxP(h, acOwner) != c ; h = HxP(h, acNext))
;
return h != 0 ? Hx(h, acFlags) : 0;
}
/* according to IM-MTE; this has been renamed
`GetAuxiliaryControlRecord ()', possibly because of the
inconsistency below, i can only assume they have the same trap word */
P2 (PUBLIC pascal trap, BOOLEAN, GetAuxCtl, ControlHandle, ctl, /* IMV-222 */
HIDDEN_AuxCtlHandle *, aux_ctl)
{
/* according to testing on the Mac+
`GetAuxCtl ()' returns FALSE (not TRUE) and leaves
aux_ctl untouched; this is not the case of later
mac version, such as the color classic v7.1 */
if (! ctl)
{
aux_ctl->p = RM (default_aux_ctl);
return TRUE;
}
else
{
AuxCtlHandle t;
t = *lookup_aux_ctl (ctl);
if (t)
{
aux_ctl->p = t;
return FALSE;
}
else
{
aux_ctl->p = RM (default_aux_ctl);
return TRUE;
}
}
}
int32
ROMlib_ctlcall (ControlHandle c, int16 i, int32 l)
{
Handle defproc;
int32 retval;
ctlfuncp cp;
switch (i)
{
case calcCRgns:
case calcCntlRgn:
case calcThumbRgn:
case thumbCntl:
l = US_TO_SYN68K_CHECK0(l);
break;
default:
break;
}
defproc = CTL_DEFPROC (c);
if (defproc->p == NULL)
LoadResource (defproc);
cp = (ctlfuncp) STARH (defproc);
if (cp == P_cdef0)
retval = C_cdef0 (VAR (c), c, i, l);
else if (cp == P_cdef16)
retval = C_cdef16 (VAR (c), c, i, l);
else if (cp == P_cdef1008)
retval = C_cdef1008 (VAR (c), c, i, l);
else
{
ROMlib_hook (ctl_cdefnumber);
LOCK_HANDLE_EXCURSION_1
(defproc,
{
retval = CToPascalCall ((ctlfuncp) STARH (defproc),
CTOP_cdef0, VAR (c), c, i, l);
});
}
return retval;
}