|
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 u
Length: 10955 (0x2acb) Types: TextFile Names: »utilities.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/utilities.c«
/* * $Source: /u1/Xr/src/Xrlib/Intrinsic/RCS/utilities.c,v $ * $Header: utilities.c,v 1.1 86/12/17 09:09:46 swick Exp $ */ #ifndef lint static char *rcsid_utilities_c = "$Header: utilities.c,v 1.1 86/12/17 09:09:46 swick Exp $"; #endif lint #include <Xr/xr-copyright.h> /* $Header: utilities.c,v 1.1 86/12/17 09:09:46 swick Exp $ */ /* Copyright 1986, Hewlett-Packard Company */ /* Copyright 1986, Massachussetts Institute of Technology */ static char rcsid[] = "$Header: utilities.c,v 1.1 86/12/17 09:09:46 swick Exp $"; /*************************************<+>************************************* ***************************************************************************** ** ** File: utilities.c ** ** Project: X-ray Toolbox ** ** Description: This file contains a set of utility routines needed ** by both X-ray and applications. ** ** ** ------------------------ MODIFICATION RECORD ------------------------ * * $Log: utilities.c,v $ * Revision 1.1 86/12/17 09:09:46 swick * Initial revision * * Revision 7.0 86/11/13 08:22:05 08:22:05 rick () * Final QA release * * Revision 6.0 86/11/10 15:23:05 15:23:05 rick () * QA #2 release * * Revision 5.4 86/11/10 14:56:56 14:56:56 rick () * Added an internal memcpy routine. * * Revision 5.3 86/11/07 14:02:47 14:02:47 rick () * Added the copyright message. * * Revision 5.2 86/11/07 11:11:41 11:11:41 rick () * Changed the version string to 6.0. * * Revision 5.1 86/11/03 13:14:19 13:14:19 rick () * Added the XrVersion function. * * Revision 5.0 86/10/28 08:23:45 08:23:45 rick () * QA #1.1 release * * Revision 4.0 86/10/20 12:09:44 12:09:44 rick () * QA 1 release * * Revision 3.4 86/10/17 12:24:20 12:24:20 rick () * Linted * * Revision 3.3 86/10/16 11:21:24 11:21:24 rick () * Added register variables. * * Revision 3.2 86/10/10 13:14:15 13:14:15 rick () * Changed both GetWindowEvent and MapButton to handle the button modifiers. * * Revision 3.1 86/10/07 09:48:37 09:48:37 rick () * Modified XrMapButton to accept an eventCode to be matched against * the event. TRUE is now returned if a match is found, FALSE otherwise. * * Revision 3.0 86/10/02 15:59:31 15:59:31 rick () * Alpha release set to 3.0 * * Revision 2.0 86/09/16 08:04:22 08:04:22 rick () * Added the XrMapButton and XrGetWindowEvent functions. * * Revision 1.1 86/09/03 13:35:22 13:35:22 rick () * Initial revision * * ***************************************************************************** *************************************<+>*************************************/ #include <X/Xlib.h> #include <Xr/defs.h> #include <Xr/types.h> \f /*************************************<->************************************* * * XrStringWidth (fontInfo, str, charWidth, charPad, spacePad) * FontInfo * fontInfo; * STRING8 str; * INT32 charWidth; * INT32 charPad; * INT32 spacePad; * * * Description: * ----------- * XrStringWidth() calculates the width, in pixels, of a string * and returns the length as a return value for the function. * * * Inputs: * ------ * fontInfo - Contains a pointer to the X FontInfo structure * used in the width calculation. * * str - A pointer to the string. * * charWidth - The width of the string in characters or * XrNULLTERMINATED. * * charPad - The amount of extra space (pixels) to be added * to each character in the string. * * spacePad - The amount of extra space (pixels) to be added * to each space character in the string. * * * * Outputs: * ------- * The width of the string (in pixels) is returned as the value * of the function. * * * Procedures Called * ----------------- * XStringWidth() - Xlib * * *************************************<->***********************************/ XrStringWidth (fontInfo, str, charWidth, charPad, spacePad) FontInfo * fontInfo; STRING8 str; INT32 charWidth; INT32 charPad; INT32 spacePad; { INT8 saveChar; STRING8 inputString; INT32 pixelWidth; saveChar = NULL; inputString = str; if (charWidth != XrNULLTERMINATED) { saveChar = *(inputString + charWidth); *(inputString + charWidth) = NULL; } pixelWidth = XStringWidth (inputString, fontInfo, charPad, spacePad); if (saveChar != NULL) *(inputString + charWidth) = saveChar; return (pixelWidth); } \f /*************************************<->************************************* * * XrMapButton (event) * XButtonEvent * event; * * * Description: * ----------- * The function checks the input event and returns a code telling * if it is an X-ray Select or Menu press or release. * * * Inputs: * ------ * event = Contains the button event to be checked. * eventCode = Contains one of the defines XrSELECT, XrSELECTUP, * XrMENUPOST, or XrMENUITEMSELECT. * * * Outputs: * ------- * FALSE = returned if the event is not a ButtonPressed, * ButtonReleased or the requested event. * * TRUE = returned if the event is the requested event. * * * Procedures Called * ----------------- * None. * *************************************<->***********************************/ INT8 XrMapButton (eventCode, event) register INT8 eventCode; register XButtonEvent * event; { register INT8 type; register UINT16 modifier; /* * First calculate which type of event it was and set the * variable type appropriately. */ if (event -> type & ButtonPressed) { if ((event -> detail & 0x00FF) == LeftButton) { type = XrLEFTBUTTONDOWN; modifier = xrLBDMod; } else if ((event -> detail & 0x00FF) == RightButton) { type = XrRIGHTBUTTONDOWN; modifier = xrRBDMod; } else { type = XrMIDDLEBUTTONDOWN; modifier = xrMBDMod; } } else if (event -> type & ButtonReleased) { if ((event -> detail & 0x00FF) == LeftButton) { type = XrLEFTBUTTONUP; modifier = xrLBUMod; } else if ((event -> detail & 0x00FF) == RightButton) { type = XrRIGHTBUTTONUP; modifier = xrRBUMod; } else { type = XrMIDDLEBUTTONUP; modifier = xrMBUMod; } } else { xrErrno = XrINVALIDPARM; return (FALSE); } /* * Check the detail with the modifier to see if there is a * match. */ if (modifier == 0) { if ((event -> detail & (ControlMask|MetaMask|ShiftMask)) != 0) return (FALSE); } else if (!(modifier & (event->detail & (ControlMask|MetaMask|ShiftMask)))) return (FALSE); /* * Compare the variable type with all of the default button * conditions and return the one that matches. */ if (type == xrSelect && eventCode == XrSELECT) return (TRUE); if (type == xrSelectUp && eventCode == XrSELECTUP) return (TRUE); if (type == xrMenuPost && eventCode == XrMENUPOST) return (TRUE); if (type == xrMenuItemSelect && eventCode == XrMENUITEMSELECT) return (TRUE); return (FALSE); } \f /*************************************<->************************************* * * XrGetWindowEvent (eventCode, windowEvent) * INT8 eventCode; * xrWindowEvent * windowEvent; * * * Description: * ----------- * This function takes an event code of XrSELECT, XrSELECTUP, XrMENUPOST * or XrMENUITEMSELECT and fills out the windowEvent structure so that it * can be used to add into a window as an event to invoke a function. * * * Inputs: * ------ * eventCode = Contains the code used to generate the window event. * It must be set to XrSELECT, XrSELECTUP, XrMENUPOST, * or XrMENUITEMSELECT or the function will fail. * * * Outputs: * ------- * windowEvent = Will contain the information necessary for the * code. * * * Procedures Called * ----------------- * None. * * *************************************<->***********************************/ XrGetWindowEvent (eventCode, windowEvent) register INT8 eventCode; register xrWindowEvent * windowEvent; { register INT8 type; /* * Generate a type variable which contains the condition * for the event code. */ if (eventCode == XrSELECT) type = xrSelect; else if (eventCode == XrSELECTUP) type = xrSelectUp; else if (eventCode == XrMENUPOST) type = xrMenuPost; else if (eventCode == XrMENUITEMSELECT) type = xrMenuItemSelect; else { xrErrno = XrINVALIDPARM; return (FALSE); } /* * Set up a switch for the code type to build a window event * for each of the possibilities. */ switch (type) { case XrLEFTBUTTONDOWN: windowEvent -> inputType = ButtonPressed; windowEvent -> inputCode = LeftButton | xrLBDMod; break; case XrLEFTBUTTONUP: windowEvent -> inputType = ButtonReleased; windowEvent -> inputCode = LeftButton | xrLBUMod; break; case XrRIGHTBUTTONDOWN: windowEvent -> inputType = ButtonPressed; windowEvent -> inputCode = RightButton | xrRBDMod; break; case XrRIGHTBUTTONUP: windowEvent -> inputType = ButtonReleased; windowEvent -> inputCode = RightButton | xrRBUMod; break; case XrMIDDLEBUTTONDOWN: windowEvent -> inputType = ButtonPressed; windowEvent -> inputCode = MiddleButton | xrMBDMod; break; case XrMIDDLEBUTTONUP: windowEvent -> inputType = ButtonReleased; windowEvent -> inputCode = MiddleButton | xrMBUMod; break; } return (TRUE); } \f /*************************************<->************************************* * * INT8 * * XrVersion() * * * Description: * ----------- * This function returns the version of the X-ray library being used. * * * Outputs: * ------- * The returned value will be a pointer to a static string containing * the version information. * * * Procedures Called * ----------------- * None. * * *************************************<->***********************************/ INT8 * XrVersion () { static INT8 version[] = "X-ray Version 10 - 07.00"; return ((INT8 *) version); } _Xrmemcpy (dstPtr, srcPtr, count) register INT8 * dstPtr; register INT8 * srcPtr; INT32 count; { register INT8 * endPtr; endPtr = srcPtr + count; while(srcPtr != endPtr) *dstPtr++ = *srcPtr++; }