diff options
author | marha <marha@users.sourceforge.net> | 2012-11-19 10:16:38 +0100 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2012-11-19 10:16:38 +0100 |
commit | 3744281b9ae8aa0ab86ceaee1afe8a603e3aeb2c (patch) | |
tree | f59b9749730728729691a8a1efd54dce95f0177c /libX11/src/GetHints.c | |
parent | 8d57b7fcb22cf1a52203ee57c745b64bba649249 (diff) | |
download | vcxsrv-3744281b9ae8aa0ab86ceaee1afe8a603e3aeb2c.tar.gz vcxsrv-3744281b9ae8aa0ab86ceaee1afe8a603e3aeb2c.tar.bz2 vcxsrv-3744281b9ae8aa0ab86ceaee1afe8a603e3aeb2c.zip |
dos -> unix
Diffstat (limited to 'libX11/src/GetHints.c')
-rw-r--r-- | libX11/src/GetHints.c | 678 |
1 files changed, 339 insertions, 339 deletions
diff --git a/libX11/src/GetHints.c b/libX11/src/GetHints.c index 681ed1baa..4800fe793 100644 --- a/libX11/src/GetHints.c +++ b/libX11/src/GetHints.c @@ -1,339 +1,339 @@ -
-/***********************************************************
-
-Copyright 1987, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-
-Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
-
- All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in
-supporting documentation, and that the name of Digital not be
-used in advertising or publicity pertaining to distribution of the
-software without specific, written prior permission.
-
-DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
-ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
-DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
-ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-
-******************************************************************/
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include <X11/Xlibint.h>
-#include <X11/Xos.h>
-#include <X11/Xutil.h>
-#include "Xatomtype.h"
-#include <X11/Xatom.h>
-#include <stdio.h>
-
-Status XGetSizeHints (
- Display *dpy,
- Window w,
- XSizeHints *hints,
- Atom property)
-{
- xPropSizeHints *prop = NULL;
- Atom actual_type;
- int actual_format;
- unsigned long leftover;
- unsigned long nitems;
- if (XGetWindowProperty(dpy, w, property, 0L,
- (long) OldNumPropSizeElements,
- False, XA_WM_SIZE_HINTS, &actual_type, &actual_format,
- &nitems, &leftover, (unsigned char **)&prop)
- != Success) return (0);
-
- if ((actual_type != XA_WM_SIZE_HINTS) ||
- (nitems < OldNumPropSizeElements) || (actual_format != 32)) {
- if (prop != NULL) Xfree ((char *)prop);
- return(0);
- }
- hints->flags = (prop->flags & (USPosition|USSize|PAllHints));
- hints->x = cvtINT32toInt (prop->x);
- hints->y = cvtINT32toInt (prop->y);
- hints->width = cvtINT32toInt (prop->width);
- hints->height = cvtINT32toInt (prop->height);
- hints->min_width = cvtINT32toInt (prop->minWidth);
- hints->min_height = cvtINT32toInt (prop->minHeight);
- hints->max_width = cvtINT32toInt (prop->maxWidth);
- hints->max_height = cvtINT32toInt (prop->maxHeight);
- hints->width_inc = cvtINT32toInt (prop->widthInc);
- hints->height_inc = cvtINT32toInt (prop->heightInc);
- hints->min_aspect.x = cvtINT32toInt (prop->minAspectX);
- hints->min_aspect.y = cvtINT32toInt (prop->minAspectY);
- hints->max_aspect.x = cvtINT32toInt (prop->maxAspectX);
- hints->max_aspect.y = cvtINT32toInt (prop->maxAspectY);
- Xfree((char *)prop);
- return(1);
-}
-
-/*
- * must return a pointer to the hint, in malloc'd memory, or routine is not
- * extensible; any use of the caller's memory would cause things to be stepped
- * on.
- */
-
-XWMHints *XGetWMHints (
- Display *dpy,
- Window w)
-{
- xPropWMHints *prop = NULL;
- register XWMHints *hints;
- Atom actual_type;
- int actual_format;
- unsigned long leftover;
- unsigned long nitems;
- if (XGetWindowProperty(dpy, w, XA_WM_HINTS,
- 0L, (long)NumPropWMHintsElements,
- False, XA_WM_HINTS, &actual_type, &actual_format,
- &nitems, &leftover, (unsigned char **)&prop)
- != Success) return (NULL);
-
- /* If the property is undefined on the window, return null pointer. */
- /* pre-R3 bogusly truncated window_group, don't fail on them */
-
- if ((actual_type != XA_WM_HINTS) ||
- (nitems < (NumPropWMHintsElements - 1)) || (actual_format != 32)) {
- if (prop != NULL) Xfree ((char *)prop);
- return(NULL);
- }
- /* static copies not allowed in library, due to reentrancy constraint*/
- if ((hints = (XWMHints *) Xcalloc (1, (unsigned) sizeof(XWMHints)))) {
- hints->flags = prop->flags;
- hints->input = (prop->input ? True : False);
- hints->initial_state = cvtINT32toInt (prop->initialState);
- hints->icon_pixmap = prop->iconPixmap;
- hints->icon_window = prop->iconWindow;
- hints->icon_x = cvtINT32toInt (prop->iconX);
- hints->icon_y = cvtINT32toInt (prop->iconY);
- hints->icon_mask = prop->iconMask;
- if (nitems >= NumPropWMHintsElements)
- hints->window_group = prop->windowGroup;
- else
- hints->window_group = 0;
- }
- Xfree ((char *)prop);
- return(hints);
-}
-
-Status
-XGetZoomHints (
- Display *dpy,
- Window w,
- XSizeHints *zhints)
-{
- return (XGetSizeHints(dpy, w, zhints, XA_WM_ZOOM_HINTS));
-}
-
-Status
-XGetNormalHints (
- Display *dpy,
- Window w,
- XSizeHints *hints)
-{
- return (XGetSizeHints(dpy, w, hints, XA_WM_NORMAL_HINTS));
-}
-
-
-/*
- * XGetIconSizes reads the property
- * ICONSIZE_ATOM type: ICONSIZE_ATOM format: 32
- */
-
-Status XGetIconSizes (
- Display *dpy,
- Window w, /* typically, root */
- XIconSize **size_list, /* RETURN */
- int *count) /* RETURN number of items on the list */
-{
- xPropIconSize *prop = NULL;
- register xPropIconSize *pp;
- register XIconSize *hp, *hints;
- Atom actual_type;
- int actual_format;
- unsigned long leftover;
- unsigned long nitems;
- register int i;
-
- if (XGetWindowProperty(dpy, w, XA_WM_ICON_SIZE, 0L, 60L,
- False, XA_WM_ICON_SIZE, &actual_type, &actual_format,
- &nitems, &leftover, (unsigned char **)&prop)
- != Success) return (0);
-
- pp = prop;
-
- if ((actual_type != XA_WM_ICON_SIZE) ||
- (nitems < NumPropIconSizeElements) ||
- (nitems % NumPropIconSizeElements != 0) ||
- (actual_format != 32)) {
- if (prop != NULL) Xfree ((char *)prop);
- return(0);
- }
-
- /* static copies not allowed in library, due to reentrancy constraint*/
-
- nitems /= NumPropIconSizeElements;
- if (! (hp = hints = (XIconSize *)
- Xcalloc ((unsigned) nitems, (unsigned) sizeof(XIconSize)))) {
- if (prop) Xfree ((char *) prop);
- return 0;
- }
-
- /* march down array putting things into native form */
- for (i = 0; i < nitems; i++) {
- hp->min_width = cvtINT32toInt (pp->minWidth);
- hp->min_height = cvtINT32toInt (pp->minHeight);
- hp->max_width = cvtINT32toInt (pp->maxWidth);
- hp->max_height = cvtINT32toInt (pp->maxHeight);
- hp->width_inc = cvtINT32toInt (pp->widthInc);
- hp->height_inc = cvtINT32toInt (pp->heightInc);
- hp += 1;
- pp += 1;
- }
- *count = nitems;
- *size_list = hints;
- Xfree ((char *)prop);
- return(1);
-}
-
-
-Status XGetCommand (
- Display *dpy,
- Window w,
- char ***argvp,
- int *argcp)
-{
- XTextProperty tp;
- int argc;
- char **argv;
-
- if (!XGetTextProperty (dpy, w, &tp, XA_WM_COMMAND)) return 0;
-
- if (tp.encoding != XA_STRING || tp.format != 8) {
- if (tp.value) Xfree ((char *) tp.value);
- return 0;
- }
-
-
- /*
- * ignore final <NUL> if present since UNIX WM_COMMAND is nul-terminated
- */
- if (tp.nitems && (tp.value[tp.nitems - 1] == '\0')) tp.nitems--;
-
-
- /*
- * create a string list and return if successful
- */
- if (!XTextPropertyToStringList (&tp, &argv, &argc)) {
- if (tp.value) Xfree ((char *) tp.value);
- return (0);
- }
-
- if (tp.value) Xfree ((char *) tp.value);
- *argvp = argv;
- *argcp = argc;
- return 1;
-}
-
-
-Status
-XGetTransientForHint(
- Display *dpy,
- Window w,
- Window *propWindow)
-{
- Atom actual_type;
- int actual_format;
- unsigned long nitems;
- unsigned long leftover;
- Window *data = NULL;
- if (XGetWindowProperty(dpy, w, XA_WM_TRANSIENT_FOR, 0L, 1L, False,
- XA_WINDOW,
- &actual_type,
- &actual_format, &nitems, &leftover, (unsigned char **) &data)
- != Success) {
- *propWindow = None;
- return (0);
- }
- if ( (actual_type == XA_WINDOW) && (actual_format == 32) &&
- (nitems != 0) ) {
- *propWindow = *data;
- Xfree( (char *) data);
- return (1);
- }
- *propWindow = None;
- if (data) Xfree( (char *) data);
- return(0);
-}
-
-Status
-XGetClassHint(
- Display *dpy,
- Window w,
- XClassHint *classhint) /* RETURN */
-{
- int len_name, len_class;
-
- Atom actual_type;
- int actual_format;
- unsigned long nitems;
- unsigned long leftover;
- unsigned char *data = NULL;
- if (XGetWindowProperty(dpy, w, XA_WM_CLASS, 0L, (long)BUFSIZ, False,
- XA_STRING,
- &actual_type,
- &actual_format, &nitems, &leftover, &data) != Success)
- return (0);
-
- if ( (actual_type == XA_STRING) && (actual_format == 8) ) {
- len_name = strlen((char *) data);
- if (! (classhint->res_name = Xmalloc((unsigned) (len_name+1)))) {
- Xfree((char *) data);
- return (0);
- }
- strcpy(classhint->res_name, (char *) data);
- if (len_name == nitems) len_name--;
- len_class = strlen((char *) (data+len_name+1));
- if (! (classhint->res_class = Xmalloc((unsigned) (len_class+1)))) {
- Xfree(classhint->res_name);
- classhint->res_name = (char *) NULL;
- Xfree((char *) data);
- return (0);
- }
- strcpy(classhint->res_class, (char *) (data+len_name+1));
- Xfree( (char *) data);
- return(1);
- }
- if (data) Xfree( (char *) data);
- return(0);
-}
+ +/*********************************************************** + +Copyright 1987, 1998 The Open Group + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation. + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of The Open Group shall not be +used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization from The Open Group. + + +Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts. + + All Rights Reserved + +Permission to use, copy, modify, and distribute this software and its +documentation for any purpose and without fee is hereby granted, +provided that the above copyright notice appear in all copies and that +both that copyright notice and this permission notice appear in +supporting documentation, and that the name of Digital not be +used in advertising or publicity pertaining to distribution of the +software without specific, written prior permission. + +DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING +ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL +DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR +ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, +WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +******************************************************************/ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif +#include <X11/Xlibint.h> +#include <X11/Xos.h> +#include <X11/Xutil.h> +#include "Xatomtype.h" +#include <X11/Xatom.h> +#include <stdio.h> + +Status XGetSizeHints ( + Display *dpy, + Window w, + XSizeHints *hints, + Atom property) +{ + xPropSizeHints *prop = NULL; + Atom actual_type; + int actual_format; + unsigned long leftover; + unsigned long nitems; + if (XGetWindowProperty(dpy, w, property, 0L, + (long) OldNumPropSizeElements, + False, XA_WM_SIZE_HINTS, &actual_type, &actual_format, + &nitems, &leftover, (unsigned char **)&prop) + != Success) return (0); + + if ((actual_type != XA_WM_SIZE_HINTS) || + (nitems < OldNumPropSizeElements) || (actual_format != 32)) { + if (prop != NULL) Xfree ((char *)prop); + return(0); + } + hints->flags = (prop->flags & (USPosition|USSize|PAllHints)); + hints->x = cvtINT32toInt (prop->x); + hints->y = cvtINT32toInt (prop->y); + hints->width = cvtINT32toInt (prop->width); + hints->height = cvtINT32toInt (prop->height); + hints->min_width = cvtINT32toInt (prop->minWidth); + hints->min_height = cvtINT32toInt (prop->minHeight); + hints->max_width = cvtINT32toInt (prop->maxWidth); + hints->max_height = cvtINT32toInt (prop->maxHeight); + hints->width_inc = cvtINT32toInt (prop->widthInc); + hints->height_inc = cvtINT32toInt (prop->heightInc); + hints->min_aspect.x = cvtINT32toInt (prop->minAspectX); + hints->min_aspect.y = cvtINT32toInt (prop->minAspectY); + hints->max_aspect.x = cvtINT32toInt (prop->maxAspectX); + hints->max_aspect.y = cvtINT32toInt (prop->maxAspectY); + Xfree((char *)prop); + return(1); +} + +/* + * must return a pointer to the hint, in malloc'd memory, or routine is not + * extensible; any use of the caller's memory would cause things to be stepped + * on. + */ + +XWMHints *XGetWMHints ( + Display *dpy, + Window w) +{ + xPropWMHints *prop = NULL; + register XWMHints *hints; + Atom actual_type; + int actual_format; + unsigned long leftover; + unsigned long nitems; + if (XGetWindowProperty(dpy, w, XA_WM_HINTS, + 0L, (long)NumPropWMHintsElements, + False, XA_WM_HINTS, &actual_type, &actual_format, + &nitems, &leftover, (unsigned char **)&prop) + != Success) return (NULL); + + /* If the property is undefined on the window, return null pointer. */ + /* pre-R3 bogusly truncated window_group, don't fail on them */ + + if ((actual_type != XA_WM_HINTS) || + (nitems < (NumPropWMHintsElements - 1)) || (actual_format != 32)) { + if (prop != NULL) Xfree ((char *)prop); + return(NULL); + } + /* static copies not allowed in library, due to reentrancy constraint*/ + if ((hints = (XWMHints *) Xcalloc (1, (unsigned) sizeof(XWMHints)))) { + hints->flags = prop->flags; + hints->input = (prop->input ? True : False); + hints->initial_state = cvtINT32toInt (prop->initialState); + hints->icon_pixmap = prop->iconPixmap; + hints->icon_window = prop->iconWindow; + hints->icon_x = cvtINT32toInt (prop->iconX); + hints->icon_y = cvtINT32toInt (prop->iconY); + hints->icon_mask = prop->iconMask; + if (nitems >= NumPropWMHintsElements) + hints->window_group = prop->windowGroup; + else + hints->window_group = 0; + } + Xfree ((char *)prop); + return(hints); +} + +Status +XGetZoomHints ( + Display *dpy, + Window w, + XSizeHints *zhints) +{ + return (XGetSizeHints(dpy, w, zhints, XA_WM_ZOOM_HINTS)); +} + +Status +XGetNormalHints ( + Display *dpy, + Window w, + XSizeHints *hints) +{ + return (XGetSizeHints(dpy, w, hints, XA_WM_NORMAL_HINTS)); +} + + +/* + * XGetIconSizes reads the property + * ICONSIZE_ATOM type: ICONSIZE_ATOM format: 32 + */ + +Status XGetIconSizes ( + Display *dpy, + Window w, /* typically, root */ + XIconSize **size_list, /* RETURN */ + int *count) /* RETURN number of items on the list */ +{ + xPropIconSize *prop = NULL; + register xPropIconSize *pp; + register XIconSize *hp, *hints; + Atom actual_type; + int actual_format; + unsigned long leftover; + unsigned long nitems; + register int i; + + if (XGetWindowProperty(dpy, w, XA_WM_ICON_SIZE, 0L, 60L, + False, XA_WM_ICON_SIZE, &actual_type, &actual_format, + &nitems, &leftover, (unsigned char **)&prop) + != Success) return (0); + + pp = prop; + + if ((actual_type != XA_WM_ICON_SIZE) || + (nitems < NumPropIconSizeElements) || + (nitems % NumPropIconSizeElements != 0) || + (actual_format != 32)) { + if (prop != NULL) Xfree ((char *)prop); + return(0); + } + + /* static copies not allowed in library, due to reentrancy constraint*/ + + nitems /= NumPropIconSizeElements; + if (! (hp = hints = (XIconSize *) + Xcalloc ((unsigned) nitems, (unsigned) sizeof(XIconSize)))) { + if (prop) Xfree ((char *) prop); + return 0; + } + + /* march down array putting things into native form */ + for (i = 0; i < nitems; i++) { + hp->min_width = cvtINT32toInt (pp->minWidth); + hp->min_height = cvtINT32toInt (pp->minHeight); + hp->max_width = cvtINT32toInt (pp->maxWidth); + hp->max_height = cvtINT32toInt (pp->maxHeight); + hp->width_inc = cvtINT32toInt (pp->widthInc); + hp->height_inc = cvtINT32toInt (pp->heightInc); + hp += 1; + pp += 1; + } + *count = nitems; + *size_list = hints; + Xfree ((char *)prop); + return(1); +} + + +Status XGetCommand ( + Display *dpy, + Window w, + char ***argvp, + int *argcp) +{ + XTextProperty tp; + int argc; + char **argv; + + if (!XGetTextProperty (dpy, w, &tp, XA_WM_COMMAND)) return 0; + + if (tp.encoding != XA_STRING || tp.format != 8) { + if (tp.value) Xfree ((char *) tp.value); + return 0; + } + + + /* + * ignore final <NUL> if present since UNIX WM_COMMAND is nul-terminated + */ + if (tp.nitems && (tp.value[tp.nitems - 1] == '\0')) tp.nitems--; + + + /* + * create a string list and return if successful + */ + if (!XTextPropertyToStringList (&tp, &argv, &argc)) { + if (tp.value) Xfree ((char *) tp.value); + return (0); + } + + if (tp.value) Xfree ((char *) tp.value); + *argvp = argv; + *argcp = argc; + return 1; +} + + +Status +XGetTransientForHint( + Display *dpy, + Window w, + Window *propWindow) +{ + Atom actual_type; + int actual_format; + unsigned long nitems; + unsigned long leftover; + Window *data = NULL; + if (XGetWindowProperty(dpy, w, XA_WM_TRANSIENT_FOR, 0L, 1L, False, + XA_WINDOW, + &actual_type, + &actual_format, &nitems, &leftover, (unsigned char **) &data) + != Success) { + *propWindow = None; + return (0); + } + if ( (actual_type == XA_WINDOW) && (actual_format == 32) && + (nitems != 0) ) { + *propWindow = *data; + Xfree( (char *) data); + return (1); + } + *propWindow = None; + if (data) Xfree( (char *) data); + return(0); +} + +Status +XGetClassHint( + Display *dpy, + Window w, + XClassHint *classhint) /* RETURN */ +{ + int len_name, len_class; + + Atom actual_type; + int actual_format; + unsigned long nitems; + unsigned long leftover; + unsigned char *data = NULL; + if (XGetWindowProperty(dpy, w, XA_WM_CLASS, 0L, (long)BUFSIZ, False, + XA_STRING, + &actual_type, + &actual_format, &nitems, &leftover, &data) != Success) + return (0); + + if ( (actual_type == XA_STRING) && (actual_format == 8) ) { + len_name = strlen((char *) data); + if (! (classhint->res_name = Xmalloc((unsigned) (len_name+1)))) { + Xfree((char *) data); + return (0); + } + strcpy(classhint->res_name, (char *) data); + if (len_name == nitems) len_name--; + len_class = strlen((char *) (data+len_name+1)); + if (! (classhint->res_class = Xmalloc((unsigned) (len_class+1)))) { + Xfree(classhint->res_name); + classhint->res_name = (char *) NULL; + Xfree((char *) data); + return (0); + } + strcpy(classhint->res_class, (char *) (data+len_name+1)); + Xfree( (char *) data); + return(1); + } + if (data) Xfree( (char *) data); + return(0); +} |