This is Help.c in view mode; [Download] [Up]
#if ( !defined(lint) && !defined(SABER))
static char PCN_rcsid[] = "$Header: /ufs/comp/mei/PROJ_PCN/onprofile/IFModel/Xsw/RCS/Help.c,v 1.1 1992/04/17 18:25:10 mei Exp $";
#endif
/******************************************************************************
* *
* Copyright (C) The Aerospace Corporation 1991 *
* *
* This software was developed by The Aerospace Corporation as a *
* research endeavor for the United States Air Force *
* Space Systems Division. The current version of the Gauge *
* computer program is available for release to you for *
* educational and research purposes only. It is not *
* to be used for commercial purposes. *
* *
* In addition, the following conditions shall apply. *
* *
* 1) The computer software and documentation were designed to *
* satisfy internal Aerospace requirements only. *
* The software is provided ``as is,'' and The Aerospace Corporation *
* makes no warranty, expressed or implied, as to it accuracy, *
* functioning, or fitness for a particular purpose. *
* *
* 2) The Aerospace Corporation and its personnel are not *
* responsible for providing technical support or general assistance *
* with respect to the software. *
* *
* 3) Neither The Aerospace Corporation nor its personnel shall be *
* liable for claims, losses, or damages arising out of or connected *
* with the use of this software. *
* Your sole and exclusive remedy shall be to request a replacement *
* copy of the program. *
* *
******************************************************************************/
/*
* Help.c - Help shell widget
*
*/
#include <stdio.h>
#include <sys/param.h>
#include <X11/IntrinsicP.h>
#include <X11/Xresource.h>
#include "Xsw.h"
#include <X11/Xaw/Box.h>
#include <X11/Xaw/Text.h>
#include <X11/Xaw/Paned.h>
#include <X11/Xaw/Command.h>
#include <X11/Xaw/AsciiText.h>
#include <X11/Xaw/Label.h>
#include "HelpP.h"
#define INDX 0
#define FNAME 1
/****************************************************************
*
* help Resources
*
****************************************************************/
static XtResource resources[] = {
#define offset(field) XtOffset(HelpWidget, help.field)
{ XtNhelpSet, XtCHelpSet, XtRStringSet, sizeof(StringSet),
offset(help_set), XtRString, "help:default.hlp"},
};
/****************************************************************
*
* Full class record constant
*
****************************************************************/
static void Initialize();
static void Destroy();
HelpClassRec helpClassRec = {
{
/* core_class fields */
/* superclass */ (WidgetClass) &transientShellClassRec,
/* class_name */ "help",
/* widget_size */ sizeof(HelpRec),
/* class_initialize */ NULL,
/* class_part_init */ NULL,
/* class_inited */ FALSE,
/* initialize */ Initialize,
/* initialize_hook */ NULL,
/* realize */ XtInheritRealize,
/* actions */ NULL,
/* num_actions */ 0,
/* resources */ resources,
/* num_resources */ XtNumber(resources),
/* xrm_class */ NULLQUARK,
/* compress_motion */ TRUE,
/* compress_exposure */ TRUE,
/* compress_enterleave*/ TRUE,
/* visible_interest */ FALSE,
/* destroy */ NULL,
/* resize */ XtInheritResize,
/* expose */ NULL,
/* set_values */ NULL,
/* set_values_hook */ NULL,
/* set_values_almost */ XtInheritSetValuesAlmost,
/* get_values_hook */ NULL,
/* accept_focus */ NULL,
/* version */ XtVersion,
/* callback_private */ NULL,
/* tm_table */ NULL,
/* query_geometry */ XtInheritQueryGeometry,
/* display_accelerator*/ XtInheritDisplayAccelerator,
/* extension */ NULL
},{
/* composite_class fields */
/* geometry_manager */ XtInheritGeometryManager,
/* change_managed */ XtInheritChangeManaged,
/* insert_child */ XtInheritInsertChild,
/* delete_child */ XtInheritDeleteChild,
/* extension */ NULL
}
};
WidgetClass helpWidgetClass = (WidgetClass)&helpClassRec;
static char *
GetFileName(w)
Widget w;
{
static char *old;
static Arg getargs[] = { {XtNstring, (XtArgVal) &old} };
XtGetValues(w, getargs, (Cardinal) 1);
return(old);
}
/* Function: SetTextFile() sets the text file of the specified widget.
* Arguments: w: Widget to set.
* filename: Name of filename.
* Returns: Nothing.
* Notes:
* XXX The bookkeeping involved here is necessary because the Text widget
* uses pointer comparison to detect if the string has actually changed.
*/
static void
SetTextFile(w, filename)
Widget w;
char *filename;
{
char *old;
FILE *fp;
old = GetFileName(w);
/* Make a copy of the new name and modify the widget. */
if ((fp = fopen(filename, "r")) != NULL) {
fclose(fp);
XtVaSetValues(w, XtNstring, XtNewString(filename), NULL);
/* ...and free the old name, now that it's no longer used. */
/* 4/24 hui, caused memory leak in R5
XtFree(old); */
}
}
/* Function: HelpClose() closes a help window.
* Arguments: Standard Xt callback arguments.
* Returns: Nothing.
* Notes:
*/
/*ARGSUSED*/
static void
HelpClose(w, client_data, call_data)
Widget w;
XtPointer client_data;
XtPointer call_data;
{
XtPopdown((Widget)client_data);
}
static void
Destroy(w)
HelpWidget w;
{
;
}
/* ARGSUSED */
static void
Initialize(request, neww)
HelpWidget request, neww;
{
Widget close;
Dimension height;
Dimension gap;
neww->help.pane_w =
XtVaCreateManagedWidget("helpPane",
panedWidgetClass,
(Widget)neww,
NULL);
neww->help.label_w =
XtVaCreateManagedWidget("helpLabel",
labelWidgetClass,
neww->help.pane_w,
NULL);
neww->help.text_w =
XtVaCreateManagedWidget("helpText",
asciiTextWidgetClass,
neww->help.pane_w,
XtNtype, XawAsciiFile,
XtNeditType, XawtextRead,
XtNstring, XtNewString("/dev/null"),
NULL);
neww->help.box_w =
XtVaCreateManagedWidget("helpBox",
boxWidgetClass,
neww->help.pane_w,
NULL);
close =
XtVaCreateManagedWidget("close",
commandWidgetClass,
neww->help.box_w,
NULL);
XtAddCallback(close, XtNcallback, HelpClose, (XtPointer)neww);
XtAddCallback(close, XtNdestroyCallback, HelpClose, (XtPointer)neww);
XtVaGetValues(close, XtNheight, &height, NULL);
XtVaGetValues(neww->help.box_w, XtNvSpace, &gap, NULL);
height += 2*gap;
XtVaSetValues(neww->help.box_w, XtNmax, height, XtNmin, height, NULL);
}
Boolean
XswHelpShow(w, name, origin_w, position)
HelpWidget w;
String name;
Widget origin_w;
PType position;
{
static char message[] = "No help available for: ";
static char no_file[] = "Can't find requested help file: ";
String text;
String file_name;
Dimension label_height, box_height;
int i;
if ((w == NULL)) {
XtWarning("Invalid help widget!");
return False;
}
i = 0;
while (w->help.help_set[i] != NULL) {
if (XswStrCmp(name, w->help.help_set[i][INDX])) break;
i++;
}
if (w->help.help_set[i] != NULL) {
file_name = XswGetLibName(w->help.help_set[i][FNAME]);
if (file_name[0] != '\0') {
XtVaSetValues(w->help.label_w, XtNlabel, name, NULL);
SetTextFile(w->help.text_w, file_name);
if (!XswIsVisible((Widget) w)) {
SetTextFile(w->help.text_w, file_name);
/* my try
XtPopup(XtParent(w->help.pane_w), XtGrabNone);
*/
XswPopup(w->help.pane_w, XtGrabNone,
origin_w, position);
}
return True;
} else {
text = XtMalloc(strlen(no_file)+
strlen(w->help.help_set[i][FNAME])+2);
sprintf(text, "%s%s", no_file, w->help.help_set[i][FNAME]);
XtWarning(text);
XtFree(text);
}
} else {
text = XtMalloc(strlen(message)+strlen(name)+2);
sprintf(text, "%s%s", message, name);
XtWarning(text);
XtFree(text);
}
return False;
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.