|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T i
Length: 16332 (0x3fcc)
Types: TextFile
Names: »init.c«
└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki
└─⟦526ad3590⟧ »EUUGD11/gnu-31mar87/X.V10.R4.tar.Z«
└─⟦2109abc41⟧
└─⟦this⟧ »./X.V10R4/Toolkit/Xr/src/Xrlib/Intrinsic/init.c«
/*
* $Source: /u1/Xr/src/Xrlib/Intrinsic/RCS/init.c,v $
* $Header: init.c,v 1.1 86/12/17 09:08:25 swick Exp $
*/
#ifndef lint
static char *rcsid_init_c = "$Header: init.c,v 1.1 86/12/17 09:08:25 swick Exp $";
#endif lint
#include <Xr/xr-copyright.h>
/* $Header: init.c,v 1.1 86/12/17 09:08:25 swick Exp $ */
/* Copyright 1986, Hewlett-Packard Company */
/* Copyright 1986, Massachussetts Institute of Technology */
static char rcsid[] = "$Header: init.c,v 1.1 86/12/17 09:08:25 swick Exp $";
/*************************************<+>*************************************
*****************************************************************************
**
** File: init.c
**
** Project: X-ray Toolbox
**
** Description: init.c contains the X-ray XrInit() which initializes
** X-ray so that its functions can be use by the application.
**
**
** ------------------------ MODIFICATION RECORD ------------------------
*
* $Log: init.c,v $
* Revision 1.1 86/12/17 09:08:25 swick
* Initial revision
*
* Revision 7.0 86/11/13 08:20:00 08:20:00 rick ()
* Final QA release
*
* Revision 6.0 86/11/10 15:21:50 15:21:50 rick ()
* QA #2 release
*
* Revision 5.4 86/11/07 14:01:51 14:01:51 rick ()
* Added the copyright message.
*
* Revision 5.3 86/11/06 12:54:52 12:54:52 rick ()
* Fixed the resource id setting for the bitmaps.
*
* Revision 5.2 86/10/30 13:25:27 13:25:27 rick ()
* *** empty log message ***
*
* Revision 5.1 86/10/30 09:08:27 09:08:27 rick ()
* Changed XrInit to disallow it from being called more than once.
*
* Revision 5.0 86/10/28 08:22:38 08:22:38 rick ()
* QA #1.1 release
*
* Revision 4.2 86/10/27 13:33:12 13:33:12 rick ()
* Changed the call to XrInputInit().
*
* Revision 4.1 86/10/26 16:13:33 16:13:33 rick ()
* Added the initialization for the cursor in the default panel context.
*
* Revision 4.0 86/10/20 12:08:40 12:08:40 rick ()
* QA 1 release
*
* Revision 3.11 86/10/17 12:23:24 12:23:24 rick ()
* Linted
*
* Revision 3.10 86/10/16 11:20:34 11:20:34 rick ()
* Added register variables.
*
* Revision 3.9 86/10/15 14:06:19 14:06:19 rick ()
* Removed the menu meta default.
*
* Revision 3.8 86/10/13 13:55:26 13:55:26 rick ()
* Added the input initialization call.
*
* Revision 3.7 86/10/10 13:12:33 13:12:33 rick ()
* Added the button modifier defaults.
*
* Revision 3.6 86/10/09 10:15:00 10:15:00 rick ()
* Added the window foreground, background, and border defaults.
*
* Revision 3.5 86/10/09 07:34:58 07:34:58 fred ()
* Every change adds 2 bugs. Fixed the foreground and
* background color defaults.
*
* Revision 3.4 86/10/08 15:09:18 15:09:18 rick ()
* Added the foreground and background color defaults.
*
* Revision 3.3 86/10/08 13:21:21 13:21:21 rick ()
* Finished the X defaults work.
*
* Revision 3.2 86/10/08 09:35:50 09:35:50 rick ()
* Added all of the panel context and menu X defaults.
*
* Revision 3.1 86/10/07 09:53:14 09:53:14 rick ()
* Fixed the defaults setting for the mouse buttons.
*
* Revision 3.0 86/10/02 15:58:38 15:58:38 rick ()
* Alpha release set to 3.0
*
* Revision 2.2 86/09/29 09:42:23 09:42:23 rick ()
* Added the initialization for the menu cursor.
*
* Revision 2.1 86/09/25 10:54:30 10:54:30 rick ()
* Added the color settings and tile creation for menus.
* Removed the .onx from the XOpenFont.
*
* Revision 2.0 86/09/16 08:00:07 08:00:07 rick ()
* Added the initialization of the select and menu buttons from X defaults.
*
* Revision 1.1 86/09/03 13:35:11 13:35:11 rick ()
* Initial revision
*
*
*****************************************************************************
*************************************<+>*************************************/
#include <X/Xlib.h>
#include <Xr/defs.h>
#include <Xr/types.h>
/*
* Is this the first call to init?
*/
static int firstInit = TRUE;
/*
* Define the comparison strings to be used for setting the
* defaults for select and menu buttons.
*/
static char * buttonStrings[] =
{
"LeftButtonDown",
"LeftButtonUp",
"MiddleButtonDown",
"MiddleButtonUp",
"RightButtonDown",
"RightButtonUp"
};
\f
/*************************************<->*************************************
*
* XrInit (allocFuncts)
* xrAllocFuncts * allocFuncts;
*
*
* Description:
* -----------
* The XrInit() routine sets up X-ray for use by an application by
* initializing internal data and added a set of resources that the
* X-ray routines need.
*
*
* Inputs:
* ------
* allocFuncts = This parameter contains a pointer to an xrAllocFuncts
* structure which contains a set of allocation functions
* to be used within X-ray in place of the normal UNIX
* functions.
*
*
* Outputs:
* -------
* TRUE = Returned as the value of the function if the function
* succeeds.
*
* FALSE = Returned as the value fo the function if the function
* fails.
*
*
* Procedures Called
* -----------------
* XOpenFont Xlib routine
* XStoreBitmap Xlib routine
* XGetDefault Xlib routine
* XrInput input.c
* _XrGetColor internal in init.c
* _XrGetModifier internal in inti.c
*
*
*************************************<->***********************************/
XrInit (allocFuncts)
xrAllocFuncts * allocFuncts;
{
register INT32 i;
register xrBitmapId * bitmapId;
register INT8 * string;
register INT32 color;
xrResourceInfo resourceInfo;
xrFDInput inputSource;
xrPixmap * pixmap;
INT32 cursorFGColor;
INT32 cursorBGColor;
/*
* Check to make sure that the routine is not being
* called a second time.
*/
if (firstInit == FALSE)
{
xrErrno = XrINVALIDPARM;
return (FALSE);
}
firstInit = FALSE;
/*
* Initialize the input mapping.
*/
XrInputInit();
/*
* Initialize the set of bitmaps and bitmap ids by
* allocating a structure to hold them and then
* installing them into the resource manager.
*/
resourceInfo.resourceState = 0;
for (i = 1; i < 10; i++)
{
bitmapId = (xrBitmapId *) (*xrMalloc) (sizeof (xrBitmapId));
pixmap = (xrPixmap *) (*xrMalloc) (sizeof (xrPixmap));
bitmapId -> width = pixmap -> width = 16;
bitmapId -> height = pixmap -> height = 16;
bitmapId -> bitmapId = XStoreBitmap (16, 16, xr_bitmaps[i - 1]);
pixmap -> depth = XrBIT1;
pixmap -> raster = xr_bitmaps[i];
resourceInfo.resourceId = -i;
resourceInfo.resourceObject = (INT8 *) pixmap;
resourceInfo.resourceType = XrTYPE_BITMAP;
if (XrResource (MSG_ADD, &resourceInfo) == FALSE)
return (FALSE);
resourceInfo.resourceObject = (INT8 *) bitmapId;
resourceInfo.resourceType = XrTYPE_BITMAPID;
if (XrResource (MSG_ADD, &resourceInfo) == FALSE)
return (FALSE);
}
/*
* Set up the button defaults.
*/
xrSelect = XrLEFTBUTTONDOWN;
if ((string = XGetDefault ("X-ray", "Select")) != NULL)
for (i = 0; i < 6; i++)
if (strcmp (string, buttonStrings[i]) == 0)
{
xrSelect = i;
break;
}
xrSelectUp = XrLEFTBUTTONUP;
if ((string = XGetDefault ("X-ray", "SelectUp")) != NULL)
for (i = 0; i < 6; i++)
if (strcmp (string, buttonStrings[i]) == 0)
{
xrSelectUp = i;
break;
}
xrMenuPost = XrRIGHTBUTTONDOWN;
if ((string = XGetDefault ("X-ray", "MenuPost")) != NULL)
for (i = 0; i < 6; i++)
if (strcmp (string, buttonStrings[i]) == 0)
{
xrMenuPost = i;
break;
}
xrMenuItemSelect = XrRIGHTBUTTONUP;
if ((string = XGetDefault ("X-ray", "MenuItemSelect")) != NULL)
for (i = 0; i < 6; i++)
if (strcmp (string, buttonStrings[i]) == 0)
{
xrMenuItemSelect = i;
break;
}
/*
* Get all of the button modifiers.
*/
xrLBDMod = xrLBUMod = xrMBDMod = xrMBUMod = xrRBDMod = xrRBUMod = 0;
if ((string = XGetDefault ("X-ray", "AllButtonModifier")) != NULL)
xrLBDMod = xrLBUMod = xrMBDMod =
xrMBUMod = xrRBDMod = xrRBUMod = _XrGetModifier (string);
else
{
if ((string = XGetDefault("X-ray","LeftButtonDownModifier")) != NULL)
xrLBDMod = _XrGetModifier (string);
if ((string = XGetDefault("X-ray","LeftButtonUpModifier")) != NULL)
xrLBUMod = _XrGetModifier (string);
if ((string=XGetDefault("X-ray","RightButtonDownModifier")) != NULL)
xrRBDMod = _XrGetModifier (string);
if ((string=XGetDefault("X-ray","RightButtonUpModifier")) != NULL)
xrRBUMod = _XrGetModifier (string);
if ((string=XGetDefault("X-ray","MiddleButtonDownModifier")) != NULL)
xrMBDMod = _XrGetModifier (string);
if ((string=XGetDefault("X-ray","MiddleButtonUpModifier")) != NULL)
xrMBUMod = _XrGetModifier (string);
}
/*
* Get the window foreground, background and border defaults.
*/
xrWindowForeground = BlackPixmap;
xrPanelContextDefaults.winForeground = BlackPixmap;
if ((string = XGetDefault ("X-ray", "WindowForeground")) != NULL)
if ((color = _XrGetColor (string)) != -1)
{
xrWindowForeground = XMakeTile (color);
xrPanelContextDefaults.winForeground = xrWindowForeground;
}
xrPanelContextDefaults.winBackground = WhitePixmap;
xrWindowBackground = WhitePixmap;
if ((string = XGetDefault ("X-ray", "WindowBackground")) != NULL)
if ((color = _XrGetColor (string)) != -1)
{
xrWindowBackground = XMakeTile (color);
xrPanelContextDefaults.winBackground = xrWindowBackground;
}
xrBorderWidth = xrPanelContextDefaults.borderWidth = 1;
string = XGetDefault ("X-ray", "BorderWidth");
if (string != NULL && *string >= '0' && *string <= '9')
{
xrBorderWidth = atoi (string);
xrPanelContextDefaults.borderWidth = xrBorderWidth;
}
/*
* Get the default foreground and background color.
*/
xrForegroundColor = xrPanelContextDefaults.foregroundColor = BlackPixel;
if ((string = XGetDefault ("X-ray", "ForegroundColor")) != NULL)
if ((color = _XrGetColor (string)) != -1)
{
xrPanelContextDefaults.foregroundColor = color;
xrForegroundColor = color;
}
xrBackgroundColor = xrPanelContextDefaults.backgroundColor = WhitePixel;
if ((string = XGetDefault ("X-ray", "BackgroundColor")) != NULL)
if ((color = _XrGetColor (string)) != -1)
{
xrPanelContextDefaults.backgroundColor = color;
xrBackgroundColor = color;
}
/*
* Get the default font.
*/
if ((string = XGetDefault ("X-ray", "DefaultFont")) != NULL)
{
if ((xrBaseFontInfo = XOpenFont (string)) == NULL)
{
xrErrno = XrXCALLFAILED;
return (FALSE);
}
}
else
{
if ((xrBaseFontInfo = XOpenFont ("helv10b")) == NULL)
{
xrErrno = XrXCALLFAILED;
return (FALSE);
}
}
xrPanelContextDefaults.fontInfo = xrBaseFontInfo;
/*
* Initialize the rest of the default panel context members.
*/
xrPanelContextDefaults.showFlag = TRUE;
xrPanelContextDefaults.currentEditor = NULL;
xrPanelContextDefaults.timer = -1;
xrPanelContextDefaults.initFunct = NULL;
/*
* Get the menu sticky default.
*/
xrMenuSticky = TRUE;
if ((string = XGetDefault ("X-ray", "MenuSticky")) != NULL)
if (strcmp (string, "On") == 0)
xrMenuSticky = TRUE;
else
xrMenuSticky = FALSE;
/*
* Make a default pixmap for use by the editors when they
* are using the default colors.
*/
resourceInfo.resourceType = XrTYPE_BITMAPID;
resourceInfo.resourceId = XrPERCENT50;
XrResource (MSG_FIND, &resourceInfo);
xrDefaultTile =
XMakePixmap (((xrBitmapId *)resourceInfo.resourceObject) -> bitmapId,
xrForegroundColor, xrBackgroundColor);
/*
* Get the color wanted for the default cursor.
*/
cursorFGColor = BlackPixel;
if ((string = XGetDefault ("X-ray", "CursorForeground")) != NULL)
if ((cursorFGColor = _XrGetColor (string)) == -1)
cursorFGColor = BlackPixel;
cursorBGColor = WhitePixel;
if ((string = XGetDefault ("X-ray", "CursorBackground")) != NULL)
if ((cursorBGColor = _XrGetColor (string)) == -1)
cursorBGColor = WhitePixel;
/*
* Set up the cursor.
*/
xrDefaultCursor = xrPanelContextDefaults.cursor =
XStoreCursor (XStoreBitmap (16, 16, xrCursorImage),
XStoreBitmap (16, 16, xrCursorMask),
1, 1, cursorFGColor, cursorBGColor, GXcopy);
/*
* Initialize the allocation functions.
*/
if (allocFuncts != NULL)
{
if (allocFuncts -> newMalloc == NULL ||
allocFuncts -> newFree == NULL ||
allocFuncts -> newRealloc == NULL ||
allocFuncts -> newCalloc == NULL)
;
else
{
xrMalloc = allocFuncts -> newMalloc;
xrFree = allocFuncts -> newFree;
xrRealloc = allocFuncts -> newRealloc;
xrCalloc = allocFuncts -> newCalloc;
}
}
/*
* Initialize the input routine.
*/
inputSource.type = XrREAD;
inputSource.fd = dpyno();
if (XrInput (NULL, MSG_ADDINPUT, &inputSource) == FALSE)
return (FALSE);
/*
* Initialize the graphics context base font info.
*/
xr_GCList[0][XrFONTVAL] = xrBaseFontInfo -> id;
return (TRUE);
}
\f
/*************************************<->*************************************
*
* _XrGetColor (string)
* INT8 * string;
*
*
* Description:
* ------------
* _XrGetColor takes an input string and generates a color which
* matches the string.
*
*
* Inputs:
* -------
* string = The string which contains the "name" of the color
* to be generated.
*
*
* Outputs:
* --------
* pixel = The pixel value is returned if the routine
* is successful.
* -1 = returned if the routine fails.
*
*
* Procedures Called
* -----------------
* XParseColor - Xlib
* XGetHardwareColor - Xlib
*
*************************************<->*************************************/
static
_XrGetColor (string)
INT8 * string;
{
Color color;
if (strcmp (string, "black") == 0)
return (BlackPixel);
if (strcmp (string, "white") == 0)
return (WhitePixel);
if (XParseColor (string, &color) == 0)
return (-1);
if (XGetHardwareColor (&color) == 0)
return (-1);
return (color.pixel);
}
\f
/*************************************<->*************************************
*
* _XrGetModifier (string)
* INT8 * string;
*
*
* Description:
* ------------
* _XrGetModifier takes an input string and generates an unsigned
* 16 bit quantity to be used as a button modifier. The value
* will contain the mask necessary for the button pressed or
* released to be modified by either a control, shift, or meta
* key press.
*
*
* Inputs:
* -------
* string = The string which contains the "name" of the modifier
* to be generated.
*
*
* Outputs:
* --------
* modifier = The 16 bit value is returned if the routine
* is successful.
* 0 = returned if the routine fails or the string
* contains the modifier None.
*
*
* Procedures Called
* -----------------
* strcmp()
*
*************************************<->*************************************/
static
_XrGetModifier (string)
INT8 * string;
{
if (strcmp (string, "Control") == 0)
return (ControlMask);
else if (strcmp (string, "Meta") == 0)
return (MetaMask);
else if (strcmp (string, "Shift") == 0)
return (ShiftMask);
else
return (0x0000);
}