This is Query.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/Query.c,v 1.1 1992/04/17 18:26:25 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. *
* *
******************************************************************************/
/*
* Query.c - Query composite widget
*
*/
#include <stdio.h>
#include <string.h>
#include <X11/IntrinsicP.h>
#include <X11/Xresource.h>
#include "Xsw.h"
#include <X11/Xaw/Box.h>
#include <X11/Xaw/Paned.h>
#include <X11/Xaw/Command.h>
#include <X11/Xaw/Label.h>
#include <X11/Xaw/AsciiText.h>
#include <X11/Xaw/AsciiSrc.h>
#include <X11/Xaw/Form.h>
#include "Dir.h"
#include "Entry.h"
#include "QueryP.h"
#define FIELDWIDTH 200
#define TAG 0
#define LBL 1
#define DFLT 2
#define EXT 3
/****************************************************************
*
* query Resources
*
****************************************************************/
static XtResource resources[] = {
#define offset(field) XtOffset(QueryWidget, query.field)
{ XtNdirectory, XtCDirectory, XtRDType, sizeof(DType),
offset(directory), XtRString, "None"},
{ XtNentries, XtCEntries, XtRStringSet, sizeof(StringSet),
offset(entries), XtRImmediate, (XtPointer)NULL},
};
/****************************************************************
*
* Full class record constant
*
****************************************************************/
static void Initialize();
static void Destroy();
static void ClassPartInitialize();
QueryClassRec queryClassRec = {
{
/* core_class fields */
/* superclass */ (WidgetClass) &panedClassRec,
/* class_name */ "query",
/* widget_size */ sizeof(QueryRec),
/* class_initialize */ NULL,
/* class_part_init */ ClassPartInitialize,
/* 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 */ Destroy,
/* 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
},{
/* constraint class fields */
/* subresources */ NULL,
/* subresource_count */ 0,
/* constraint_size */ sizeof(QueryConstraintsRec),
/* initialize */ NULL,
/* destroy */ NULL,
/* set_values */ NULL,
/* extension */ NULL
}
};
WidgetClass queryWidgetClass = (WidgetClass)&queryClassRec;
XswQueryReturnStruct *
XswQueryGetAll(w)
QueryWidget w;
{
char *exist;
int i, num_entries;
StringList list;
list = XswEntryGetAll(w->query.entry_w);
num_entries = XswCountStrings(list);
XswFreeStringList(w->query.ret_struct.entry);
XswFreeStringList(w->query.ret_struct.flag);
w->query.ret_struct.entry =
(StringList)XtMalloc((num_entries+1)*sizeof(String));
w->query.ret_struct.flag =
(StringList)XtMalloc((num_entries+1)*sizeof(String));
for (i=0; i < num_entries; i++) {
#ifdef DONT_INCLUDE
/*
* Steve Tuecke, 11/25/92 THIS IS A HACK FIX!
* This look is apparently trying to determine if list[i]
* has a proper extension, and if not then appending a proper
* extension.
* However, the following call to XswGetExtension() is missing
* and argument as is causing it crash. Since I cannot find
* the proper argument to pass to it (a set of extensions),
* I'm just commenting this test out so that it doesn't crash.
*/
exist = XswGetExtension(list[i]);
#else
exist = ".cnt";
#endif
if(!strcmp(exist,"") && strcmp(list[i],"")) {
w->query.ret_struct.entry[i] =
(String)XtMalloc(strlen(list[i])+
strlen(w->query.entries[EXT][i])+1);
sprintf(w->query.ret_struct.entry[i], "%s%s",
list[i], w->query.entries[EXT][i]);
} else {
w->query.ret_struct.entry[i] = XtNewString(list[i]);
}
w->query.ret_struct.flag[i] =
XtNewString(w->query.entries[TAG][i]);
}
w->query.ret_struct.entry[i] = NULL;
w->query.ret_struct.flag[i] = NULL;
if (w->query.dir_w != NULL) {
list = XswDirGetEntries(w->query.dir_w);
num_entries = XswCountStrings(list);
XswFreeStringList(w->query.ret_struct.file);
w->query.ret_struct.file =
(StringList)XtMalloc((num_entries+1)*sizeof(String));
for (i=0; i < num_entries; i++) {
w->query.ret_struct.file[i] = XtNewString(list[i]);
}
w->query.ret_struct.file[i] = NULL;
}
return &(w->query.ret_struct);
}
void
XswQueryClear(w)
QueryWidget w;
{
XswEntryClear(w->query.entry_w);
if (w->query.dir_w != NULL) {
(void)XswDirGetEntriesAndClear(w->query.dir_w);
}
}
/* ARGSUSED */
Boolean CvtStringToDType(display, args, nargs,
fromVal, toVal, converter_data)
Display* display;
XrmValuePtr args, fromVal, toVal;
int *nargs;
XtPointer* converter_data;
{
static int result;
if (XswStrCmp((char *)fromVal->addr, "none"))
result = NoList;
else if (XswStrCmp((char *)fromVal->addr, "single"))
result = Single;
else if (XswStrCmp((char *)fromVal->addr, "multi"))
result = Multi;
else
XtStringConversionWarning((String) fromVal->addr, "DType");
DONE(DType, result);
}
/* ARGSUSED */
static void
ClassPartInitialize(class)
WidgetClass class;
{
XtSetTypeConverter(XtRString, XtRDType,
CvtStringToDType, NULL, 0,
XtCacheAll, NULL);
}
static void
Destroy(w)
QueryWidget w;
{
XswFreeStringList(w->query.ret_struct.entry);
XswFreeStringList(w->query.ret_struct.file);
}
/* ARGSUSED */
static void
Initialize(request, new)
QueryWidget request, new;
{
Widget previous_w, vert_w;
Cardinal arg_cnt;
Arg args[20];
int i;
new->query.ret_struct.entry = NULL;
new->query.ret_struct.flag = NULL;
new->query.ret_struct.file = NULL;
if (new->query.entries != NULL) {
new->query.entries = XswInvert(new->query.entries);
new->query.entry_w =
XtVaCreateManagedWidget("Entry",
entryWidgetClass,
(Widget) new,
XtNlabels, new->query.entries[LBL],
XtNdefaults, new->query.entries[DFLT],
NULL);
} else {
new->query.entry_w = NULL;
}
if (new->query.directory != NoList) {
new->query.dir_w =
XtVaCreateManagedWidget("Directory",
dirWidgetClass,
(Widget) new,
XtNselectType,
(new->query.directory == Single) ? Single : Multi,
NULL);
} else {
new->query.dir_w = NULL;
}
}
/****************************************************
void
XswQuerySetEntries(w, list)
QueryWidget w;
StringList list;
{
XswEntrySetAll(w->query.entry_w, list);
}
******************************************************/
void
XswQuerySetEntry(w, tag, value)
QueryWidget w;
String tag;
String value;
{
if (w->query.entry_w != NULL) {
int entry = 0;
while (w->query.entries[TAG][entry] != NULL) {
if (XswStrCmp(tag, w->query.entries[TAG][entry])) break;
else entry++;
}
if (w->query.entries[TAG][entry] != NULL)
XswEntrySetOne(w->query.entry_w, entry, value);
}
}
String
XswQueryGetEntry(w, tag)
QueryWidget w;
String tag;
{
if (w->query.entry_w != NULL) {
int entry = 0;
while (w->query.entries[TAG][entry] != NULL) {
if (XswStrCmp(tag, w->query.entries[TAG][entry])) break;
else entry++;
}
if (w->query.entries[TAG][entry] != NULL)
return XswEntryGetOne(w->query.entry_w, entry);
else return NULL;
} else return NULL;
}
StringList
XswQueryGetEntries(w)
QueryWidget w;
{
if (w->query.entry_w != NULL) {
return XswEntryGetAll(w->query.entry_w);
}
}
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.