v04i040: Xgen - An X-window based applications generator, Part02/03
Dan Heller
argv at island.uu.net
Fri Jun 30 12:36:09 AEST 1989
Submitted-by: Jim Westervelt <westerve at osiris.cso.uiuc.edu>
Posting-number: Volume 4, Issue 40
Archive-name: xgen/part02
#! /bin/sh
# This is a shell archive. Remove anything before this line, then feed it
# into a shell via "sh file" or similar. To overwrite existing files,
# type "sh file -c".
# The tool that generated this appeared in the comp.sources.unix newsgroup;
# send mail to comp-sources-unix at uunet.uu.net if you want that tool.
# If this archive is complete, you will see the following message at the end:
# "End of shell archive."
# Contents: Dynamicshell.c Helpcommand.c create_cmdboard.c
# create_msgboard.c create_scrollbar.c create_shell.c
# expand_string.c get_button_args.c get_env.c get_label_args.c
# get_message_args.c get_pixel.c get_shell_args.c get_string.c
# Wrapped by argv at island on Thu Jun 29 19:27:25 1989
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'Dynamicshell.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'Dynamicshell.c'\"
else
echo shar: Extracting \"'Dynamicshell.c'\" \(1551 characters\)
sed "s/^X//" >'Dynamicshell.c' <<'END_OF_FILE'
X#include <X11/IntrinsicP.h>
X#include <X11/Intrinsic.h>
X#include <X11/Xos.h>
X#include <X11/StringDefs.h>
X#include <X11/Shell.h>
X#include <X11/CoreP.h>
X
X#include "DynamicshellP.h"
X#include "Dynamicshell.h"
X
X#define Offset(x) (XtOffset(DynamicshellWidget, x))
X#define XtInheritRedisplay ((void (*)())_XtInherit)
X
X
Xstatic XtResource dynamicShellResources[]=
X{
X {XtNupdateFrom, XtCLabel, XtRString, sizeof(String),
X Offset(dynamic.update_from), XtRString, (caddr_t)NULL
X },
X};
X
Xstatic void Initialize();
Xstatic void Destroy();
X
XDynamicshellClassRec dynamicshellClassRec = {
X {
X (WidgetClass) &transientShellClassRec,
X "Dynamicshell",
X sizeof(DynamicshellRec),
X NULL,
X NULL,
X FALSE,
X Initialize,
X NULL,
X XtInheritRealize,
X NULL,
X 0,
X dynamicShellResources,
X XtNumber(dynamicShellResources),
X NULLQUARK,
X FALSE,
X TRUE,
X FALSE,
X FALSE,
X Destroy,
X XtInheritResize,
X XtInheritRedisplay,
X NULL,
X NULL,
X XtInheritSetValuesAlmost,
X NULL,
X NULL,
X XtVersion,
X NULL,
X NULL,
X },
X {
X XtInheritGeometryManager,
X XtInheritChangeManaged,
X XtInheritInsertChild,
X XtInheritDeleteChild,
X NULL
X },
X};
X
XWidgetClass dynamicshellWidgetClass = (WidgetClass)
X&dynamicshellClassRec;
X
Xstatic void Initialize(request, new)
XWidget request, new;
X{
X DynamicshellWidget dsw = (DynamicshellWidget)new;
X if(dsw->dynamic.update_from != NULL)
X dsw->dynamic.update_from = strcpy( XtMalloc(strlen(
X dsw->dynamic.update_from) + 1), dsw->dynamic.update_from);
X
X
X}
X
Xstatic void Destroy(w)
XWidget w;
X{
X DynamicshellWidget dsw = (DynamicshellWidget)w;
X free(dsw->dynamic.update_from);
X}
END_OF_FILE
if test 1551 -ne `wc -c <'Dynamicshell.c'`; then
echo shar: \"'Dynamicshell.c'\" unpacked with wrong size!
fi
# end of 'Dynamicshell.c'
fi
if test -f 'Helpcommand.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'Helpcommand.c'\"
else
echo shar: Extracting \"'Helpcommand.c'\" \(2274 characters\)
sed "s/^X//" >'Helpcommand.c' <<'END_OF_FILE'
X#include <stdio.h>
X#include <X11/Xos.h>
X#include <ctype.h>
X#include <X11/StringDefs.h>
X#include <X11/IntrinsicP.h>
X#include <X11/CommandP.h>
X#include "Helpcommand.h"
X#include "HelpcommandP.h"
X
X#define offset(field) XtOffset(HelpcommandWidget, field)
X
X#define XtInheritRedisplay ((void (*)())_XtInherit)
X
X
Xvoid Initialize();
Xvoid Destroy();
Xstatic void Nothing();
Xstatic void Unset();
Xstatic void Help();
X
Xtypedef void (*XtRedisplayProc)();
X
Xstatic XtResource resources[] = {
X {XtNhelp, XtCLabel, XtRString, sizeof(caddr_t),
X offset(helpcommand.help_string), XtRString, (caddr_t)NULL},
X {XtNhelpCallback, XtCCallback, XtRCallback, sizeof(caddr_t),
X offset(helpcommand.help_callbacks), XtRCallback, (caddr_t)NULL},
X {XtNfreePointer1, XtCFreePointer, XtRFreePointer, sizeof(caddr_t),
X offset(helpcommand.freepointer1), XtRFreePointer, (caddr_t)NULL},};
X
Xstatic char helpDefaultTranslations[] =
X"Shift<Btn1Down>: nothing()\n\
X Shift<Btn1Up>: help()";
X
XXtTranslations helpdefaulttranslations;
X
Xstatic XtActionsRec actionslist[] =
X{
X {"help", Help},
X {"nothing", Nothing},
X};
X
XHelpcommandClassRec helpcommandClassRec = {
X {
X (WidgetClass) &commandClassRec,
X "Helpcommand",
X sizeof(HelpcommandRec),
X NULL,
X NULL,
X FALSE,
X Initialize,
X NULL,
X XtInheritRealize,
X actionslist,
X XtNumber(actionslist),
X resources,
X XtNumber(resources),
X NULLQUARK,
X FALSE,
X TRUE,
X TRUE,
X FALSE,
X Destroy,
X XtInheritResize,
X XtInheritRedisplay,
X NULL,
X NULL,
X XtInheritSetValuesAlmost,
X NULL,
X NULL,
X XtVersion,
X NULL,
X XtInheritTranslations,
X NULL,
X },
X {
X 0,
X },
X {
X 0,
X },
X {
X 0,
X },
X};
X
XWidgetClass helpcommandWidgetClass = (WidgetClass)
X&helpcommandClassRec;
X
X
X
Xstatic void Initialize(request, new)
XWidget request, new;
X{
X XtAddActions(actionslist, 2);
X helpdefaulttranslations = XtParseTranslationTable(
X helpDefaultTranslations );
X XtOverrideTranslations( new, helpdefaulttranslations);
X}
X
X
X
Xstatic void Nothing(w)
XWidget w;
X{
X return;
X}
X
Xstatic void Destroy(w, event, params, num_params)
XWidget w;
XXEvent *event;
XString *params;
XCardinal *num_params;
X{
X}
Xstatic void Help(w, event, params, num_params)
XWidget w;
XXEvent *event;
XString *params;
XCardinal *num_params;
X{
X XtCallCallbacks(w, XtNhelpCallback, NULL);
X}
X
X
END_OF_FILE
if test 2274 -ne `wc -c <'Helpcommand.c'`; then
echo shar: \"'Helpcommand.c'\" unpacked with wrong size!
fi
# end of 'Helpcommand.c'
fi
if test -f 'create_cmdboard.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'create_cmdboard.c'\"
else
echo shar: Extracting \"'create_cmdboard.c'\" \(22209 characters\)
sed "s/^X//" >'create_cmdboard.c' <<'END_OF_FILE'
X#define MAX_NUM_ARGS 20
X#include <stdio.h>
X#include <X11/IntrinsicP.h>
X#include <X11/Intrinsic.h>
X#include <X11/CompositeP.h>
X#include <X11/CommandP.h>
X#include <X11/LabelP.h>
X#include <X11/StringDefs.h>
X#include <X11/Shell.h>
X#include <X11/Form.h>
X#include <X11/Core.h>
X#include <X11/Viewport.h>
X#include <X11/VPaned.h>
X#include <X11/Text.h>
X#include <X11/AsciiText.h>
X#include "Helpcommand.h"
X
X#include "application.h"
X
Xextern Widget top_level;
Xextern XtTranslations input_text_translations;
Xvoid check();
Xvoid swap();
Xvoid check_tree();
Xvoid swap_grouped();
Xvoid initialize_cmdboard();
Xvoid reset_cmdboard();
Xvoid popup_error();
X
Xstatic int status = 0;
X
XWidget create_cmdboard(app_shell)
Xstruct shell *app_shell;
X{
X Widget shell,
X form,
X button,
X scrolltextspace,
X vpane,
X label,
X input_text;
X Widget prev_widget = NULL;
X Widget create_spreadsheet();
X Widget create_textspace();
X struct widget *child;
X
X Arg args[ MAX_NUM_ARGS ];
X int num_args = 0;
X
X char name[STR_LEN];
X char *shell_name;
X int flag;
X int borderwidth = 5;
X char cmd_line_buf[1024];
X static XtCallbackRec callback[2];
X
X struct _cmd_line_arg *cmd_arg_header,
X **pres_cmd_arg,
X *fix_tree_order();
X
X
X /* initialize command line buffer */
X *cmd_line_buf = '\0';
X
X /* initialize the data structure that will contain the *
X * various data of the cmdboard */
X pres_cmd_arg = &cmd_arg_header;
X
X /* build the arglist of the enclosing shell*/
X (void)get_shell_args( top_level, app_shell->resources,
X args, &num_args, &shell_name);
X
X XtSetArg( args[ num_args ], XtNallowShellResize, TRUE );
X num_args++;
X
X /*create the enclosing shell*/
X shell = XtCreateApplicationShell("",
X topLevelShellWidgetClass, args, num_args);
X
X /*enter the address in the shell address table*/
X enter_shell_address( shell, app_shell->name);
X
X /*create a vpane to tile the subsequent widgets vertically*/
X XtSetArg( args[0], XtNborderWidth, 10);
X XtSetArg( args[1], XtNgripIndent, -30);
X vpane = XtCreateManagedWidget("", vPanedWidgetClass,
X shell, args, 2);
X
X
X child = app_shell->child;
X
X /*first child must be a label*/
X if( !strcmp(child->type, "label" ))
X {
X get_label_args( vpane, child->resources, args,
X &num_args, app_shell->name);
X
X label = XtCreateManagedWidget("", labelWidgetClass,
X vpane, args, num_args );
X child = child->next_widget;
X }
X
X /* this form will contain all textspaces and *
X * scrolltextspaces */
X form = XtCreateManagedWidget("", formWidgetClass,
X vpane, NULL, 0);
X
X
X /*loop until the end of the linked list or a button is *
X *declared */
X while( child != NULL )
X {
X if( !strcmp(child->type, "button"))
X break;
X
X /*if this object is a textspace create it*/
X if ( !strcmp( child->type, "textspace"))
X {
X prev_widget = create_textspace( child->resources,
X form, prev_widget,
X pres_cmd_arg,
X app_shell->name );
X
X pres_cmd_arg = &((*pres_cmd_arg)->next);
X }
X
X /*if this object is a scrolltextspace create it*/
X if( !strcmp( child->type, "scrolltextspace"))
X
X {
X prev_widget = create_spreadsheet(
X child->resources , form,
X prev_widget,
X pres_cmd_arg );
X pres_cmd_arg = &((*pres_cmd_arg)->next);
X }
X child = child->next_widget;
X }
X
X (*pres_cmd_arg) = NULL;
X
X /* create buttons */
X while( child != NULL )
X {
X if(strcmp( child->type, "button" )) break;
X
X get_button_args(top_level, child->resources, args,
X &num_args, app_shell->name, cmd_line_buf);
X
X/* fprintf(stderr,"Got cmd_line_buf: %s\n", cmd_line_buf) ; */
X /* use commandarg to reshuffle the cmdboard data *
X * and put it in the right order */
X if( *cmd_line_buf != '\0')
X {
X cmd_arg_header = fix_tree_order(cmd_line_buf,
X cmd_arg_header,
X app_shell->name);
X XtAddCallback(shell, "popupCallback",
X initialize_cmdboard,
X cmd_arg_header);
X
X *cmd_line_buf = '\0';
X }
X
X /*store a pointer to the head of the strings that will*
X *contain the cmdboard data */
X XtSetArg( args[num_args], XtNfreePointer1,
X cmd_arg_header);
X num_args++;
X
X XtCreateManagedWidget( "", helpcommandWidgetClass,
X vpane, args, num_args);
X
X child = child->next_widget;
X }
X return(shell);
X}
X
X
XWidget
Xcreate_textspace(resources, outer_form, prev_widget, pres_cmd_arg, shell_name)
X struct resource *resources;
X Widget outer_form;
X Widget prev_widget;
X struct _cmd_line_arg **pres_cmd_arg;
X char *shell_name;
X{
X Arg label_args[MAX_NUM_ARGS];
X Arg text_args[MAX_NUM_ARGS];
X Arg form_args[MAX_NUM_ARGS];
X Arg args[2];
X XtArgVal ptr;
X int num_label_args = 0,
X num_text_args = 0,
X num_form_args = 0;
X
X int text_length = 15;
X int pixel;
X
X struct resource *pres_resource;
X XFontStruct *font;
X XFontStruct *textfont = NULL;
X char *help_msg = NULL;
X
X Widget form,
X label,
X text;
X
X char *textspace_label;
X int textlength = 30;
X int text_width;
X
X /*this is the data structure that will contain an argument*
X *to the command line */
X *pres_cmd_arg = (struct _cmd_line_arg *)(
X malloc(sizeof(struct _cmd_line_arg)));
X
X /*this is flag to indicate that this is a textspace*/
X (*pres_cmd_arg)->grouped_arg = NULL;
X
X pres_resource = resources;
X
X /*transfer the textspace options into widget argument list*/
X while( pres_resource != NULL )
X {
X if( !strcmp( pres_resource->name, "labelbackground") )
X {
X pixel = get_pixel( pres_resource->value );
X XtSetArg( label_args[num_label_args], XtNbackground,
X pixel );
X num_label_args++;
X goto next;
X }
X
X if( !strcmp( pres_resource->name, "labelforeground") )
X {
X pixel = get_pixel( pres_resource->value );
X XtSetArg( label_args[num_label_args], XtNforeground,
X pixel );
X num_label_args++;
X goto next;
X }
X
X if( !strcmp( pres_resource->name, "labelfont" ) )
X {
X font = XLoadQueryFont( XtDisplay(top_level),
X pres_resource->value );
X XtSetArg( label_args[num_label_args], XtNfont,
X font);
X num_label_args++;
X goto next;
X }
X
X if( !strcmp( pres_resource->name, "label" ))
X {
X textspace_label = pres_resource->value;
X XtSetArg( label_args[num_label_args], XtNlabel,
X pres_resource->value );
X num_label_args++;
X (*pres_cmd_arg)->name_quark = XrmStringToQuark(
X pres_resource->value);
X goto next;
X }
X
X if(!strcmp( pres_resource->name, "labelborderwidth"))
X {
X XtSetArg( label_args[num_label_args],
X XtNborderWidth, atoi( pres_resource->value));
X num_label_args++;
X goto next;
X }
X
X if( !strcmp( pres_resource->name, "textbackground") )
X {
X pixel = get_pixel( pres_resource->value );
X XtSetArg( text_args[num_text_args], XtNbackground,
X pixel );
X num_text_args++;
X goto next;
X }
X
X if( !strcmp( pres_resource->name, "textforeground") )
X {
X pixel = get_pixel( pres_resource->value );
X XtSetArg( text_args[num_text_args], XtNforeground,
X pixel );
X num_text_args++;
X goto next;
X }
X
X if( !strcmp( pres_resource->name, "textfont" ) )
X {
X textfont = XLoadQueryFont( XtDisplay(top_level),
X pres_resource->value );
X XtSetArg( text_args[num_text_args], XtNfont,
X textfont);
X num_text_args++;
X goto next;
X }
X
X if(!strcmp( pres_resource->name, "textborderwidth"))
X {
X XtSetArg( text_args[num_text_args],
X XtNborderWidth, atoi( pres_resource->value));
X num_text_args++;
X goto next;
X }
X
X if(!strcmp( pres_resource->name, "textlength"))
X {
X text_length = atoi(pres_resource->value);
X goto next;
X }
X
X if( !strcmp( pres_resource->name, "horizdistance"))
X {
X XtSetArg(form_args[num_form_args],
X XtNhorizDistance,
X atoi(pres_resource->value));
X num_form_args++;
X goto next;
X }
X
X if( !strcmp( pres_resource->name, "vertdistance"))
X {
X XtSetArg(form_args[num_form_args],
X XtNvertDistance,
X atoi(pres_resource->value));
X num_form_args++;
X goto next;
X }
X
X if( !strcmp( pres_resource->name, "help"))
X {
X help_msg = pres_resource->value;
X goto next;
X }
X
X
X fprintf(stderr,"In shell %s textspace %s: %s. No such option for textspaces. Ignored.\n", shell_name, textspace_label,
X pres_resource->name);
X
Xnext:
X pres_resource = pres_resource->next;
X }
X
X /*set the length of the text string*/
X (*pres_cmd_arg)->value = (char *)malloc(
X text_length);
X *((*pres_cmd_arg)->value) = '\0';
X
X /*set the width of the text according to the length of the *
X *string */
X /* if( textfont == NULL)
X textfont = XLoadQueryFont(XtDisplay(top_level),
X XtDefaultFont);
X
X text_width = (textfont->max_bounds.width) * text_length;*/
X
X /*create the form that will contain the label and text*
X *widgets */
X XtSetArg(form_args[num_form_args], XtNborderWidth, 0);
X num_form_args++;
X XtSetArg(form_args[num_form_args], XtNfromVert, prev_widget);
X num_form_args++;
X form = XtCreateManagedWidget("", formWidgetClass,
X outer_form, form_args, num_form_args);
X
X /*create the textspace label*/
X label = XtCreateManagedWidget("", labelWidgetClass,
X form, label_args, num_label_args);
X
X /*create the textspace text*/
X XtSetArg( text_args[num_text_args], XtNfromHoriz, label);
X num_text_args++;
X XtSetArg( text_args[num_text_args], XtNstring,
X (*pres_cmd_arg)->value);
X num_text_args++;
X XtSetArg( text_args[num_text_args], XtNeditType, XttextEdit);
X num_text_args++;
X XtSetArg( text_args[num_text_args], XtNlength, textlength );
X num_text_args++;
X XtSetArg( text_args[num_text_args], XtNtextOptions,
X editable );
X num_text_args++;
X /* XtSetArg( text_args[num_text_args], XtNwidth, text_width);
X num_text_args++; */
X
X (*pres_cmd_arg)->text_widget = XtCreateManagedWidget("",
X asciiStringWidgetClass,
X form, text_args, num_text_args);
X
X enter_hash_help( (*pres_cmd_arg)->text_widget, help_msg );
X
X /*transform the text widget into a one line text editor*/
X XtOverrideTranslations( (*pres_cmd_arg)->text_widget,
X input_text_translations);
X
X return(form);
X}
X
Xvoid
Xcheck( w,closure, call_data)
X Widget w;
X caddr_t closure,
X call_data;
X{
X char cmd_line[1024];
X char *cmd_arg;
X XtArgVal ptr1;
X Arg args[2];
X FILE *fp,
X *popen();
X char message[1024];
X int temp = 0;
X
X XtSetArg( args[0], XtNfreePointer1, &ptr1);
X
X XtGetValues( w, args, 1);
X
X cmd_arg = (char *)((long)cmd_line + strlen(closure));
X
X strcpy(cmd_line , closure);
X
X build_cmd_line(ptr1 , cmd_arg);
X expand_string(cmd_line, 1024) ;
X
X fp = popen(cmd_line, "r");
X
X fgets(message, 1000, fp);
X
X status = pclose(fp);
X
X if(status != 0 )
X {
X XBell(XtDisplay(top_level), 100);
X popup_error(message);
X }
X}
X
Xvoid
Xrunback(w, closure, call_data)
X Widget w;
X caddr_t closure,
X call_data;
X{
X
X char cmd_line[1024];
X char *cmd_arg;
X XtArgVal ptr1;
X Arg args[2];
X
X if (status != 0)
X return;
X
X XtSetArg( args[0], XtNfreePointer1, &ptr1);
X
X XtGetValues( w, args, 1);
X
X cmd_arg = (char *)((long)cmd_line +strlen(closure));
X
X strcpy(cmd_line, closure);
X
X build_cmd_line(ptr1, cmd_arg);
X expand_string(cmd_line, 1024) ;
X
X/* fprintf(stderr,"Background: %s\n", cmd_line) ; */
X if (fork() == 0)
X {
X /*
X XCloseDisplay(XtDisplay(top_level));
X */
X setpgrp(0, getpid());
X execlp("/bin/sh", "sh", "-c", cmd_line, 0);
X _exit(127);
X }
X}
X
Xvoid
Xrunfore(w, closure, call_data)
X Widget w;
X caddr_t closure,
X call_data;
X{
X Arg args[2];
X FILE *fp, *popen();
X XtArgVal ptr1;
X char *cmd_arg;
X char *p ;
X char cmd_line[1024];
X char message[1024];
X int pro_status;
X
X XtSetArg( args[0], XtNfreePointer1, &ptr1);
X
X XtGetValues( w, args, 1);
X
X cmd_arg = (char *)((long)cmd_line +strlen(closure));
X
X strcpy(cmd_line, closure);
X
X build_cmd_line(ptr1, cmd_arg);
X expand_string(cmd_line, 1024) ;
X/* strcat(cmd_line, " > /tmp/out") ; */
X/* fprintf(stderr,"Foreground: %s\n", cmd_line) ; */
X
X if (NULL == (fp = popen(cmd_line, "r")))
X {
X sprintf(message, "Error. Can't run: <%s>", cmd_line) ;
X XBell(XtDisplay(top_level), 100);
X popup_error(message);
X }
X else
X {
X fgets(message, 1024, fp) ;
X message[strlen(message)-1] = NULL ;
X while(EOF != getc(fp))
X ;
X pro_status = pclose(fp);
X
X if(pro_status != 0 )
X {
X XBell(XtDisplay(top_level), 100);
X popup_error(message);
X }
X }
X/* fprintf(stderr,"Ran foreground") ; */
X}
X
Xvoid
Xcheck_tree( cmd_arg_header)
X struct _cmd_line_arg *cmd_arg_header;
X{
X struct _cmd_line_arg *pres_cmd_arg;
X struct _grouped_arg *pres_grouped_arg;
X
X pres_cmd_arg = cmd_arg_header;
X
X /* skip leading spaces and command */
X
X while(pres_cmd_arg != NULL)
X {
X if(pres_cmd_arg->grouped_arg == NULL)
X {
X pres_cmd_arg = pres_cmd_arg->next;
X }
X else
X {
X pres_grouped_arg = pres_cmd_arg->grouped_arg;
X
X while( pres_grouped_arg != NULL)
X {
X pres_grouped_arg = pres_grouped_arg->next;
X
X
X }
X pres_cmd_arg = pres_cmd_arg->next;
X }
X }
X}
X
Xstruct _cmd_line_arg
X*fix_tree_order(ptr, cmdboard_data, shell_name)
X char *ptr;
X struct _cmd_line_arg *cmdboard_data;
X char *shell_name;
X{
X int str_length;
X int new_position=0;
X struct _cmd_line_arg **pres_cmdboard_arg,
X **moved_cmdboard_arg,
X **old_position_ptr,
X **old_branch_position_ptr,
X **new_branch_position_ptr;
X struct _grouped_arg **pres_grouped_arg,
X **moved_grouped_arg,
X **old_grouped_position_ptr;
X char temp_string[1024];
X char *temp ;
X XrmQuark quark;
X int position;
X int current_position = 0;
X char *old_ptr;
X char *tag_string;
X long length;
X char *default_string;
X
X while( *ptr != '\0' )
X {
X str_length = 0;
X current_position++;
X temp = temp_string;
X
X pres_cmdboard_arg = &cmdboard_data;
X
X old_ptr = ptr;
X
X while( *ptr != '[' )
X ptr++;
X
X length = (long)ptr - (long)old_ptr;
X
X tag_string =
X (char *)malloc((length+1)
X *sizeof(char));
X
X
X strncpy(tag_string,
X old_ptr, length);
X
X *((char *)((long)tag_string + length)) = '\0';
X
X ptr++;
X
X while( *ptr != ']' && *ptr != '(')
X *temp++ = *ptr++;
X
X *temp = '\0';
X
X quark = XrmStringToQuark(temp_string);
X
X
X if( *ptr == '(' )
X {
X ptr++;
X temp = temp_string;
X while ( *ptr != ')' )
X *temp++ = *ptr++ ;
X length = (long)temp - (long)temp_string;
X default_string = (char *)malloc((length +1)
X *sizeof(char));
X strncpy( default_string, temp_string, length + 1);
X *((char *)((long)default_string + length)) = '\0';
X
X ptr++;
X }
X
X else
X {
X default_string = (char *)malloc(1*sizeof(char));
X *default_string = '\0';
X }
X
X
X /* find current position of quark in tree */
X while( *pres_cmdboard_arg != NULL)
X {
X while( (*pres_cmdboard_arg)->grouped_arg == NULL )
X {
X/* core dump here if option string is not identically matched by a
X * textstring entry */
X if( quark == (*pres_cmdboard_arg)->name_quark)
X {
X (*pres_cmdboard_arg)->tag_string =
X tag_string;
X (*pres_cmdboard_arg)->default_string =
X default_string;
X old_position_ptr = pres_cmdboard_arg;
X goto find_new_position;
X }
X else
X pres_cmdboard_arg = &((*pres_cmdboard_arg)->next);
X }
X pres_grouped_arg = &((*pres_cmdboard_arg)->
X grouped_arg);
X
X while( *pres_grouped_arg != NULL )
X {
X
X if( quark == (*pres_grouped_arg)->name_quark)
X {
X (*pres_grouped_arg)->tag_string =
X tag_string;
X (*pres_grouped_arg)->default_string =
X default_string;
X old_grouped_position_ptr =
X pres_grouped_arg;
X old_branch_position_ptr =
X pres_cmdboard_arg;
X goto find_new_position;
X }
X else
X pres_grouped_arg = &((*pres_grouped_arg)->
X next);
X }
X pres_cmdboard_arg = &((*pres_cmdboard_arg)->next);
X
X }
X /* error argument not found */
X fprintf(stderr, "Tag \"%s\" used in cmdboard \"%s\" do not match any tag in commandarg\n",
X XrmQuarkToString(quark),
X shell_name);
X exit();
X
Xfind_new_position:
X
X position = 1;
X moved_cmdboard_arg = &cmdboard_data;
X
X while(*moved_cmdboard_arg != NULL )
X {
X if((*moved_cmdboard_arg)->grouped_arg == NULL )
X {
X
X if( position == current_position)
X {
X swap(pres_cmdboard_arg, moved_cmdboard_arg );
X goto loop;
X }
X position++;
X moved_cmdboard_arg = &((*moved_cmdboard_arg)->
X next);
X }
X
X else
X {
X new_branch_position_ptr = pres_cmdboard_arg;
X
X moved_grouped_arg = &((*moved_cmdboard_arg)->
X grouped_arg);
X while(*moved_grouped_arg != NULL)
X {
X if( position == current_position)
X {
X
X swap(pres_cmdboard_arg,
X moved_cmdboard_arg);
X swap_grouped(pres_grouped_arg,
X moved_grouped_arg);
X goto loop;
X }
X position++;
X moved_grouped_arg = &((*moved_grouped_arg)
X ->next);
X }
X moved_cmdboard_arg = &((*moved_cmdboard_arg)
X ->next);
X }
X }
X
Xloop: /* loop again*/
X ptr++;
X
X }
X check_tree( cmdboard_data);
X return( cmdboard_data );
X}
X
X
X
Xvoid
Xswap(pres_ptr, moved_ptr)
X struct _cmd_line_arg **pres_ptr;
X struct _cmd_line_arg **moved_ptr;
X{
X
X struct _cmd_line_arg *old_moved;
X struct _cmd_line_arg *old_pres_next;
X struct _cmd_line_arg *old_pres;
X struct _cmd_line_arg *old_moved_next;
X
X
X if( *pres_ptr == *moved_ptr)
X return;
X
X old_moved = *moved_ptr;
X old_pres_next = (*pres_ptr)->next;
X
X if((*moved_ptr)->next == *pres_ptr)
X {
X
X *moved_ptr = *pres_ptr;
X (*moved_ptr)->next = old_moved;
X ((*moved_ptr)->next)->next = old_pres_next;
X return;
X }
X
X old_pres = *pres_ptr;
X old_moved_next = (*moved_ptr)->next;
X
X if(old_pres_next == *moved_ptr)
X {
X
X *pres_ptr = *moved_ptr;
X (*pres_ptr)->next = old_pres;
X ((*pres_ptr)->next)->next = old_moved_next;
X return;
X }
X
X *pres_ptr = *moved_ptr;
X (*pres_ptr)->next = old_pres_next;
X *moved_ptr = old_pres;
X (*moved_ptr)->next = old_moved_next;
X
X}
X
X
X
Xvoid
Xswap_grouped(pres_ptr, moved_ptr)
X struct _grouped_arg **pres_ptr;
X struct _grouped_arg **moved_ptr;
X{
X struct _grouped_arg *old_moved;
X struct _grouped_arg *old_pres_next;
X struct _grouped_arg *old_pres;
X struct _grouped_arg *old_moved_next;
X
X if( *pres_ptr == *moved_ptr)
X return;
X
X old_moved = *moved_ptr;
X old_pres_next = (*pres_ptr)->next;
X
X if((*moved_ptr)->next == *pres_ptr)
X {
X
X *moved_ptr = *pres_ptr;
X (*moved_ptr)->next = old_moved;
X
X ((*moved_ptr)->next)->next = old_pres_next;
X return;
X }
X
X old_pres = *pres_ptr;
X old_moved_next = (*moved_ptr)->next;
X
X if(old_pres_next == *moved_ptr)
X {
X
X *pres_ptr = *moved_ptr;
X (*pres_ptr)->next = old_pres;
X ((*pres_ptr)->next)->next = old_moved_next;
X return;
X }
X
X *pres_ptr = *moved_ptr;
X (*pres_ptr)->next = old_pres_next;
X *moved_ptr = old_pres;
X (*moved_ptr)->next = old_moved_next;
X
X}
X
Xbuild_cmd_line(cmdboard_data, cmd_ptr)
X struct _cmd_line_arg *cmdboard_data;
X char *cmd_ptr;
X{
X int i,
X lines;
X struct _cmd_line_arg *pres_cmd_arg;
X struct _rec_cmd_line_arg *pres_rec_cmd_arg;
X struct _grouped_arg *pres_grouped_arg;
X char *pres_ptr;
X
X pres_cmd_arg = cmdboard_data;
X
X *cmd_ptr++ = ' ';
X
X while(pres_cmd_arg != NULL)
X {
X if( pres_cmd_arg->grouped_arg == NULL )
X {
X strcpy(cmd_ptr, pres_cmd_arg->tag_string);
X cmd_ptr += strlen(pres_cmd_arg->tag_string);
X
X strcpy(cmd_ptr, pres_cmd_arg->value);
X cmd_ptr += strlen(pres_cmd_arg->value);
X pres_cmd_arg = pres_cmd_arg->next;
X }
X else
X {
X pres_rec_cmd_arg = (struct _rec_cmd_line_arg *)
X pres_cmd_arg;
X i=0;
X lines = (strlen(pres_rec_cmd_arg->grouped_arg->
X value) -1) /
X pres_rec_cmd_arg->
X scrolltext_width + 1 ;
X while(i < lines )
X {
X pres_grouped_arg = pres_rec_cmd_arg->
X grouped_arg;
X while( pres_grouped_arg != NULL )
X {
X
X
X pres_ptr = (char *)
X ((long)(pres_grouped_arg->value)
X + i*(pres_rec_cmd_arg->
X scrolltext_width));
X
X strcpy(cmd_ptr, pres_grouped_arg->
X tag_string);
X cmd_ptr += strlen(pres_grouped_arg->
X tag_string);
X while( *pres_ptr != ' ' &&
X *pres_ptr != '\0')
X *cmd_ptr++ = *pres_ptr++;
X if(*pres_ptr == '\0')
X goto next_arg;
X
X
X pres_grouped_arg = pres_grouped_arg->next;
X }
X i++;
X }
Xnext_arg:
X pres_cmd_arg = pres_rec_cmd_arg->next;
X }
X
X
X
X }
X *cmd_ptr = '\0';
X}
X
Xvoid
Xinitialize_cmdboard(w, pres_cmd_arg)
X Widget w;
Xcaddr_t pres_cmd_arg;
X{
X static Boolean i = 0;
X if( i == 1 )
X return;
X reset_cmdboard(pres_cmd_arg);
X
X i = 1;
X}
X
Xvoid
Xclear_cmdboard(w)
X Widget w;
X{
X Arg args[2];
X XtArgVal ptr1;
X
X XtSetArg( args[0], XtNfreePointer1, &ptr1);
X XtGetValues( w, args, 1);
X
X (void)reset_cmdboard( ptr1 );
X}
X
Xvoid
Xreset_cmdboard( pres_cmd_arg)
X struct _cmd_line_arg *pres_cmd_arg;
X{
X
X struct _grouped_arg *pres_grouped_arg;
X struct _rec_cmd_line_arg *pres_rec_cmd_arg;
X XtTextBlock text;
X char temp0[1024];
X char *temp1,
X *temp;
X int num;
X Arg args[2];
X XtArgVal ptr;
X
X while(pres_cmd_arg != NULL )
X {
X if(pres_cmd_arg->grouped_arg == NULL)
X {
X text.firstPos = 0;
X text.ptr = pres_cmd_arg->default_string;
X text.length = strlen(pres_cmd_arg->default_string);
X
X XtTextReplace ( pres_cmd_arg->text_widget,
X 0, strlen(pres_cmd_arg->value),
X &text);
X }
X else
X {
X pres_rec_cmd_arg = (struct _rec_cmd_line_arg *)
X pres_cmd_arg;
X pres_grouped_arg = pres_cmd_arg->grouped_arg;
X
X if(*(pres_grouped_arg->default_string) != '\0')
X {
X /* Make a blank line */
X
X temp1 = temp0;
X
X for( num=0; num<pres_rec_cmd_arg->
X scrolltext_width -1; num++)
X *temp1++ = ' ';
X
X *temp1 = '\n';
X temp1++;
X *temp1 = '\0';
X
X while(pres_grouped_arg != NULL)
X {
X temp1 = (char *)((long)temp0 +
X (long)(pres_grouped_arg->value)
X -(long)(pres_rec_cmd_arg->scroll_string));
X temp = pres_grouped_arg->default_string;
X while( *temp != '\0' )
X *temp1++ = *temp++;
X pres_grouped_arg = pres_grouped_arg->
X next;
X }
X
X
X text.firstPos = 0;
X text.ptr = temp0;
X text.length = pres_rec_cmd_arg->
X scrolltext_width;
X }
X else
X text.length = 0;
X
X
X XtTextReplace( pres_cmd_arg->text_widget,
X 0, strlen(pres_rec_cmd_arg->
X scroll_string),
X &text);
X XtTextSetInsertionPoint(pres_cmd_arg->text_widget,
X 0);
X XtSetArg(args[0], XtNstring, &ptr);
X XtGetValues( pres_rec_cmd_arg->input_text_widget,
X args, 1);
X
X text.firstPos = 0;
X text.ptr = NULL;
X text.length = 0;
X
X XtTextReplace( pres_rec_cmd_arg->input_text_widget,
X 0, strlen(ptr),
X &text);
X }
X
X pres_cmd_arg = pres_cmd_arg->next;
X }
X
X}
END_OF_FILE
if test 22209 -ne `wc -c <'create_cmdboard.c'`; then
echo shar: \"'create_cmdboard.c'\" unpacked with wrong size!
fi
# end of 'create_cmdboard.c'
fi
if test -f 'create_msgboard.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'create_msgboard.c'\"
else
echo shar: Extracting \"'create_msgboard.c'\" \(4248 characters\)
sed "s/^X//" >'create_msgboard.c' <<'END_OF_FILE'
X#define MAX_NUM_ARGS 25
X#include <stdio.h>
X#include <X11/IntrinsicP.h>
X#include <X11/Intrinsic.h>
X#include <X11/CompositeP.h>
X#include <X11/CommandP.h>
X#include <X11/LabelP.h>
X#include <X11/StringDefs.h>
X#include <X11/Shell.h>
X#include <X11/Form.h>
X#include <X11/Core.h>
X#include <X11/VPaned.h>
X#include <X11/Text.h>
X#include <X11/AsciiText.h>
X#include "Helpcommand.h"
X
X#include "application.h"
X
X
Xextern Widget top_level;
X
X
XWidget label;
XWidget help_msg_widget;
XWidget error_msg_widget;
XWidget label_help_widget;
XWidget label_error_widget;
X
Xextern void get_shell_args();
X
XWidget create_msgboard(app_shell)
Xstruct shell *app_shell;
X{
X Widget shell,
X message,
X form,
X vpane,
X button = NULL;
X static Arg vpane_args[3] = {
X {XtNborderWidth, (XtArgVal)0},
X {XtNgripIndent, (XtArgVal) -30},
X };
X int button_entered = 0;
X Widget prev_widget = NULL;
X
X Arg args[MAX_NUM_ARGS];
X int num_args = 0;
X struct widget *child;
X int flag;
X char name[STR_LEN];
X int borderwidth = 10;
X
X /* build arglist for enclosing shell */
X (void)get_shell_args(top_level, app_shell->resources,
X args, &num_args );
X
X XtSetArg( args[num_args], XtNallowShellResize, TRUE);
X num_args++;
X
X shell = XtCreateApplicationShell("",
X topLevelShellWidgetClass, args, num_args);
X
X enter_shell_address( shell, app_shell->name);
X
X XtSetArg(args[0], XtNresizable, TRUE);
X
X /* Create a geometry manager widget that will tile *
X * the children in a vertical manner */
X if( strcmp( app_shell->name , "help") == 0 ||
X strcmp( app_shell->name , "error") == 0 )
X vpane = XtCreateManagedWidget("", formWidgetClass,
X shell, NULL, 0);
X else
X vpane = XtCreateManagedWidget("", vPanedWidgetClass,
X shell, vpane_args, 3);
X child = app_shell->child;
X
X /*loop over all the wdigets declared*/
X while(child !=NULL)
X {
X /* if object declared is a label build arglist and *
X * create it */
X if(!strcmp(child->type, "label"))
X {
X get_label_args(shell, child->resources,
X args, &num_args, app_shell->name);
X
X label = XtCreateManagedWidget("",
X labelWidgetClass,
X vpane, args, num_args);
X if( !strcmp( app_shell->name, "help"))
X label_help_widget = label;
X if( !strcmp( app_shell->name, "error"))
X label_error_widget = label;
X
X prev_widget = label;
X }
X
X /* if object declared is a message create it */
X if(strcmp(child->type, "message") == 0)
X {
X
X get_message_args(top_level, child->resources,
X args, &num_args, app_shell->name);
X
X XtSetArg(args[num_args], XtNallowResize,
X True);
X num_args++;
X XtSetArg(args[num_args], XtNeditType, XttextEdit);
X num_args++;
X XtSetArg(args[num_args], XtNtextOptions, editable|wordBreak);
X num_args++;
X XtSetArg(args[num_args], XtNlength, 1000);
X num_args++;
X XtSetArg(args[num_args], XtNresizable, TRUE);
X num_args++;
X XtSetArg(args[num_args], XtNsensitive, FALSE);
X num_args++;
X XtSetArg(args[num_args], XtNfromVert, prev_widget);
X num_args++;
X message = XtCreateManagedWidget("",
X asciiStringWidgetClass,
X vpane, args, num_args);
X
X /* if the msgboard is a help msgboard store the *
X * message address for later use */
X if( !strcmp( app_shell->name, "help"))
X help_msg_widget = message;
X
X if( !strcmp( app_shell->name, "error"))
X error_msg_widget = message;
X
X prev_widget = message;
X
X }
X
X if(!strcmp(child->type, "button"))
X {
X /* if this is the first button create a form to *
X * contain it with all the declared buttons */
X if(button_entered == 0)
X {
X XtSetArg(args[0], XtNborderWidth, 0);
X XtSetArg(args[1], XtNfromVert, prev_widget);
X form = XtCreateManagedWidget("", formWidgetClass,
X vpane, args, 2);
X prev_widget = form;
X button_entered = 1;
X }
X get_button_args(shell, child->resources,
X args, &num_args, app_shell->name, NULL);
X
X XtSetArg( args[num_args], XtNleft, XtChainLeft);
X num_args++;
X XtSetArg( args[num_args], XtNright, XtChainLeft);
X num_args++;
X XtSetArg( args[num_args], XtNfromHoriz,
X button);
X num_args++;
X
X button = XtCreateManagedWidget("", helpcommandWidgetClass,
X form, args, num_args);
X
X
X }
X
X child = child->next_widget;
X }
X return(shell);
X}
X
END_OF_FILE
if test 4248 -ne `wc -c <'create_msgboard.c'`; then
echo shar: \"'create_msgboard.c'\" unpacked with wrong size!
fi
# end of 'create_msgboard.c'
fi
if test -f 'create_scrollbar.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'create_scrollbar.c'\"
else
echo shar: Extracting \"'create_scrollbar.c'\" \(6467 characters\)
sed "s/^X//" >'create_scrollbar.c' <<'END_OF_FILE'
X#define MAX_NUM_ARGS 15
X#include <stdio.h>
X#include <X11/IntrinsicP.h>
X#include <X11/Intrinsic.h>
X#include <X11/CompositeP.h>
X#include <X11/CommandP.h>
X#include <X11/LabelP.h>
X#include <X11/StringDefs.h>
X#include <X11/Shell.h>
X#include <X11/Viewport.h>
X#include <X11/Form.h>
X#include <X11/Core.h>
X#include <X11/VPaned.h>
X#include "Helpcommand.h"
X#include "Dynamicshell.h"
X#include <sys/types.h>
X#include <sys/stat.h>
X#include <sys/dir.h>
X
X#include "application.h"
X#define UNKNOWN_STRING 0
X#define FILE_STRING 1
X#define DIRECTORY_STRING 2
X#define COMMAND_STRING 3
X
Xextern Widget top_level;
X
Xstatic Arg pane_args[3] = {
X {XtNdefaultDistance, (XtArgVal)0},
X {XtNborderWidth, (XtArgVal)0},
X {XtNgripIndent, (XtArgVal) -30},
X};
XWidget shell;
X
Xvoid destroy_shell(widget, closure, call_data)
XWidget widget;
Xcaddr_t closure;
Xcaddr_t call_data;
X{
X Widget shell,
X get_shell_address();
X
X shell = get_shell_address( closure );
X
X XtDestroyWidget(shell);
X
X remove_shell_address(closure);
X}
X
XWidget create_scrollbar(app_shell)
Xstruct shell *app_shell;
X{
X Widget
X vpane,
X label,
X viewport,
X vpane2,
X button;
X int status;
X char buf[STR_LEN];
X char name[STR_LEN];
X int string_type ;
X int num_args = 0;
X int viewport_created = 0;
X FILE *fp,
X *popen();
X XtArgVal ptr;
X static Arg args[MAX_NUM_ARGS];
X struct widget *child;
X char *tmp;
X struct stat filestat ;
X DIR *opendir() ;
X DIR *dirp ;
X struct direct *readdir() ;
X struct direct *dp ;
X
X /* build the argument list for the enclosing shell*/
X get_shell_args(top_level, app_shell->resources,
X args, &num_args);
X
X
X XtSetArg(args[num_args], XtNallowResize, TRUE);
X num_args++;
X XtSetArg(args[num_args], XtNtransient, False);
X num_args++;
X
X /* create enclosing shell */
X shell = XtCreatePopupShell("",
X dynamicshellWidgetClass,
X top_level, args, num_args);
X
X /* If the shell is dynamic it should be destroyed when it
X * popped down
X */
X XtSetArg( args[0], XtNupdateFrom, &ptr);
X XtGetValues( shell, args, 1);
X
X
X if ( ptr != NULL )
X XtAddCallback(shell, "popdownCallback", destroy_shell, app_shell->name);
X
X /* enter the created shell in the hash table */
X enter_shell_address( shell, app_shell->name);
X
X /* create the geometry management widget that will tile *
X * the label and buttons vertically */
X vpane = XtCreateManagedWidget("", vPanedWidgetClass,
X shell, pane_args, 3);
X
X child = app_shell->child;
X
X /* loop over all the declared labels and buttons */
X while(child != NULL)
X {
X /* if a label is declared create it */
X if(!strcmp(child->type,"label"))
X {
X get_label_args(top_level, child->resources,
X args, &num_args, app_shell->name);
X
X label = XtCreateManagedWidget("label",
X labelWidgetClass,
X vpane, args, num_args);
X goto next;
X }
X
X /*if a button is declared create it */
X if(!strcmp(child->type, "button"))
X {
X /*create one viewport for all buttons*/
X if( viewport_created == 0 )
X {
X XtSetArg(args[0], XtNallowVert, True);
X
X viewport = XtCreateManagedWidget("",
X viewportWidgetClass,
X vpane, args, 1);
X
X vpane2 = XtCreateManagedWidget("",
X vPanedWidgetClass,
X viewport, pane_args, 3);
X viewport_created = 1;
X }
X
X /*if the menu is dynamic search for button names*/
X if( ptr != NULL )
X {
X char ptr_expanded[1024] ;
X /*
X char buf3[STR_LEN] ;
X char *p1, *p2, *p3, *p4 ;
X char *getenv() ;
X int i ;
X
X for(p1=(char *)ptr, p2=ptr_expanded; *p1 != NULL; )
X {
X if (*p1 == '$')
X {
X p3 = buf3 ;
X p1++ ;
X while(*p1 != ' ' && *p1 != '$' && *p1 != '/' & *p1 != NULL)
X *p3++ = *p1++ ;
X *p3 = NULL ;
X p4 = getenv(buf3) ;
X i = strlen(p4) ;
X while(i--)
X *p2++ = *p4++ ;
X }
X else
X {
X *p2++ = *p1++ ;
X }
X *p2 = NULL ;
X }
X */
X strcpy(ptr_expanded, (char *)ptr) ;
X expand_string(ptr_expanded, 1024) ;
X
X /* get file info */
X string_type = UNKNOWN_STRING ;
X if (*ptr_expanded == '!')
X string_type = COMMAND_STRING ;
X else if (!stat(ptr_expanded, &filestat))
X {
X /* test if the argument to updatefrom is a directory*/
X if (filestat.st_mode & S_IFDIR)
X string_type = DIRECTORY_STRING ;
X else if (filestat.st_mode & S_IFREG)
X string_type = FILE_STRING ;
X else
X {
X fprintf(stderr,"Warning: <%s> not accessible\n",
X (char *)ptr) ;
X }
X }
X else
X {
X fprintf(stderr,"Warning: <%s> not found\n", (char *)ptr) ;
X }
X
X /*build arg list for all the scrollbar buttons*/
X get_button_args(top_level, child->resources,
X args, &num_args, app_shell->name, NULL);
X
X /* make each line in the specified file or each *
X * file in the directory a button in the menu */
X
X if (string_type == COMMAND_STRING)
X {
X/* fprintf(stderr,"updating from command\n") ; */
X if (NULL == (fp = popen(ptr_expanded+1, "r")))
X fprintf(stderr,"Error: Can't access <%s>\n", ptr_expanded) ;
X else
X {
X while(fgets(buf, 40, fp))
X {
X sscanf(buf,"%[^\n]", name);
X
X XtCreateManagedWidget(name, helpcommandWidgetClass,
X vpane2, args, num_args);
X }
X }
X pclose(fp);
X }
X else if (string_type == FILE_STRING)
X {
X/* fprintf(stderr,"updating from file\n") ; */
X if (NULL == (fp = fopen(ptr_expanded, "r")))
X fprintf(stderr,"Error: Can't access <%s>\n", ptr_expanded) ;
X else
X {
X while(fgets(buf, 40, fp))
X {
X sscanf(buf,"%[^\n]", name);
X
X XtCreateManagedWidget(name, helpcommandWidgetClass,
X vpane2, args, num_args);
X }
X }
X pclose(fp);
X }
X else if (string_type == DIRECTORY_STRING)
X {
X/* fprintf(stderr,"updating from directory\n") ; */
X dirp = opendir(ptr_expanded) ;
X for(dp=readdir(dirp); dp != NULL; dp = readdir(dirp))
X {
X if(*(dp->d_name) != '.')
X XtCreateManagedWidget(dp->d_name, helpcommandWidgetClass,
X vpane2, args, num_args);
X }
X closedir(dirp) ;
X }
X }
X /* if the shell is static create each individual button */
X else
X {
X get_button_args(top_level, child->resources,
X args, &num_args, NULL, app_shell->name);
X button = XtCreateManagedWidget("",
X helpcommandWidgetClass,
X vpane2, args, num_args );
X }
X
X goto next;
X }
X fprintf(stderr,"Error in menu %s. The object type %s is not supported in menus", app_shell->name, child->type);
X
Xnext:
X child = child->next_widget;
X }
X
X return( shell);
X}
END_OF_FILE
if test 6467 -ne `wc -c <'create_scrollbar.c'`; then
echo shar: \"'create_scrollbar.c'\" unpacked with wrong size!
fi
# end of 'create_scrollbar.c'
fi
if test -f 'create_shell.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'create_shell.c'\"
else
echo shar: Extracting \"'create_shell.c'\" \(599 characters\)
sed "s/^X//" >'create_shell.c' <<'END_OF_FILE'
X#define MAX_NUM_SHELLS 50
X#include <stdio.h>
X#include <X11/IntrinsicP.h>
X#include <X11/Intrinsic.h>
X#include <X11/Shell.h>
X#include "application.h"
X
XWidget create_shell( app_shell )
Xstruct shell *app_shell;
X{
X
X Widget shell = NULL;
X Widget create_scrollbar(),
X create_cmdboard(),
X create_msgboard();
X
X
X if ( strcmp(app_shell->type,"menu" ) == 0)
X shell = create_scrollbar( app_shell );
X
X
X if ( strcmp(app_shell->type, "msgboard" ) == 0)
X shell = create_msgboard( app_shell) ;
X
X
X if ( strcmp(app_shell->type, "cmdboard" ) == 0)
X shell = create_cmdboard( app_shell );
X
X return( shell );
X}
END_OF_FILE
if test 599 -ne `wc -c <'create_shell.c'`; then
echo shar: \"'create_shell.c'\" unpacked with wrong size!
fi
# end of 'create_shell.c'
fi
if test -f 'expand_string.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'expand_string.c'\"
else
echo shar: Extracting \"'expand_string.c'\" \(948 characters\)
sed "s/^X//" >'expand_string.c' <<'END_OF_FILE'
X#include <stdio.h>
X#include <ctype.h>
X
Xexpand_string(string, max_len)
X char *string ;
X int max_len ;
X{
X char old_string[1024] ;
X char env[128] ;
X char *o, *n, *e ;
X char *getenv() ;
X char *tmp ;
X int atchar ;
X int i ;
X int status ;
X
X strncpy(old_string, string, max_len) ;
X
X o = old_string ;
X n = string ;
X atchar = 0 ;
X status = 0 ;
X
X while(*o != NULL)
X {
X if (atchar++ > max_len)
X return(-1) ;
X if (*o != '$')
X *n++ = *o++ ;
X else
X {
X e = env ;
X o++ ;
X while(isalpha(*o) || isdigit(*o) || (*o == '_'))
X *e++ = *o++ ;
X *e = NULL ;
X tmp = getenv(env) ;
X if(NULL == tmp)
X {
X fprintf(stderr,"Warning: <%s> is an undefined variable\n",env) ;
X status = 1 ;
X }
X else
X strcpy(env, tmp) ;
X
X i = strlen(env) ;
X atchar += i ;
X if (atchar >= max_len)
X {
X fprintf(stderr,"Exceeded max string len\n") ;
X return(-1) ;
X }
X e = env ;
X while(i--)
X *n++ = *e++ ;
X }
X *n = NULL ;
X }
X return(status) ;
X}
END_OF_FILE
if test 948 -ne `wc -c <'expand_string.c'`; then
echo shar: \"'expand_string.c'\" unpacked with wrong size!
fi
# end of 'expand_string.c'
fi
if test -f 'get_button_args.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'get_button_args.c'\"
else
echo shar: Extracting \"'get_button_args.c'\" \(8783 characters\)
sed "s/^X//" >'get_button_args.c' <<'END_OF_FILE'
X#include <stdio.h>
X#include <sys/file.h>
X#include <X11/Intrinsic.h>
X#include <X11/StringDefs.h>
X#include <X11/Form.h>
X#include <X11/Command.h>
X#include "Helpcommand.h"
X
X#include "application.h"
X
Xextern void popdown_shell();
Xextern void popup();
Xextern void get_env();
Xextern void popdown();
Xextern void check();
Xextern void button_help();
Xextern void destroy();
Xextern void clear_cmdboard();
Xextern void runback();
Xextern void runfore();
Xextern void popdown_env();
Xvoid exit_app();
X
Xextern Widget top_level;
X
Xvoid
Xsetenv(w, closure, call_data)
X Widget w;
X caddr_t closure;
X caddr_t call_data;
X{
X Arg args[2];
X XtArgVal ptr;
X char *tmp;
X char *p1, *p2, *p3 ;
X char var[1024];
X char buf1[1024];
X char buf2[1024];
X char buf3[1024] ;
X char *strcat() ;
X char *getenv() ;
X char *malloc() ;
X int i ;
X
X /* Check command */
X p1 = closure ;
X p2 = buf2 ;
X *p2 = NULL ;
X while(*p1 != NULL)
X {
X if (!strncmp(p1, "buttonname", 10))
X {
X XtSetArg(args[0], XtNlabel, &ptr);
X XtGetValues( w, args, 1);
X i = strlen(ptr) ;
X p3 = (char *)ptr ;
X while(i--)
X *p2++ = *p3++ ;
X p1 += 10 ;
X }
X else
X {
X *p2++ = *p1++ ;
X }
X *p2 = NULL ;
X }
X *p2 = NULL ;
X expand_string(buf2, 1024) ; /* expand environment variables */
X p3 = malloc(1 + strlen(buf2)) ;
X if (p3 == NULL)
X {
X fprintf(stderr,"Error on allocation in setenv\n") ;
X exit(-1) ;
X }
X strcpy(p3, buf2) ;
X putenv(p3);
X sscanf(buf2,"%[^=]",var) ;
X tmp = getenv(var);
X}
X
Xvoid
Xget_button_args(w, resources, args, num_args, shell_name, free_ptr)
X Widget w;
X struct resource *resources;
X Arg args[];
X int *num_args;
X char *shell_name ;
X char *free_ptr ;
X{
X char buff[1024] ;
X int i=0;
X static XFontStruct *font;
X struct resource *pres_resource;
X char *label;
X int c=0;
X int pixel;
X static XtCallbackRec callback[8];
X static XtCallbackRec helpcallback[2];
X void store();
X FILE *fp,
X *popen();
X
X pres_resource = resources;
X
X while( pres_resource != NULL)
X {
X
X if( !strcmp( pres_resource->name, "background") )
X {
X pixel = get_pixel(pres_resource->value, shell_name,
X label);
X if( pixel < 0 )
X goto next;
X XtSetArg(args[i], XtNbackground, pixel);
X i++;
X goto next;
X }
X
X if( !strcmp( pres_resource->name, "bordercolor" ) )
X {
X pixel = get_pixel( pres_resource->value, shell_name,
X label);
X if( pixel < 0 )
X goto next;
X
X XtSetArg(args[i], XtNborderColor, pixel);
X i++;
X goto next;
X }
X
X if( !strcmp( pres_resource->name, "borderwidth"))
X {
X XtSetArg(args[i], XtNborderWidth,
X atoi(pres_resource->value) );
X i++;
X goto next;
X }
X
X if( !strcmp( pres_resource->name, "highlight") )
X {
X XtSetArg( args[i], XtNhighlightThickness,
X atoi( pres_resource->value) );
X i++;
X goto next;
X }
X
X if(!strcmp(pres_resource->name, "font"))
X {
X font = XLoadQueryFont(XtDisplay(w), pres_resource->
X value);
X if( font == NULL)
X {
X fprintf(stderr, "In shell %s: button %s. Could not load font %s. Using internal default.\n",
X shell_name,
X label, pres_resource->value);
X goto next;
X }
X XtSetArg(args[i], XtNfont, font);
X i++;
X goto next;
X }
X
X if( !strcmp(pres_resource->name, "foreground"))
X {
X
X pixel = get_pixel( pres_resource->value, shell_name,
X label);
X if( pixel < 0 )
X goto next;
X XtSetArg(args[i], XtNforeground, pixel);
X i++;
X goto next;
X }
X
X if( !strcmp(pres_resource->name, "height") )
X {
X XtSetArg(args[i], XtNheight,
X atoi( pres_resource->value));
X i++;
X goto next;
X }
X
X if(!strcmp(pres_resource->name,
X "internalheight"))
X {
X XtSetArg(args[i], XtNinternalHeight,
X atoi(pres_resource->value));
X i++;
X goto next;
X }
X
X if(!strcmp(pres_resource->name, "internalwidth"))
X {
X XtSetArg(args[i], XtNinternalWidth,
X atoi(pres_resource->value));
X i++;
X goto next;
X }
X
X
X if(!strcmp(pres_resource->name, "label") )
X {
X if( !strcmp(pres_resource->value,"null"))
X goto next;
X label = pres_resource->value;
X XtSetArg(args[i], XtNlabel,
X pres_resource->value);
X i++;
X goto next;
X }
X
X if(!strcmp(pres_resource->name, "width"))
X {
X XtSetArg(args[i], XtNwidth,
X atoi(pres_resource->value)), i++;
X goto next;
X }
X
X if(strcmp(pres_resource->name, "vertdistance") == 0)
X {
X XtSetArg(args[i], XtNvertDistance,
X atoi( pres_resource->value));
X i++;
X goto next;
X }
X
X if(strcmp(pres_resource->name, "horizdistance") == 0)
X {
X XtSetArg(args[i], XtNhorizDistance,
X atoi( pres_resource->value));
X i++;
X goto next;
X }
X
X if( strcmp(pres_resource->name, "help") == 0)
X {
X XtSetArg(args[i], XtNhelp, pres_resource->value);
X i++;
X helpcallback[0].callback = button_help;
X helpcallback[0].closure = (caddr_t)pres_resource->value;
X helpcallback[1].callback = NULL;
X helpcallback[1].closure = NULL;
X
X XtSetArg(args[i], XtNhelpCallback,
X helpcallback);
X i++;
X
X goto next;
X }
X
X if(!strcmp(pres_resource->name, "popup") )
X {
X callback[c].callback = popup;
X callback[c].closure = (caddr_t)pres_resource->value;
X c++;
X
X goto next;
X }
X
X if( !strcmp(pres_resource->name, "getenv") )
X {
X callback[c].callback = get_env;
X callback[c].closure = (caddr_t)pres_resource->value;
X c++;
X /* callback[c].callback = popdown;
X callback[c].closure = (caddr_t)free_ptr;
X c++;
X */
X goto next;
X }
X
X
X if( !strcmp(pres_resource->name, "store"))
X {
X callback[c].callback = store;
X callback[c].closure = pres_resource->value;
X c++;
X goto next;
X }
X
X if( !strcmp(pres_resource->name, "destroy"))
X {
X callback[c].callback = destroy;
X callback[c].closure = pres_resource->value;
X c++;
X goto next;
X }
X
X if( !strcmp(pres_resource->name, "popdown"))
X {
X callback[c].callback = popdown;
X callback[c].closure = pres_resource->value;
X c++;
X goto next;
X }
X
X if( !strcmp( pres_resource->name, "clearcmdboard"))
X {
X callback[c].callback = clear_cmdboard;
X c++;
X goto next;
X }
X
X if( !strcmp( pres_resource->name, "commandarg" ))
X {
X/* fprintf(stderr,"Working: %s\n", pres_resource->value) ; */
X strcpy(buff, pres_resource->value) ;
X expand_string(buff, 1024) ;
X strcpy(free_ptr, buff);
X/* fprintf(stderr," %s\n", buff) ; */
X if (*buff == '!')
X {
X /* Attempt to run command */
X/* fprintf(stderr,"Running: %s\n", pres_resource->value) ; */
X if (NULL != (fp = popen(pres_resource->value + 1, "r")))
X {
X if (NULL != fgets(buff, 1024, fp))
X {
X buff[strlen(buff)-1] = NULL ; /* Remove new line */
X strcpy(free_ptr, buff) ;
X }
X pclose(fp) ;
X }
X }
X else if (*buff != '[' && !access(buff, R_OK))
X {
X /* Assume to read file */
X if (NULL != (fp = fopen(pres_resource->value, "r")))
X {
X if (NULL != fgets(buff, 1024, fp))
X {
X buff[strlen(buff)-1] = NULL ; /* Remove new line */
X strcpy(free_ptr, buff) ;
X }
X fclose(fp) ;
X }
X }
X/* fprintf(stderr,"Returning: <%s>\n", free_ptr) ; */
X goto next;
X }
X
X if( !strcmp(pres_resource->name, "check"))
X {
X callback[c].callback = check;
X callback[c].closure = pres_resource->value;
X c++;
X goto next;
X }
X
X if( !strcmp(pres_resource->name, "runbackground"))
X {
X callback[c].callback = runback;
X callback[c].closure = pres_resource->value;
X c++;
X goto next;
X }
X
X if( !strcmp(pres_resource->name, "runforeground"))
X {
X callback[c].callback = runfore;
X callback[c].closure = pres_resource->value;
X c++;
X goto next;
X }
X
X if( !strncmp(pres_resource->name, "set", 3))
X {
X char buff1[STR_LEN] ;
X char buff2[STR_LEN] ;
X char *buff ;
X char *malloc() ;
X
X sscanf(pres_resource->name, "set%s", buff1) ;
X sprintf(buff2,"%s=%s",buff1, pres_resource->value) ;
X buff = malloc(strlen(buff2)+1) ;
X strcpy(buff, buff2) ;
X callback[c].callback = setenv;
X callback[c].closure = buff ;
X c++;
X goto next;
X }
X
X if( !strcmp(pres_resource->name, "exit"))
X {
X callback[c].callback = exit_app;
X callback[c].closure = pres_resource->value;
X c++;
X goto next;
X }
X
X fprintf(stderr, "In shell %s button %s: %s. No such option for buttons. Ignored.\n", shell_name, label,
X pres_resource->name);
X
X
Xnext:
X pres_resource = pres_resource->next;
X
X }
X
X
X
X if( c>0 )
X {
X callback[c].callback = NULL;
X callback[c].closure = NULL;
X XtSetArg( args[i], XtNcallback,
X callback);
X i++;
X
X }
X
X *num_args = i;
X
X}
X
Xvoid store(w, closure)
XWidget w;
Xcaddr_t closure;
X{
X XtArgVal label;
X Arg args[2];
X
X if( !strcmp(closure, "buttonname"))
X {
X XtSetArg( args[0], XtNlabel, &label);
X XtGetValues( w, args, 1);
X XStoreBuffer( XtDisplay(w), label, strlen(label), 0);
X return;
X }
X
X XStoreBuffer(XtDisplay(w), closure, strlen(closure), 0);
X}
X
X
X
X
X
Xvoid exit_app(w, closure)
XWidget w;
Xcaddr_t closure;
X{
X destroy_env();
X XtDestroyApplicationContext(XtWidgetToApplicationContext(top_level));
X exit();
X}
X
X
END_OF_FILE
if test 8783 -ne `wc -c <'get_button_args.c'`; then
echo shar: \"'get_button_args.c'\" unpacked with wrong size!
fi
# end of 'get_button_args.c'
fi
if test -f 'get_env.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'get_env.c'\"
else
echo shar: Extracting \"'get_env.c'\" \(3354 characters\)
sed "s/^X//" >'get_env.c' <<'END_OF_FILE'
X#include <stdio.h>
X#include <X11/IntrinsicP.h>
X#include <X11/Intrinsic.h>
X#include <X11/StringDefs.h>
X#include <X11/Shell.h>
X#include <X11/ShellP.h>
X#include "application.h"
X
Xstatic Widget popped_up_shells[128];
Xstatic int num_popped_shells = 0;
X
Xvoid popup();
Xvoid popdown_env();
X
Xextern Widget top_level;
X
X
Xvoid get_env(w, envmt)
XWidget w;
Xchar *envmt;
X{
X struct env_shell *get_env_shells();
X
X struct shell *app_shell;
X struct env_shell * initial_shell;
X
X
X /*get the initial shells of the new environment*/
X initial_shell = get_env_shells( envmt );
X
X if (initial_shell == NULL)
X {
X fprintf( stderr,"Error: environment %s not specified\n", envmt);
X return;
X }
X
X /*popdown all the currently popped up shells*/
X popdown_env();
X
X /*popup the initial shells*/
X while ( initial_shell != NULL )
X {
X popup(w, initial_shell->name);
X initial_shell = initial_shell->next;
X }
X}
X
Xvoid popdown_shell( shell )
XWidget shell;
X{
X int count;
X /* find the shell to be popped down and remove it from
X * the popped up list
X */
X for( count = 0 ; count<num_popped_shells; count++ )
X if( shell == popped_up_shells[count] )
X {
X popped_up_shells[count] =
X popped_up_shells[--num_popped_shells];
X /* pop it down*/
X XtPopdown( shell );
X }
X}
X
Xvoid popdown(w, shell_name)
XWidget w;
Xchar * shell_name;
X{
X Widget shell;
X Widget get_shell_address();
X
X /*find the shell adress of the shell called shell_name*/
X shell = get_shell_address(shell_name);
X if( shell == NULL )
X fprintf( stderr,"Error: shell %s to popdown not specified\n", shell_name);
X
X /*pop it down*/
X popdown_shell(shell);
X
X}
X
X
Xvoid popdown_env()
X
X{
X int count;
X
X /* popdown all the shells that are currently popped up */
X for ( count=0 ; count<num_popped_shells; count++ )
X XtPopdown( popped_up_shells[count] );
X
X num_popped_shells = 0;
X
X
X}
X
Xvoid destroy_env()
X{
X int count;
X
X /* popdown all the shells that are currently popped up */
X for ( count=0 ; count<num_popped_shells; count++ )
X XtDestroyWidget( popped_up_shells[count] );
X}
X
Xvoid popup(w, name)
XWidget w;
Xcaddr_t name;
X{
X Widget popup_shell;
X Widget get_shell_address();
X struct shell *shell_des;
X struct shell *get_shell();
X Widget create_shell();
X ShellWidget widgetshell;
X
X /*get the address of the shell called name*/
X popup_shell = get_shell_address( name );
X
X /* if not already created create it*/
X if ( popup_shell == NULL )
X {
X shell_des = get_shell( name );
X if( shell_des == NULL )
X {
X fprintf( stderr,"Error: shell %s to popup not specified\n", name);
X return;
X }
X
X popup_shell = create_shell( shell_des );
X
X }
X
X if( popup_shell == NULL )
X {
X fprintf(stderr,"Error: could not create shell %s shell type declaration error", name);
X return;
X }
X
X widgetshell = (ShellWidget)popup_shell;
X
X /*if not popped up pop it up*/
X if( !widgetshell->shell.popped_up )
X {
X XtPopup( popup_shell, XtGrabNone );
X popped_up_shells[num_popped_shells++] = popup_shell;
X }
X}
X
X
Xvoid destroy(w, shell_name)
XWidget w;
Xchar *shell_name;
X{
X Widget shell;
X Widget get_shell_address();
X
X
X
X shell = get_shell_address( shell_name );
X
X
X if( shell == NULL )
X {
X fprintf(stderr,"Error: shell %s to be destroyed not created or already destroyed", shell_name);
X return;
X }
X
X popdown(w, shell_name);
X
X XtDestroyWidget(shell);
X
X /* remove the destroyed shell from the shell address
X * hash table
X */
X remove_shell_address(shell_name);
X}
END_OF_FILE
if test 3354 -ne `wc -c <'get_env.c'`; then
echo shar: \"'get_env.c'\" unpacked with wrong size!
fi
# end of 'get_env.c'
fi
if test -f 'get_label_args.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'get_label_args.c'\"
else
echo shar: Extracting \"'get_label_args.c'\" \(3206 characters\)
sed "s/^X//" >'get_label_args.c' <<'END_OF_FILE'
X#include <stdio.h>
X#include <X11/IntrinsicP.h>
X#include <X11/Intrinsic.h>
X#include <X11/LabelP.h>
X#include <X11/StringDefs.h>
X#include <X11/Xlib.h>
X#include <X11/Form.h>
X#include "application.h"
X
Xget_label_args(w, resources, args,
Xnum_args, shell_name)
XWidget w;
Xstruct resource *resources;
XArg args[];
Xint *num_args;
Xchar *shell_name;
X{
X int pixel;
X int i=0;
X XFontStruct *font;
X struct resource *pres_resource;
X char *label;
X int label_width = 0;
X int string_width = 0;
X
X pres_resource = resources;
X
X while( pres_resource != NULL)
X {
X
X
X if( strcmp( pres_resource->name, "background") == 0)
X {
X pixel = get_pixel( pres_resource->value);
X if ( pixel < 0 )
X goto next;
X XtSetArg(args[i], XtNbackground, pixel);
X i++;
X goto next;
X }
X
X if( strcmp( pres_resource->name, "bordercolor") == 0)
X {
X pixel = get_pixel( pres_resource->value);
X if ( pixel < 0 )
X goto next;
X XtSetArg(args[i], XtNborderColor, pixel);
X i++;
X goto next;
X }
X
X if( strcmp( pres_resource->name, "borderwidth") ==0)
X {
X XtSetArg(args[i], XtNborderWidth,
X atoi(pres_resource->value) );
X i++;
X goto next;
X }
X
X if(strcmp(pres_resource->name, "font") == 0)
X {
X font = XLoadQueryFont(XtDisplay(w),pres_resource->value);
X if ( font == NULL)
X {
X fprintf(stderr, "In shell %s: button %s. Could not load font %s. Using internal default.\n",
X shell_name,
X label, pres_resource->value);
X goto next;
X }
X
X XtSetArg(args[i], XtNfont, font);
X i++;
X goto next;
X }
X
X if( strcmp(pres_resource->name, "foreground") == 0)
X {
X
X pixel = get_pixel( pres_resource->value);
X if ( pixel < 0 )
X goto next;
X XtSetArg(args[i], XtNforeground, pixel);
X i++;
X goto next;
X }
X
X if(strcmp(pres_resource->name, "height") == 0)
X {
X XtSetArg(args[i], XtNheight,
X atoi( pres_resource->value));
X i++;
X goto next;
X }
X
X if(strcmp(pres_resource->name,
X "internalheight") == 0)
X {
X XtSetArg(args[i], XtNinternalHeight,
X atoi(pres_resource->value));
X i++;
X goto next;
X }
X
X if(strcmp(pres_resource->name, "internalwidth") == 0)
X {
X XtSetArg(args[i], XtNinternalWidth,
X atoi(pres_resource->value));
X i++;
X goto next;
X }
X
X if(strcmp(pres_resource->name, "justify") == 0)
X {
X XtSetArg(args[i], XtNjustify,
X pres_resource->value);
X i++;
X goto next;
X }
X
X if(strcmp(pres_resource->name, "label") == 0)
X {
X label = pres_resource->value;
X XtSetArg(args[i], XtNlabel,
X pres_resource->value);
X i++;
X goto next;
X }
X
X if(strcmp(pres_resource->name, "width") == 0)
X {
X label_width = atoi(pres_resource->value);
X XtSetArg(args[i], XtNwidth,
X pres_resource->value), i++;
X goto next;
X }
X
X if(strcmp(pres_resource->name, "x") == 0)
X {
X XtSetArg(args[i], XtNx,
X atoi( pres_resource->value));
X i++;
X goto next;
X }
X
X if(strcmp(pres_resource->name, "y") == 0)
X {
X XtSetArg(args[i], XtNy,
X atoi( pres_resource->value));
X i++;
X goto next;
X }
X fprintf(stderr, "In shell %s label %s: %s. No such option for labels. Ignored.\n", shell_name, label,
X pres_resource->name);
X
Xnext:
X pres_resource = pres_resource->next;
X
X }
X
X *num_args = i;
X
X}
X
END_OF_FILE
if test 3206 -ne `wc -c <'get_label_args.c'`; then
echo shar: \"'get_label_args.c'\" unpacked with wrong size!
fi
# end of 'get_label_args.c'
fi
if test -f 'get_message_args.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'get_message_args.c'\"
else
echo shar: Extracting \"'get_message_args.c'\" \(4841 characters\)
sed "s/^X//" >'get_message_args.c' <<'END_OF_FILE'
X#include <stdio.h>
X#include <X11/IntrinsicP.h>
X#include <X11/Intrinsic.h>
X#include <X11/LabelP.h>
X#include <X11/StringDefs.h>
X#include <X11/Xlib.h>
X#include <X11/Form.h>
X#include <X11/Text.h>
X#include <X11/AsciiText.h>
X
X#include "application.h"
X
Xint max_help_msg_width ,
Xmax_help_msg_height;
X
Xint max_error_msg_width,
Xmax_error_msg_height;
X
XXFontStruct *help_msg_font;
XXFontStruct *error_msg_font;
X
Xget_message_args(w, resources, args,
Xnum_args, shell_name)
XWidget w;
Xstruct resource *resources;
XArg args[];
Xint *num_args;
Xchar *shell_name;
X{
X int i=0;
X struct resource *pres_resource;
X char *label;
X char *font_name;
X int label_width,
X width,
X height,
X char_height,
X max_width,
X max_height,
X pixel;
X XFontStruct *font = NULL;
X
X pres_resource = resources;
X
X while( pres_resource != NULL)
X {
X if( !strcmp( pres_resource->name, "label"))
X {
X label = pres_resource->value;
X if( strcmp( label, "help") != 0 &&
X strcmp( label, "error") != 0)
X {
X XtSetArg(args[i], XtNstring, pres_resource->value);
X i++;
X }
X goto next;
X }
X
X if( strcmp( pres_resource->name, "background") == 0)
X {
X pixel = get_pixel(pres_resource->value);
X XtSetArg(args[i], XtNbackground,
X pixel);
X i++;
X goto next;
X }
X
X if( strcmp( pres_resource->name, "bordercolor") == 0)
X {
X pixel = get_pixel(pres_resource->value);
X XtSetArg(args[i], XtNborderColor,
X pixel);
X i++;
X goto next;
X }
X
X if( strcmp( pres_resource->name, "borderwidth") ==0)
X {
X XtSetArg(args[i], XtNborderWidth,
X atoi(pres_resource->value) );
X i++;
X goto next;
X }
X
X if(strcmp(pres_resource->name, "font") == 0)
X {
X font_name = pres_resource->value;
X font = XLoadQueryFont(XtDisplay(w),font_name);
X if ( font == NULL)
X {
X fprintf(stderr, "In shell %s: message %s. Could not load font %s. Using internal default.\n",
X shell_name,
X label, pres_resource->value);
X font = XLoadQueryFont(XtDisplay(w), XtDefaultFont);
X }
X
X XtSetArg(args[i], XtNfont, font);
X i++;
X if( strcmp(label, "help"))
X help_msg_font = font;
X
X if( strcmp(label, "error"))
X error_msg_font = font;
X
X goto next;
X }
X
X if( strcmp(pres_resource->name, "foreground") == 0)
X {
X pixel = get_pixel(pres_resource->value);
X XtSetArg(args[i], XtNforeground,
X pixel);
X i++;
X goto next;
X }
X
X /* if(strcmp(pres_resource->name, "height") == 0)
X {
X XtSetArg(args[i], XtNheight,
X atoi( pres_resource->value)); i++;
X goto next;
X }
X
X
X if(strcmp(pres_resource->name, "width") == 0)
X {
X label_width = atoi(pres_resource->value);
X XtSetArg(args[i], XtNwidth,
X atoi(pres_resource->value)), i++;
X goto next;
X }
X
X if(strcmp(pres_resource->name, "vertdistance") == 0)
X {
X XtSetArg(args[i], XtNvertDistance,
X atoi( pres_resource->value)); i++;
X
X goto next;
X }
X
X if(strcmp(pres_resource->name, "horizdistance") == 0)
X {
X XtSetArg(args[i], XtNhorizDistance,
X atoi( pres_resource->value)); i++;
X
X goto next;
X }
X
X/* if(strcmp(pres_resource->name, "label") == 0)
X {
X XtSetArg(args[i], XtNstring, ""); i++;
X strcpy(string , pres_resource->value);
X goto next;
X }
X*/
X if(strcmp(pres_resource->name, "maxwidth") == 0)
X {
X if ( !strcmp( label,"help") )
X {
X max_help_msg_width = atoi(pres_resource->value);
X goto next;
X }
X
X if ( !strcmp( label,"error") )
X {
X max_error_msg_width = atoi(pres_resource->value);
X goto next;
X }
X
X
X max_width = atoi(pres_resource->value);
X goto next;
X }
X
X
X if(strcmp(pres_resource->name, "maxheight") == 0)
X {
X if ( !strcmp(label,"help"))
X {
X max_help_msg_height = atoi(pres_resource->value);
X goto next;
X }
X
X
X if ( !strcmp(label,"error"))
X {
X max_error_msg_height = atoi(pres_resource->value);
X goto next;
X }
X max_height = atoi(pres_resource->value);
X goto next;
X
X }
X
X fprintf(stderr, "In shell %s message %s: %s.\n No such option for buttons. Ignored.\n", shell_name, label,
X pres_resource->name);
Xnext:
X pres_resource = pres_resource->next;
X }
X
X
X
X
X if( strcmp( label, "help") != 0 && strcmp( label, "error") != 0)
X {
X if( font == NULL)
X {
X font = XLoadQueryFont(XtDisplay(w), XtDefaultFont);
X }
X
X width = XTextWidth(font, label, strlen(label));
X
X char_height = font->ascent + font->descent;
X
X height = (width/max_width +2) * char_height;
X
X if(width > max_width)
X {
X XtSetArg(args[i], XtNwidth, max_width);
X i++;
X XtSetArg(args[i], XtNheight, height+2);
X i++;
X }
X
X else
X {
X XtSetArg( args[i], XtNwidth, width+2);
X i++;
X XtSetArg( args[i], XtNheight, 2*char_height + 2);
X i++;
X }
X }
X
X *num_args = i;
X}
X
X
END_OF_FILE
if test 4841 -ne `wc -c <'get_message_args.c'`; then
echo shar: \"'get_message_args.c'\" unpacked with wrong size!
fi
# end of 'get_message_args.c'
fi
if test -f 'get_pixel.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'get_pixel.c'\"
else
echo shar: Extracting \"'get_pixel.c'\" \(1190 characters\)
sed "s/^X//" >'get_pixel.c' <<'END_OF_FILE'
X#include <stdio.h>
X#include <X11/IntrinsicP.h>
X#include <X11/Intrinsic.h>
X#include <X11/CompositeP.h>
X#include <X11/CommandP.h>
X#include <X11/LabelP.h>
X#include <X11/Box.h>
X#include <X11/StringDefs.h>
X#include <X11/Shell.h>
X#include <X11/Viewport.h>
X#include <X11/Form.h>
X#include <X11/Core.h>
X#include "application.h"
X
Xextern Widget top_level;
X
Xint get_pixel(string, shell_name, item_name)
Xchar *string;
Xchar *shell_name;
Xchar *item_name;
X
X{
X
X Colormap cmap;
X Colormap XDefaultColormap();
X
X XColor color;
X int status;
X
X
X cmap = XDefaultColormap( XtDisplay( top_level),
X DefaultScreen(XtDisplay( top_level)));
X if ( cmap == NULL)
X {
X fprintf(stderr, " Default Colormap Not Installed\n");
X exit();
X }
X
X status = XParseColor( XtDisplay( top_level), cmap, string, &color);
X
X if ( status == 0 )
X {
X fprintf(stderr,
X "In shell %s item %s: %s. No such color in the database. Using internal default.\n", shell_name, item_name,
X
X string);
X return (-1);
X }
X
X
X status = XAllocColor( XtDisplay( top_level), cmap, &color);
X if ( status == 0 )
X fprintf(stderr, "In shell %s item %s. Unable to allocate the color resource. Using internal default.\n");
X
X
X return( color.pixel);
X
X}
X
END_OF_FILE
if test 1190 -ne `wc -c <'get_pixel.c'`; then
echo shar: \"'get_pixel.c'\" unpacked with wrong size!
fi
# end of 'get_pixel.c'
fi
if test -f 'get_shell_args.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'get_shell_args.c'\"
else
echo shar: Extracting \"'get_shell_args.c'\" \(2174 characters\)
sed "s/^X//" >'get_shell_args.c' <<'END_OF_FILE'
X#include <stdio.h>
X#include <X11/Intrinsic.h>
X#include <X11/StringDefs.h>
X#include "Dynamicshell.h"
X#include "application.h"
X
Xvoid get_shell_args(w, resources, args,
Xnum_args, name )
XWidget w;
Xstruct resource *resources;
XArg args[];
Xint *num_args;
Xchar **name;
X{
X
X struct resource *pres_resource;
X int i=0;
X int update_entered = 0;
X char *shell_name;
X pres_resource = resources;
X
X while( pres_resource != NULL)
X
X {
X /* printf (" shell res name %s \n", pres_resource->name);
X printf (" shell res value %s \n", pres_resource->value);*/
X
X if(!strcmp(pres_resource->name, "label"))
X {
X /* strcpy( name, pres_resource->value ); */
X shell_name = pres_resource->value;
X goto next;
X }
X
X if(!strcmp(pres_resource->name, "width"))
X {
X XtSetArg(args[i], XtNwidth,
X atoi(pres_resource->value)), i++;
X goto next;
X }
X
X if(!strcmp(pres_resource->name, "height"))
X {
X XtSetArg(args[i], XtNheight,
X atoi( pres_resource->value));
X i++;
X goto next;
X }
X
X if(!strcmp(pres_resource->name, "maxheight"))
X {
X XtSetArg(args[i], XtNmaxHeight,
X atoi(pres_resource->value));
X i++;
X goto next;
X }
X
X if(!strcmp(pres_resource->name, "maxwidth"))
X {
X XtSetArg(args[i], XtNmaxWidth,
X atoi(pres_resource->value));
X i++;
X goto next;
X }
X
X if(!strcmp(pres_resource->name, "x"))
X {
X XtSetArg(args[i], XtNx,
X atoi( pres_resource->value));
X i++;
X goto next;
X }
X
X if(!strcmp(pres_resource->name, "y"))
X {
X XtSetArg(args[i], XtNy,
X atoi( pres_resource->value));
X i++;
X goto next;
X }
X
X if(!strcmp(pres_resource->name, "updatefrom"))
X {
X XtSetArg( args[i], XtNupdateFrom,
X pres_resource->value);
X i++;
X update_entered = 1;
X goto next;
X }
X
X if(!strcmp(pres_resource->name, "override"))
X {
X if(!strcmp(pres_resource->value,"on"))
X XtSetArg( args[i], XtNoverrideRedirect, True);
X i++;
X goto next;
X }
X
X fprintf(stderr, "In shell %s:%s. No such option for shells. Ignored.\n", shell_name, pres_resource->name);
X
Xnext:
X pres_resource = pres_resource->next;
X
X }
X if( update_entered == 0 )
X {
X XtSetArg( args[i], XtNupdateFrom, NULL );
X i++;
X }
X
X *num_args = i;
X}
X
X
END_OF_FILE
if test 2174 -ne `wc -c <'get_shell_args.c'`; then
echo shar: \"'get_shell_args.c'\" unpacked with wrong size!
fi
# end of 'get_shell_args.c'
fi
if test -f 'get_string.c' -a "${1}" != "-c" ; then
echo shar: Will not clobber existing file \"'get_string.c'\"
else
echo shar: Extracting \"'get_string.c'\" \(2034 characters\)
sed "s/^X//" >'get_string.c' <<'END_OF_FILE'
X/* Removes leading white space, then retrieves a string terminated by
X * white space, or a string bounded by double quotes.
X */
X
X#include <stdio.h>
X#include <ctype.h>
Xget_string(fp, string, stopchar, max)
X FILE *fp ;
X char *string ;
X int stopchar ;
X int max ;
X{
X char *s ;
X int m ;
X int C ;
X
X m = 0 ;
X s = string ;
X
X/* Skip white spaces */
X while(isspace(C = get_a_char(fp)))
X ;
X if (EOF == C)
X eof_error() ;
X
X/* Read strings enclosed by "" */
X if (C == '"')
X {
X do
X {
X if (EOF == (C = get_a_char(fp)))
X eof_error() ;
X if (C == '\\')
X {
X while(isspace(C = get_a_char(fp)))
X ;
X if (EOF == C)
X eof_error() ;
X }
X if (++m >= max)
X {
X *s = NULL ;
X fprintf(stderr,"Error: Ran out of space <%d chars max> reading:\n<%s>\n",
X max, string) ;
X exit(-1) ;
X }
X else
X *s = toascii(C) ;
X } while(*s++ != '"') ;
X s-- ;
X }
X/* Read strings terminated by white space "" */
X else
X {
X *s = (char)C ;
X do
X {
X s++ ;
X if (EOF == (C = get_a_char(fp)))
X eof_error ;
X if (C == '\\')
X {
X while(isspace(C = get_a_char(fp)))
X ;
X if (EOF == C)
X eof_error() ;
X }
X if (++m >= max)
X {
X *s = NULL ;
X fprintf(stderr,"Error: Ran out of space reading <%s>\n",
X string) ;
X exit(-1) ;
X }
X else
X *s = toascii(C) ;
X } while((! isspace(C)) && (C != stopchar)) ;
X ungetc( C, fp);
X }
X *s = NULL ;
X return(0) ;
X}
X
Xget_symbol(fp, c)
X FILE *fp ;
X int *c ;
X{
X int C ;
X while(isspace(C = get_a_char(fp)))
X ;
X if (EOF == C)
X eof_error() ;
X *c = toascii(C) ;
X}
X
Xcheck_eof(fp)
X FILE *fp ;
X{
X int C ;
X while(isspace(C = get_a_char(fp)))
X ;
X if (EOF == C)
X return(1) ;
X
X ungetc( C, fp);
X return(0) ;
X}
X
Xstatic
Xeof_error()
X{
X fprintf(stderr, "Error: unexpected end of file\n") ;
X exit(-1) ;
X}
X
X/* This subroutine discards any lines beginning with the # symbol */
Xstatic
Xget_a_char(fp)
X FILE *fp ;
X{
X static int lastc = '\n' ;
X int c ;
X
X c = getc(fp) ;
X
X if(lastc == '\n')
X while (c == '#')
X {
X while(getc(fp) != '\n')
X ;
X c = getc(fp) ;
X }
X return(lastc = c) ;
X}
END_OF_FILE
if test 2034 -ne `wc -c <'get_string.c'`; then
echo shar: \"'get_string.c'\" unpacked with wrong size!
fi
# end of 'get_string.c'
fi
echo shar: End of shell archive.
exit 0
More information about the Comp.sources.x
mailing list