cdesktopenv/cde/lib/DtHelp/GenUtils.c

287 lines
8.5 KiB
C

/*
* CDE - Common Desktop Environment
*
* Copyright (c) 1993-2012, The Open Group. All rights reserved.
*
* These libraries and programs are free software; you can
* redistribute them and/or modify them under the terms of the GNU
* Lesser General Public License as published by the Free Software
* Foundation; either version 2 of the License, or (at your option)
* any later version.
*
* These libraries and programs are distributed in the hope that
* they will be useful, but WITHOUT ANY WARRANTY; without even the
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU Lesser General Public License for more
* details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with these librararies and programs; if not, write
* to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
* Floor, Boston, MA 02110-1301 USA
*/
/* $XConsortium: GenUtils.c /main/10 1996/05/09 03:42:28 drk $ */
/************************************<+>*************************************
****************************************************************************
**
** File: GenUtils.c
**
** Project: CDEnext Info Access.
**
** Description: This module contains non public routines used only by
** CDE 1.0 dthelpgen. If any of these routines are
** renamed or modified to remove or add parameters, the
** original routine should be moved to Obsolete.c, a new
** routine created (and named differently), and the old
** routine should call the new routine.
**
** (c) Copyright 1987, 1988, 1989, 1990, 1991, 1992 Hewlett-Packard Company
**
** (c) Copyright 1993, 1994 Hewlett-Packard Company
** (c) Copyright 1993, 1994 International Business Machines Corp.
** (c) Copyright 1993, 1994 Sun Microsystems, Inc.
** (c) Copyright 1993, 1994 Novell, Inc.
**
**
****************************************************************************
************************************<+>*************************************/
/*
* system includes
*/
#include <stdio.h>
#include <X11/Xlib.h>
#include <X11/Xresource.h>
/*
* Canvas Engine includes
*/
#include "CanvasP.h"
#include "CanvasSegP.h"
/*
* private includes
*/
#include "bufioI.h" /* for FormatUtilI.h */
#include "GenUtilsP.h"
#include "FontAttrI.h"
#include "Access.h"
#include "AccessI.h"
#include "AccessP.h"
#include "AccessSDLP.h"
#include "AccessSDLI.h"
#include "AccessCCDFP.h"
#include "AccessCCDFI.h"
#include "SDLI.h"
#include "FormatUtilI.h"
#include "FormatSDLI.h"
#include "Lock.h"
#ifdef NLS16
#endif
/******** Private Defines ********/
/******** Private Function Declarations ********/
static void DefCvsMetrics(
_DtCvPointer client_data,
_DtCvElemType elem_type,
_DtCvPointer ret_metrics);
/******** Private Macro Declarations ********/
/******************************************************************************
*
* Private variables used within this file.
*
*******************************************************************************/
static _DtCvVirtualInfo MyVirtInfo =
{
DefCvsMetrics, /* void (*_CEGet_DtCvMetrics)(); */
NULL, /* void (*_DtCvRenderElem)(); */
NULL, /* DefCvsStrWidth, _DtCvUnit (*_DtCvGetElemWidth)(); */
NULL, /* DefCvsFontMetrics, void (*_DtCvGetFontMetrics)(); */
NULL, /* VStatus (*_DtCvBuildSelection)(); */
};
static const _DtCvSpaceMetrics defLinkMetrics = { 0, 0, 0, 0 };
/******************************************************************************
*
* Private functions
*
******************************************************************************/
/*****************************************************************************
* Function: void DefCvsMetrics ();
*
* Parameters:
*
* Returns:
*
* Purpose:
*
*****************************************************************************/
static void
DefCvsMetrics (
_DtCvPointer client_data,
_DtCvElemType elem_type,
_DtCvPointer ret_metrics)
{
_DtCvSpaceMetrics *retLink = (_DtCvSpaceMetrics *) ret_metrics;
if (_DtCvCANVAS_TYPE == elem_type)
{
_DtCvMetrics *retCanvas = (_DtCvMetrics *) ret_metrics;
retCanvas->width = 1;
retCanvas->height = 1;
retCanvas->top_margin = 0;
retCanvas->side_margin = 0;
retCanvas->line_height = 1;
retCanvas->horiz_pad_hint = 1;
}
else if (_DtCvLINK_TYPE == elem_type || _DtCvTRAVERSAL_TYPE == elem_type)
*retLink = defLinkMetrics;
}
/******************************************************************************
* Semi-Public Functions
******************************************************************************/
/******************************************************************************
* Function: int _DtHelpCeGetVolumeTitle(_DtHelpVolume vol, char **retTitle);
*
* Parameters: vol Specifies the loaded volume.
* retTitle Returns the title of the volume. This string is
* owned by the caller and must be freed.
*
* Return Value: 0 if successful, -1 if a failure occurs
*
* Purpose: Get the title of a volume.
*
* Used by: dthelpgen 1.0
*
******************************************************************************/
int
_DtHelpCeGetVolumeTitle (
CanvasHandle canvas,
VolumeHandle volume,
char **ret_title)
{
_FrmtUiInfo myUiInfo;
_DtHelpVolume vol = (_DtHelpVolume)volume;
int result;
/*
* set up my UI information
*/
myUiInfo.load_graphic = NULL;
myUiInfo.resolve_spc = NULL;
myUiInfo.load_font = NULL;
myUiInfo.destroy_region = NULL;
myUiInfo.exec_filter = NULL;
myUiInfo.client_data = NULL;
/* since we're going for a string, set avg_char width to 1 */
myUiInfo.line_width = 0;
myUiInfo.line_height = 0;
myUiInfo.leading = 0;
myUiInfo.avg_char = 1;
myUiInfo.nl_to_space = 0;
/*
* What type of volume is it?
*/
_DtHelpProcessLock();
if (0 == _DtHelpCeGetVolumeFlag(volume))
{
result = _DtHelpCeGetCcdfVolumeTitle(vol, ret_title);
}
else
{
result = _DtHelpCeFrmtSDLVolTitleToAscii(volume, &myUiInfo, ret_title);
}
_DtHelpProcessUnlock();
return result;
}
/******************************************************************************
* Function: int _DtHelpCeGetAsciiVolumeAbstract (_DtHelpVolume vol, char **a
bstract);
*
* Parameters: vol Specifies the loaded volume.
* abstract Returns the abstract of the volume. This string
* is owned by the caller and should be freed.
*
* Return Value: 0 if successful, -1 if a failure occurs
*
* Purpose: Get the abstract of a volume.
*
* Used by: dthelpgen 1.0
*
******************************************************************************/
int
_DtHelpCeGetAsciiVolumeAbstract (
CanvasHandle canvas,
VolumeHandle volume,
char **retAbs)
{
_DtHelpVolume vol = (_DtHelpVolume)volume;
int result;
/*
* What type of volume is it?
*/
_DtHelpProcessLock();
if (0 == _DtHelpCeGetVolumeFlag(volume))
{
result = _DtHelpCeGetCcdfVolumeAbstract(vol, retAbs);
_DtHelpProcessUnlock();
return result;
}
*retAbs = _DtHelpCeGetSdlVolumeAsciiAbstract(volume);
if (*retAbs == NULL)
{
_DtHelpProcessUnlock();
return (-1);
}
_DtHelpProcessUnlock();
return (0);
}
/*****************************************************************************
* Function: CanvasHandle _DtHelpCeCreateDefCanvas (void);
*
* Parameters:
*
* Returns: A handle to the canvas or NULL if an error occurs.
*
* Purpose: Create a canvas and attach the appropriate virtual functions
* to the canvas.
*****************************************************************************/
CanvasHandle
_DtHelpCeCreateDefCanvas (void)
{
return (_DtCanvasCreate(MyVirtInfo, NULL));
} /* End _DtHelpCeCreateDefCanvas */
/******************************************************************************
* Function: char *_DtHelpCeGetNxtToken (char *str, char **retToken)
*
* Parameters:
* Return Value: Returns the pointer to the next unparsed character in
* the input string. A NULL value indicates an error.
*
* errno Values:
* EINVAL
* CEErrorMalloc
*
* Purpose: Parse tokens in resource string values.
*
*****************************************************************************/
char *
_DtHelpCeGetNxtToken (
char *str,
char **retToken)
{
return (_DtHelpGetNxtToken(str, retToken));
}