[comp.sources.sun] v02i035: Contool 3.0, patch 2

mcgrew@aramis.rutgers.edu (Charles Mcgrew) (11/29/90)

Submitted-by: chuck@melmac.harris-atd.com (Chuck Musciano)
Posting-number: Volume 2, Issue 35
Archive-name: contool3.0/patch02


     This is patch number 2 for contool 3.0.  This patch fixes a few
minor bugs, including the annoying "coming up with a 1x1 icon" bug that
was vexing a few people.  There is also a new "About contool..." window
which gives a more detailed history of the tool.

     After applying this patch, make sure you check the Imakefile or
Makefile to verify that MAILER is defined to be your system mailer.
The default is /usr/ucb/mail, which may not work on all systems.

Chuck Musciano				ARPA  : chuck@trantor.harris-atd.com
Harris Corporation 			Usenet: ...!uunet!x102a!trantor!chuck
PO Box 37, MS 3A/1912			AT&T  : (407) 727-6131
Melbourne, FL 32902			FAX   : (407) 729-2537

A good newspaper is never good enough,
	but a lousy newspaper is a joy forever.		-- Garrison Keillor

#! /bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of shell archive."
# Contents:  patch
# Wrapped by chuck@melmac on Thu Nov  1 15:12:59 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'patch' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'patch'\"
else
echo shar: Extracting \"'patch'\" \(57082 characters\)
sed "s/^X//" >'patch' <<'END_OF_FILE'
X*** Makefile.orig	Thu Nov  1 15:09:31 1990
X--- Makefile	Thu Nov  1 14:51:23 1990
X***************
X*** 8,13 ****
X--- 8,16 ----
X  # Where to install the help file
X  HELPDIR		= /usr/local/lib/help
X  
X+ # Mailer you use
X+ MAILER		= /usr/ucb/mail
X+ 
X  # paths to be searched for icons
X  ICON_PATH	= .:./icons:/usr/local/images:/usr/include/images
X  
X***************
X*** 18,26 ****
X  LDFLAGS		= -L$(OPENWINHOME)/lib
X  
X  # Where your XView include files are installed
X! CPPFLAGS	= -I$(OPENWINHOME)/include
X  
X! CONTOOL		= contool.o contool_ui.o error.o expand.o filters.o load.o load_icon.o logging.o misc.o parse.o props.o regexp.o store.o window_misc.o
X  
X  OPTIONS		= -O
X  
X--- 21,31 ----
X  LDFLAGS		= -L$(OPENWINHOME)/lib
X  
X  # Where your XView include files are installed
X! CPPFLAGS	= -I$(OPENWINHOME)/include -DMAILER=\"$(MAILER)\"
X  
X! CONTOOL		= about.o busy.o contool.o contool_ui.o error.o expand.o filename_completion.o \
X! 		  filters.o load.o load_icon.o logging.o misc.o parse.o \
X! 		  pinned_menu_notify.o place_dialog.o props.o regexp.o send_mail.o store.o
X  
X  OPTIONS		= -O
X  
X***************
X*** 50,55 ****
X--- 55,64 ----
X  
X  #dependencies
X  
X+ about.o: contool_ui.h manifest.h
X+ 
X+ busy.o: manifest.h
X+ 
X  contool.o: manifest.h contool.h contool_ui.h icons/default_good.icon \
X  	 icons/default_bad.icon icons/default_flash.icon icons/mask.icon
X  
X***************
X*** 59,70 ****
X  
X  expand.o: manifest.h
X  
X  filters.o: manifest.h contool.h contool_ui.h images/single.icon \
X  	 images/range.icon images/empty.icon
X  
X  load.o: manifest.h contool.h contool_ui.h
X  
X! load_icon.o: manifest.h contool.h
X  
X  logging.o: manifest.h contool.h contool_ui.h
X  
X--- 68,81 ----
X  
X  expand.o: manifest.h
X  
X+ filename_completion.o: manifest.h
X+ 
X  filters.o: manifest.h contool.h contool_ui.h images/single.icon \
X  	 images/range.icon images/empty.icon
X  
X  load.o: manifest.h contool.h contool_ui.h
X  
X! load_icon.o: manifest.h
X  
X  logging.o: manifest.h contool.h contool_ui.h
X  
X***************
X*** 72,81 ****
X  
X  parse.o: manifest.h contool.h lex.c
X  
X  props.o: manifest.h contool.h contool_ui.h
X  
X  regexp.o: manifest.h contool.h
X  
X! store.o: manifest.h contool.h contool_ui.h
X  
X! window_misc.o: manifest.h contool_ui.h
X--- 83,96 ----
X  
X  parse.o: manifest.h contool.h lex.c
X  
X+ pinned_menu_notify.o: manifest.h
X+ 
X+ place_dialog.o: manifest.h
X+ 
X  props.o: manifest.h contool.h contool_ui.h
X  
X  regexp.o: manifest.h contool.h
X  
X! send_mail.o: contool_ui.h manifest.h
X  
X! store.o: manifest.h contool.h contool_ui.h
X*** Imakefile.orig	Thu Nov  1 15:09:34 1990
X--- Imakefile	Thu Nov  1 14:51:22 1990
X***************
X*** 2,20 ****
X  
X  HELPDIR		= /usr/local/lib/help
X  
X  LOCAL_LIBRARIES = -lxview -lolgx $(XLIB)
X  
X  LDOPTIONS	= -L$(OPENWINHOME)/lib
X  
X! CFLAGS		= -O -I$(OPENWINHOME)/include
X  
X! SRCS		= contool.c contool_ui.c error.c expand.c filters.c \
X! 		  load.c load_icon.c logging.c misc.c parse.y props.c \
X! 		  regexp.c store.c window_misc.c
X  
X! OBJS		= contool.o contool_ui.o error.o expand.o filters.o \
X! 		  load.o load_icon.o logging.o misc.o parse.o props.o \
X! 		  regexp.o store.o window_misc.o
X  
X  ComplexProgramTarget(contool)
X  
X--- 2,22 ----
X  
X  HELPDIR		= /usr/local/lib/help
X  
X+ MAILER		= /usr/ucb/mail
X+ 
X  LOCAL_LIBRARIES = -lxview -lolgx $(XLIB)
X  
X  LDOPTIONS	= -L$(OPENWINHOME)/lib
X  
X! CFLAGS		= -O -I$(OPENWINHOME)/include -DMAILER=\"$(MAILER)\"
X  
X! SRCS		= about.c busy.c contool.c contool_ui.c error.c expand.c filename_completion.c \
X! 		  filters.c load.c load_icon.c logging.c misc.c parse.y \
X! 		  pinned_menu_notify.c place_dialog.c props.c regexp.c send_mail.c store.c
X  
X! OBJS		= about.o busy.o contool.o contool_ui.o error.o expand.o filename_completion.o \
X! 		  filters.o load.o load_icon.o logging.o misc.o parse.o \
X! 		  pinned_menu_notify.o place_dialog.o props.o regexp.o send_mail.o store.o
X  
X  ComplexProgramTarget(contool)
X  
X*** README.orig	Thu Nov  1 15:09:35 1990
X--- README	Thu Nov  1 13:39:35 1990
X***************
X*** 54,59 ****
X--- 54,61 ----
X  		HELPDIR		Where the context-sensitive help file
X  				will be stored.
X  
X+ 		MAILER		The full path of your system mailer.
X+ 
X  		ICON_PATH	Path to search (at runtime) for other
X  				icon files.  This path will only be used
X  				if the user does not have the ICON_PATH
X***************
X*** 178,180 ****
X--- 180,185 ----
X  				Fixed handling of dialog boxes under
X  				   window managers other than olwm.
X  				Add Imakefile.
X+ 	3.0b			Fixed "tiny icon" bug.
X+ 				Added "About contool..." dialog.
X+ 				Source restructuring for maintainability.
X*** contool.info.orig	Thu Nov  1 15:09:37 1990
X--- contool.info	Thu Nov  1 13:47:28 1990
X***************
X*** 281,283 ****
X--- 281,364 ----
X  # 
X  :accept_store
X  The Store button writes the desired items to the configuration file.  The entire file is overwritten with the data.  Thus, a file containing properties and filters will be completely rewritten, even if you only write the filters to it.
X+ # 
X+ :about_controls
X+ This window gives you some details about the development of contool, encourages you to correspond with the developer to improve future versions of contool, and delineates the restrictions placed on the contool source code.
X+ # 
X+ :message1
X+ This window gives you some details about the development of contool, encourages you to correspond with the developer to improve future versions of contool, and delineates the restrictions placed on the contool source code.
X+ # 
X+ :message5
X+ This window gives you some details about the development of contool, encourages you to correspond with the developer to improve future versions of contool, and delineates the restrictions placed on the contool source code.
X+ # 
X+ :message6
X+ This window gives you some details about the development of contool, encourages you to correspond with the developer to improve future versions of contool, and delineates the restrictions placed on the contool source code.
X+ # 
X+ :message7
X+ This window gives you some details about the development of contool, encourages you to correspond with the developer to improve future versions of contool, and delineates the restrictions placed on the contool source code.
X+ # 
X+ :message8
X+ This window gives you some details about the development of contool, encourages you to correspond with the developer to improve future versions of contool, and delineates the restrictions placed on the contool source code.
X+ # 
X+ :message9
X+ This window gives you some details about the development of contool, encourages you to correspond with the developer to improve future versions of contool, and delineates the restrictions placed on the contool source code.
X+ # 
X+ :message10
X+ This window gives you some details about the development of contool, encourages you to correspond with the developer to improve future versions of contool, and delineates the restrictions placed on the contool source code.
X+ # 
X+ :message15
X+ This window gives you some details about the development of contool, encourages you to correspond with the developer to improve future versions of contool, and delineates the restrictions placed on the contool source code.
X+ # 
X+ :message11
X+ This window gives you some details about the development of contool, encourages you to correspond with the developer to improve future versions of contool, and delineates the restrictions placed on the contool source code.
X+ # 
X+ :message12
X+ This window gives you some details about the development of contool, encourages you to correspond with the developer to improve future versions of contool, and delineates the restrictions placed on the contool source code.
X+ # 
X+ :message13
X+ This window gives you some details about the development of contool, encourages you to correspond with the developer to improve future versions of contool, and delineates the restrictions placed on the contool source code.
X+ # 
X+ :message14
X+ This window gives you some details about the development of contool, encourages you to correspond with the developer to improve future versions of contool, and delineates the restrictions placed on the contool source code.
X+ # 
X+ :message16
X+ This window gives you some details about the development of contool, encourages you to correspond with the developer to improve future versions of contool, and delineates the restrictions placed on the contool source code.
X+ # 
X+ :message17
X+ This window gives you some details about the development of contool, encourages you to correspond with the developer to improve future versions of contool, and delineates the restrictions placed on the contool source code.
X+ # 
X+ :message18
X+ This window gives you some details about the development of contool, encourages you to correspond with the developer to improve future versions of contool, and delineates the restrictions placed on the contool source code.
X+ # 
X+ :message19
X+ This window gives you some details about the development of contool, encourages you to correspond with the developer to improve future versions of contool, and delineates the restrictions placed on the contool source code.
X+ # 
X+ :message20
X+ This window gives you some details about the development of contool, encourages you to correspond with the developer to improve future versions of contool, and delineates the restrictions placed on the contool source code.
X+ # 
X+ :send_mail
X+ Clicking this button will open another window in which you can compose and send mail to the developer of contool.
X+ # 
X+ :mail_controls
X+ This window allows you to send mail concerning contool to its developer.  You are encouraged to send comments and suggestions in order to make contool a better tool.
X+ # 
X+ :message21
X+ This window allows you to send mail concerning contool to its developer.  You are encouraged to send comments and suggestions in order to make contool a better tool.
X+ # 
X+ :message22
X+ This window allows you to send mail concerning contool to its developer.  You are encouraged to send comments and suggestions in order to make contool a better tool.
X+ # 
X+ :address
X+ This choice item lets you select the address to which your mail will be sent.  If your machine understands Internet-style addresses, you should use the first choice item.  If you are a UUCP-based site, you should use the second item.  If neither address works, use the third item to enter a valid address.
X+ # 
X+ :other_address
X+ This text field is used to enter an e-mail address to which your mail will be sent.  It should only be used if the two default addresses do not work from your site.
X+ # 
X+ :mail_controls1
X+ This window allows you to send mail concerning contool to its developer.  You are encouraged to send comments and suggestions in order to make contool a better tool.
X+ # 
X+ :accept_send
X+ Clicking this button will send your mail message to contool's developer.
X+ # 
X+ :cancel_mail
X+ Clicking this button cancels the message you were going to send.
X*** about.c.orig	Thu Nov  1 15:09:38 1990
X--- about.c	Thu Nov  1 11:46:52 1990
X***************
X*** 0 ****
X--- 1,35 ----
X+ /************************************************************************/
X+ /*									*/
X+ /*	about.c		display a little information window		*/
X+ /*									*/
X+ /************************************************************************/
X+ 
X+ #include	<stdio.h>
X+ #include	<sys/param.h>
X+ #include	<sys/types.h>
X+ #include	<xview/xview.h>
X+ #include	<xview/panel.h>
X+ #include	"contool_ui.h"
X+ 
X+ #include	"manifest.h"
X+ 
X+ PUBLIC	contool_base_objects	*contool_base;
X+ 
X+ PRIVATE	contool_about_objects	*dialog = NULL;
X+ 
X+ /************************************************************************/
X+ EXPORT	Menu_item	popup_about_contool(item, op)
X+ 
X+ Menu_item	item;
X+ Menu_generate	op;
X+ 
X+ {
X+ 	if (op == MENU_NOTIFY) {
X+ 	   if (dialog == NULL) {
X+ 	      dialog = contool_about_objects_initialize(NULL, contool_base->base);
X+ 	      place_dialog(contool_base->base, dialog->about);
X+ 	      }
X+ 	   xv_set(dialog->about, XV_SHOW, TRUE, NULL);
X+ 	   }
X+ 	return item;
X+ }
X*** busy.c.orig	Thu Nov  1 15:09:39 1990
X--- busy.c	Tue Oct 23 08:03:24 1990
X***************
X*** 0 ****
X--- 1,65 ----
X+ /************************************************************************/
X+ /*	Copyright 1988-1990 by Chuck Musciano and Harris Corporation	*/
X+ /*									*/
X+ /*	Permission to use, copy, modify, and distribute this software	*/
X+ /*	and its documentation for any purpose and without fee is	*/
X+ /*	hereby granted, provided that the above copyright notice	*/
X+ /*	appear in all copies and that both that copyright notice and	*/
X+ /*	this permission notice appear in supporting documentation, and	*/
X+ /*	that the name of Chuck Musciano and Harris Corporation not be	*/
X+ /*	used in advertising or publicity pertaining to distribution	*/
X+ /*	of the software without specific, written prior permission.	*/
X+ /*	Chuck Musciano and Harris Corporation make no representations	*/
X+ /*	about the suitability of this software for any purpose.  It is	*/
X+ /*	provided "as is" without express or implied warranty.  This 	*/
X+ /*	software may not be sold without the prior explicit permission	*/
X+ /*	of Harris Corporation.						*/
X+ /************************************************************************/
X+ 
X+ /************************************************************************/
X+ /*									*/
X+ /*	busy.c	turn frame busy attribute on and off			*/
X+ /*									*/
X+ /************************************************************************/
X+ 
X+ #include	<stdio.h>
X+ #include	<xview/xview.h>
X+ #include	<xview/panel.h>
X+ 
X+ #include	"manifest.h"
X+ 
X+ /************************************************************************/
X+ PRIVATE	set_busy(base, busy, skip)
X+ 
X+ Frame	base;
X+ int	busy;
X+ Frame	skip;
X+ 
X+ {	Frame	subframe;
X+ 	int	i;
X+ 
X+ 	for (i = 1; subframe = (Frame) xv_get(base, FRAME_NTH_SUBFRAME, i); i++)
X+ 	   if (subframe != skip)
X+ 	      if (xv_get(subframe, XV_SHOW))
X+ 	         xv_set(subframe, FRAME_BUSY, busy, NULL);
X+ 	xv_set(base, FRAME_BUSY, busy, NULL);
X+ }
X+ 
X+ /************************************************************************/
X+ EXPORT	lets_get_busy(base, busy, skip)
X+ 
X+ Frame	base;
X+ int	busy;
X+ Frame	skip;
X+ 
X+ {	static	int	depth = 0;
X+ 
X+ 	if (busy) {
X+ 	   if (depth == 0)
X+ 	      set_busy(base, TRUE, skip);
X+ 	   depth++;
X+ 	   }
X+ 	else if (depth > 0)
X+ 	   if (--depth == 0)
X+ 	      set_busy(base, FALSE, NULL);
X+ }
X*** contool.c.orig	Thu Nov  1 15:09:40 1990
X--- contool.c	Thu Nov  1 11:46:51 1990
X***************
X*** 176,182 ****
X  	   else if ((cmd = popen(defaults.print_filter, "w")) == NULL)
X  	      error("Could not execute %s", defaults.print_filter);
X  	   else {
X! 	      xv_set(contool_base->base, FRAME_BUSY, TRUE, NULL);
X  	      size = (int) xv_get(contool_base->display, TEXTSW_LENGTH);
X  	      buf = (char *) malloc(size);
X  	      xv_get(contool_base->display, TEXTSW_CONTENTS, 0, buf, size);
X--- 176,182 ----
X  	   else if ((cmd = popen(defaults.print_filter, "w")) == NULL)
X  	      error("Could not execute %s", defaults.print_filter);
X  	   else {
X! 	      lets_get_busy(contool_base->base, TRUE, NULL);
X  	      size = (int) xv_get(contool_base->display, TEXTSW_LENGTH);
X  	      buf = (char *) malloc(size);
X  	      xv_get(contool_base->display, TEXTSW_CONTENTS, 0, buf, size);
X***************
X*** 183,189 ****
X  	      if (fwrite(buf, 1, size, cmd) != size)
X  	         error("Could not write console contents to printer");
X  	      pclose(cmd);
X! 	      xv_set(contool_base->base, FRAME_BUSY, FALSE, NULL);
X  	      }
X  	   }
X  	return item;
X--- 183,190 ----
X  	      if (fwrite(buf, 1, size, cmd) != size)
X  	         error("Could not write console contents to printer");
X  	      pclose(cmd);
X! 	      free(buf);
X! 	      lets_get_busy(contool_base->base, FALSE, NULL);
X  	      }
X  	   }
X  	return item;
X***************
X*** 258,266 ****
X  	if (flash && flash != default_flash_icon)
X  	   xv_destroy(flash);
X  
X! 	good  = (defaults.good_icon  == NULL)? default_good_icon  : load_icon(defaults.good_icon, msg);
X! 	bad   = (defaults.bad_icon   == NULL)? default_bad_icon   : load_icon(defaults.bad_icon, msg);
X  	flash = (defaults.flash_icon == NULL)? default_flash_icon : load_icon(defaults.flash_icon, msg);
X  
X  	if (!blinking)
X  	   change_icon(good, good == default_good_icon);
X--- 259,279 ----
X  	if (flash && flash != default_flash_icon)
X  	   xv_destroy(flash);
X  
X! 	good = (defaults.good_icon == NULL)? default_good_icon : load_icon(defaults.good_icon, msg);
X! 	if (good == NULL) {
X! 	   internal_error("Cannot load default \"All is well\" icon %s: %s", defaults.good_icon, msg);
X! 	   good = default_good_icon;
X! 	   }
X! 	bad = (defaults.bad_icon == NULL)? default_bad_icon : load_icon(defaults.bad_icon, msg);
X! 	if (bad == NULL) {
X! 	   internal_error("Cannot load default \"Check console\" icon %s: %s", defaults.bad_icon, msg);
X! 	   bad = default_bad_icon;
X! 	   }
X  	flash = (defaults.flash_icon == NULL)? default_flash_icon : load_icon(defaults.flash_icon, msg);
X+ 	if (flash == NULL) {
X+ 	   internal_error("Cannot load default \"Flash\" icon %s: %s", defaults.flash_icon, msg);
X+ 	   flash = default_flash_icon;
X+ 	   }
X  
X  	if (!blinking)
X  	   change_icon(good, good == default_good_icon);
X***************
X*** 267,273 ****
X  }
X  
X  /************************************************************************/
X! /*	Now, filter  handlers						*/
X  /************************************************************************/
X  
X  /************************************************************************/
X--- 280,286 ----
X  }
X  
X  /************************************************************************/
X! /*	Now, filter handlers						*/
X  /************************************************************************/
X  
X  /************************************************************************/
X*** contool_ui.c.orig	Thu Nov  1 15:09:42 1990
X--- contool_ui.c	Thu Nov  1 13:47:30 1990
X***************
X*** 33,38 ****
X--- 33,39 ----
X  	extern Menu_item	start_logging();
X  	extern Menu_item	stop_logging();
X  	extern Menu_item	print_messages();
X+ 	extern Menu_item	popup_about_contool();
X  	Xv_opaque	obj;
X  	
X  	obj = xv_create(XV_NULL, MENU_COMMAND_MENU,
X***************
X*** 62,67 ****
X--- 63,73 ----
X  			MENU_STRING, "Print",
X  			MENU_GEN_PROC, print_messages,
X  			NULL,
X+ 		MENU_ITEM,
X+ 			XV_KEY_DATA, INSTANCE, ip,
X+ 			MENU_STRING, "About contool...",
X+ 			MENU_GEN_PROC, popup_about_contool,
X+ 			NULL,
X  		MENU_DEFAULT, 2,
X  		MENU_GEN_PIN_WINDOW, (Xv_opaque) ip[0], "File",
X  		NULL);
X***************
X*** 307,313 ****
X  		XV_KEY_DATA, INSTANCE, ip,
X  		XV_WIDTH, 575,
X  		XV_HEIGHT, 246,
X! 		XV_LABEL, "Contool 3.0a",
X  		FRAME_CLOSED, FALSE,
X  		FRAME_SHOW_FOOTER, TRUE,
X  		FRAME_SHOW_RESIZE_CORNER, TRUE,
X--- 313,319 ----
X  		XV_KEY_DATA, INSTANCE, ip,
X  		XV_WIDTH, 575,
X  		XV_HEIGHT, 246,
X! 		XV_LABEL, "Contool 3.0b",
X  		FRAME_CLOSED, FALSE,
X  		FRAME_SHOW_FOOTER, TRUE,
X  		FRAME_SHOW_RESIZE_CORNER, TRUE,
X***************
X*** 661,667 ****
X  	caddr_t		ip;
X  	Xv_opaque	owner;
X  {
X! 	extern Panel_setting	file_completion();
X  	Xv_opaque	obj;
X  	
X  	obj = xv_create(owner, PANEL_TEXT,
X--- 667,673 ----
X  	caddr_t		ip;
X  	Xv_opaque	owner;
X  {
X! 	extern Panel_setting	filename_completion();
X  	Xv_opaque	obj;
X  	
X  	obj = xv_create(owner, PANEL_TEXT,
X***************
X*** 678,684 ****
X  		PANEL_VALUE_DISPLAY_LENGTH, 35,
X  		PANEL_VALUE_STORED_LENGTH, 256,
X  		PANEL_READ_ONLY, FALSE,
X! 		PANEL_NOTIFY_PROC, file_completion,
X  		NULL);
X  	return obj;
X  }
X--- 684,690 ----
X  		PANEL_VALUE_DISPLAY_LENGTH, 35,
X  		PANEL_VALUE_STORED_LENGTH, 256,
X  		PANEL_READ_ONLY, FALSE,
X! 		PANEL_NOTIFY_PROC, filename_completion,
X  		NULL);
X  	return obj;
X  }
X***************
X*** 752,758 ****
X  	caddr_t		ip;
X  	Xv_opaque	owner;
X  {
X! 	extern Panel_setting	file_completion();
X  	Xv_opaque	obj;
X  	
X  	obj = xv_create(owner, PANEL_TEXT,
X--- 758,764 ----
X  	caddr_t		ip;
X  	Xv_opaque	owner;
X  {
X! 	extern Panel_setting	filename_completion();
X  	Xv_opaque	obj;
X  	
X  	obj = xv_create(owner, PANEL_TEXT,
X***************
X*** 769,775 ****
X  		PANEL_VALUE_DISPLAY_LENGTH, 35,
X  		PANEL_VALUE_STORED_LENGTH, 256,
X  		PANEL_READ_ONLY, FALSE,
X! 		PANEL_NOTIFY_PROC, file_completion,
X  		NULL);
X  	return obj;
X  }
X--- 775,781 ----
X  		PANEL_VALUE_DISPLAY_LENGTH, 35,
X  		PANEL_VALUE_STORED_LENGTH, 256,
X  		PANEL_READ_ONLY, FALSE,
X! 		PANEL_NOTIFY_PROC, filename_completion,
X  		NULL);
X  	return obj;
X  }
X***************
X*** 783,789 ****
X  	caddr_t		ip;
X  	Xv_opaque	owner;
X  {
X! 	extern Panel_setting	file_completion();
X  	Xv_opaque	obj;
X  	
X  	obj = xv_create(owner, PANEL_TEXT,
X--- 789,795 ----
X  	caddr_t		ip;
X  	Xv_opaque	owner;
X  {
X! 	extern Panel_setting	filename_completion();
X  	Xv_opaque	obj;
X  	
X  	obj = xv_create(owner, PANEL_TEXT,
X***************
X*** 800,806 ****
X  		PANEL_VALUE_DISPLAY_LENGTH, 35,
X  		PANEL_VALUE_STORED_LENGTH, 256,
X  		PANEL_READ_ONLY, FALSE,
X! 		PANEL_NOTIFY_PROC, file_completion,
X  		NULL);
X  	return obj;
X  }
X--- 806,812 ----
X  		PANEL_VALUE_DISPLAY_LENGTH, 35,
X  		PANEL_VALUE_STORED_LENGTH, 256,
X  		PANEL_READ_ONLY, FALSE,
X! 		PANEL_NOTIFY_PROC, filename_completion,
X  		NULL);
X  	return obj;
X  }
X***************
X*** 814,820 ****
X  	caddr_t		ip;
X  	Xv_opaque	owner;
X  {
X! 	extern Panel_setting	file_completion();
X  	Xv_opaque	obj;
X  	
X  	obj = xv_create(owner, PANEL_TEXT,
X--- 820,826 ----
X  	caddr_t		ip;
X  	Xv_opaque	owner;
X  {
X! 	extern Panel_setting	filename_completion();
X  	Xv_opaque	obj;
X  	
X  	obj = xv_create(owner, PANEL_TEXT,
X***************
X*** 831,837 ****
X  		PANEL_VALUE_DISPLAY_LENGTH, 35,
X  		PANEL_VALUE_STORED_LENGTH, 256,
X  		PANEL_READ_ONLY, FALSE,
X! 		PANEL_NOTIFY_PROC, file_completion,
X  		NULL);
X  	return obj;
X  }
X--- 837,843 ----
X  		PANEL_VALUE_DISPLAY_LENGTH, 35,
X  		PANEL_VALUE_STORED_LENGTH, 256,
X  		PANEL_READ_ONLY, FALSE,
X! 		PANEL_NOTIFY_PROC, filename_completion,
X  		NULL);
X  	return obj;
X  }
X***************
X*** 1683,1689 ****
X  	caddr_t		ip;
X  	Xv_opaque	owner;
X  {
X! 	extern Panel_setting	file_completion();
X  	Xv_opaque	obj;
X  	
X  	obj = xv_create(owner, PANEL_TEXT,
X--- 1689,1695 ----
X  	caddr_t		ip;
X  	Xv_opaque	owner;
X  {
X! 	extern Panel_setting	filename_completion();
X  	Xv_opaque	obj;
X  	
X  	obj = xv_create(owner, PANEL_TEXT,
X***************
X*** 1700,1706 ****
X  		PANEL_VALUE_DISPLAY_LENGTH, 35,
X  		PANEL_VALUE_STORED_LENGTH, 256,
X  		PANEL_READ_ONLY, FALSE,
X! 		PANEL_NOTIFY_PROC, file_completion,
X  		NULL);
X  	return obj;
X  }
X--- 1706,1712 ----
X  		PANEL_VALUE_DISPLAY_LENGTH, 35,
X  		PANEL_VALUE_STORED_LENGTH, 256,
X  		PANEL_READ_ONLY, FALSE,
X! 		PANEL_NOTIFY_PROC, filename_completion,
X  		NULL);
X  	return obj;
X  }
X***************
X*** 1841,1847 ****
X  	caddr_t		ip;
X  	Xv_opaque	owner;
X  {
X! 	extern Panel_setting	file_completion();
X  	Xv_opaque	obj;
X  	
X  	obj = xv_create(owner, PANEL_TEXT,
X--- 1847,1853 ----
X  	caddr_t		ip;
X  	Xv_opaque	owner;
X  {
X! 	extern Panel_setting	filename_completion();
X  	Xv_opaque	obj;
X  	
X  	obj = xv_create(owner, PANEL_TEXT,
X***************
X*** 1858,1864 ****
X  		PANEL_VALUE_DISPLAY_LENGTH, 35,
X  		PANEL_VALUE_STORED_LENGTH, 256,
X  		PANEL_READ_ONLY, FALSE,
X! 		PANEL_NOTIFY_PROC, file_completion,
X  		NULL);
X  	return obj;
X  }
X--- 1864,1870 ----
X  		PANEL_VALUE_DISPLAY_LENGTH, 35,
X  		PANEL_VALUE_STORED_LENGTH, 256,
X  		PANEL_READ_ONLY, FALSE,
X! 		PANEL_NOTIFY_PROC, filename_completion,
X  		NULL);
X  	return obj;
X  }
X***************
X*** 1884,1889 ****
X--- 1890,2715 ----
X  		XV_HEIGHT, 20,
X  		PANEL_LABEL_STRING, "Store",
X  		PANEL_NOTIFY_PROC, store_filters,
X+ 		NULL);
X+ 	return obj;
X+ }
X+ 
X+ /*
X+  * Initialize an instance of object `about'.
X+  */
X+ contool_about_objects *
X+ contool_about_objects_initialize(ip, owner)
X+ 	contool_about_objects	*ip;
X+ 	Xv_opaque	owner;
X+ {
X+ 	if (!ip && !(ip = (contool_about_objects *) calloc(1, sizeof (contool_about_objects))))
X+ 		return (contool_about_objects *) NULL;
X+ 	if (!ip->about)
X+ 		ip->about = contool_about_about_create(ip, owner);
X+ 	if (!ip->about_controls)
X+ 		ip->about_controls = contool_about_about_controls_create(ip, ip->about);
X+ 	if (!ip->message1)
X+ 		ip->message1 = contool_about_message1_create(ip, ip->about_controls);
X+ 	if (!ip->message5)
X+ 		ip->message5 = contool_about_message5_create(ip, ip->about_controls);
X+ 	if (!ip->message6)
X+ 		ip->message6 = contool_about_message6_create(ip, ip->about_controls);
X+ 	if (!ip->message7)
X+ 		ip->message7 = contool_about_message7_create(ip, ip->about_controls);
X+ 	if (!ip->message8)
X+ 		ip->message8 = contool_about_message8_create(ip, ip->about_controls);
X+ 	if (!ip->message9)
X+ 		ip->message9 = contool_about_message9_create(ip, ip->about_controls);
X+ 	if (!ip->message10)
X+ 		ip->message10 = contool_about_message10_create(ip, ip->about_controls);
X+ 	if (!ip->message15)
X+ 		ip->message15 = contool_about_message15_create(ip, ip->about_controls);
X+ 	if (!ip->message11)
X+ 		ip->message11 = contool_about_message11_create(ip, ip->about_controls);
X+ 	if (!ip->message12)
X+ 		ip->message12 = contool_about_message12_create(ip, ip->about_controls);
X+ 	if (!ip->message13)
X+ 		ip->message13 = contool_about_message13_create(ip, ip->about_controls);
X+ 	if (!ip->message14)
X+ 		ip->message14 = contool_about_message14_create(ip, ip->about_controls);
X+ 	if (!ip->message16)
X+ 		ip->message16 = contool_about_message16_create(ip, ip->about_controls);
X+ 	if (!ip->message17)
X+ 		ip->message17 = contool_about_message17_create(ip, ip->about_controls);
X+ 	if (!ip->message18)
X+ 		ip->message18 = contool_about_message18_create(ip, ip->about_controls);
X+ 	if (!ip->message19)
X+ 		ip->message19 = contool_about_message19_create(ip, ip->about_controls);
X+ 	if (!ip->message20)
X+ 		ip->message20 = contool_about_message20_create(ip, ip->about_controls);
X+ 	if (!ip->send_mail)
X+ 		ip->send_mail = contool_about_send_mail_create(ip, ip->about_controls);
X+ 	return ip;
X+ }
X+ 
X+ /*
X+  * Create object `about' in the specified instance.
X+ 
X+  */
X+ Xv_opaque
X+ contool_about_about_create(ip, owner)
X+ 	caddr_t		ip;
X+ 	Xv_opaque	owner;
X+ {
X+ 	Xv_opaque	obj;
X+ 	
X+ 	obj = xv_create(owner, FRAME_CMD,
X+ 		XV_KEY_DATA, INSTANCE, ip,
X+ 		XV_WIDTH, 509,
X+ 		XV_HEIGHT, 392,
X+ 		XV_LABEL, "Contool: About contool",
X+ 		XV_SHOW, FALSE,
X+ 		FRAME_SHOW_FOOTER, FALSE,
X+ 		FRAME_SHOW_RESIZE_CORNER, FALSE,
X+ 		FRAME_CMD_PUSHPIN_IN, TRUE,
X+ 		NULL);
X+ 	xv_set(xv_get(obj, FRAME_CMD_PANEL), WIN_SHOW, FALSE, NULL);
X+ 	return obj;
X+ }
X+ 
X+ /*
X+  * Create object `about_controls' in the specified instance.
X+ 
X+  */
X+ Xv_opaque
X+ contool_about_about_controls_create(ip, owner)
X+ 	caddr_t		ip;
X+ 	Xv_opaque	owner;
X+ {
X+ 	Xv_opaque	obj;
X+ 	
X+ 	obj = xv_create(owner, PANEL,
X+ 		XV_KEY_DATA, INSTANCE, ip,
X+ 		XV_HELP_DATA, "contool:about_controls",
X+ 		XV_X, 0,
X+ 		XV_Y, 0,
X+ 		XV_WIDTH, WIN_EXTEND_TO_EDGE,
X+ 		XV_HEIGHT, WIN_EXTEND_TO_EDGE,
X+ 		WIN_BORDER, FALSE,
X+ 		NULL);
X+ 	return obj;
X+ }
X+ 
X+ /*
X+  * Create object `message1' in the specified instance.
X+ 
X+  */
X+ Xv_opaque
X+ contool_about_message1_create(ip, owner)
X+ 	caddr_t		ip;
X+ 	Xv_opaque	owner;
X+ {
X+ 	Xv_opaque	obj;
X+ 	
X+ 	obj = xv_create(owner, PANEL_MESSAGE,
X+ 		XV_KEY_DATA, INSTANCE, ip,
X+ 		XV_HELP_DATA, "contool:message1",
X+ 		XV_X, 210,
X+ 		XV_Y, 14,
X+ 		XV_WIDTH, 85,
X+ 		XV_HEIGHT, 13,
X+ 		PANEL_LABEL_STRING, "Contool 3.0b",
X+ 		PANEL_LABEL_BOLD, TRUE,
X+ 		NULL);
X+ 	return obj;
X+ }
X+ 
X+ /*
X+  * Create object `message5' in the specified instance.
X+ 
X+  */
X+ Xv_opaque
X+ contool_about_message5_create(ip, owner)
X+ 	caddr_t		ip;
X+ 	Xv_opaque	owner;
X+ {
X+ 	Xv_opaque	obj;
X+ 	
X+ 	obj = xv_create(owner, PANEL_MESSAGE,
X+ 		XV_KEY_DATA, INSTANCE, ip,
X+ 		XV_HELP_DATA, "contool:message5",
X+ 		XV_X, 177,
X+ 		XV_Y, 30,
X+ 		XV_WIDTH, 152,
X+ 		XV_HEIGHT, 13,
X+ 		PANEL_LABEL_STRING, "Copyright 1988 - 1990",
X+ 		PANEL_LABEL_BOLD, TRUE,
X+ 		NULL);
X+ 	return obj;
X+ }
X+ 
X+ /*
X+  * Create object `message6' in the specified instance.
X+ 
X+  */
X+ Xv_opaque
X+ contool_about_message6_create(ip, owner)
X+ 	caddr_t		ip;
X+ 	Xv_opaque	owner;
X+ {
X+ 	Xv_opaque	obj;
X+ 	
X+ 	obj = xv_create(owner, PANEL_MESSAGE,
X+ 		XV_KEY_DATA, INSTANCE, ip,
X+ 		XV_HELP_DATA, "contool:message6",
X+ 		XV_X, 117,
X+ 		XV_Y, 46,
X+ 		XV_WIDTH, 274,
X+ 		XV_HEIGHT, 13,
X+ 		PANEL_LABEL_STRING, "Chuck Musciano and Harris Corporation",
X+ 		PANEL_LABEL_BOLD, TRUE,
X+ 		NULL);
X+ 	return obj;
X+ }
X+ 
X+ /*
X+  * Create object `message7' in the specified instance.
X+ 
X+  */
X+ Xv_opaque
X+ contool_about_message7_create(ip, owner)
X+ 	caddr_t		ip;
X+ 	Xv_opaque	owner;
X+ {
X+ 	Xv_opaque	obj;
X+ 	
X+ 	obj = xv_create(owner, PANEL_MESSAGE,
X+ 		XV_KEY_DATA, INSTANCE, ip,
X+ 		XV_HELP_DATA, "contool:message7",
X+ 		XV_X, 185,
X+ 		XV_Y, 62,
X+ 		XV_WIDTH, 135,
X+ 		XV_HEIGHT, 13,
X+ 		PANEL_LABEL_STRING, "All Rights Reserved",
X+ 		PANEL_LABEL_BOLD, TRUE,
X+ 		NULL);
X+ 	return obj;
X+ }
X+ 
X+ /*
X+  * Create object `message8' in the specified instance.
X+ 
X+  */
X+ Xv_opaque
X+ contool_about_message8_create(ip, owner)
X+ 	caddr_t		ip;
X+ 	Xv_opaque	owner;
X+ {
X+ 	Xv_opaque	obj;
X+ 	
X+ 	obj = xv_create(owner, PANEL_MESSAGE,
X+ 		XV_KEY_DATA, INSTANCE, ip,
X+ 		XV_HELP_DATA, "contool:message8",
X+ 		XV_X, 14,
X+ 		XV_Y, 94,
X+ 		XV_WIDTH, 457,
X+ 		XV_HEIGHT, 13,
X+ 		PANEL_LABEL_STRING, "Contool was written using Sun's Devguide interface builder and the XView",
X+ 		PANEL_LABEL_BOLD, FALSE,
X+ 		NULL);
X+ 	return obj;
X+ }
X+ 
X+ /*
X+  * Create object `message9' in the specified instance.
X+ 
X+  */
X+ Xv_opaque
X+ contool_about_message9_create(ip, owner)
X+ 	caddr_t		ip;
X+ 	Xv_opaque	owner;
X+ {
X+ 	Xv_opaque	obj;
X+ 	
X+ 	obj = xv_create(owner, PANEL_MESSAGE,
X+ 		XV_KEY_DATA, INSTANCE, ip,
X+ 		XV_HELP_DATA, "contool:message9",
X+ 		XV_X, 14,
X+ 		XV_Y, 110,
X+ 		XV_WIDTH, 447,
X+ 		XV_HEIGHT, 13,
X+ 		PANEL_LABEL_STRING, "OPEN LOOK toolkit.  It originated as a SunView application in early 1987,",
X+ 		PANEL_LABEL_BOLD, FALSE,
X+ 		NULL);
X+ 	return obj;
X+ }
X+ 
X+ /*
X+  * Create object `message10' in the specified instance.
X+ 
X+  */
X+ Xv_opaque
X+ contool_about_message10_create(ip, owner)
X+ 	caddr_t		ip;
X+ 	Xv_opaque	owner;
X+ {
X+ 	Xv_opaque	obj;
X+ 	
X+ 	obj = xv_create(owner, PANEL_MESSAGE,
X+ 		XV_KEY_DATA, INSTANCE, ip,
X+ 		XV_HELP_DATA, "contool:message10",
X+ 		XV_X, 14,
X+ 		XV_Y, 126,
X+ 		XV_WIDTH, 464,
X+ 		XV_HEIGHT, 13,
X+ 		PANEL_LABEL_STRING, "was released into the public domain in 1988, and was ported to X Windows",
X+ 		PANEL_LABEL_BOLD, FALSE,
X+ 		NULL);
X+ 	return obj;
X+ }
X+ 
X+ /*
X+  * Create object `message15' in the specified instance.
X+ 
X+  */
X+ Xv_opaque
X+ contool_about_message15_create(ip, owner)
X+ 	caddr_t		ip;
X+ 	Xv_opaque	owner;
X+ {
X+ 	Xv_opaque	obj;
X+ 	
X+ 	obj = xv_create(owner, PANEL_MESSAGE,
X+ 		XV_KEY_DATA, INSTANCE, ip,
X+ 		XV_HELP_DATA, "contool:message15",
X+ 		XV_X, 14,
X+ 		XV_Y, 142,
X+ 		XV_WIDTH, 51,
X+ 		XV_HEIGHT, 13,
X+ 		PANEL_LABEL_STRING, "in 1990.",
X+ 		PANEL_LABEL_BOLD, FALSE,
X+ 		NULL);
X+ 	return obj;
X+ }
X+ 
X+ /*
X+  * Create object `message11' in the specified instance.
X+ 
X+  */
X+ Xv_opaque
X+ contool_about_message11_create(ip, owner)
X+ 	caddr_t		ip;
X+ 	Xv_opaque	owner;
X+ {
X+ 	Xv_opaque	obj;
X+ 	
X+ 	obj = xv_create(owner, PANEL_MESSAGE,
X+ 		XV_KEY_DATA, INSTANCE, ip,
X+ 		XV_HELP_DATA, "contool:message11",
X+ 		XV_X, 14,
X+ 		XV_Y, 174,
X+ 		XV_WIDTH, 460,
X+ 		XV_HEIGHT, 13,
X+ 		PANEL_LABEL_STRING, "I welcome comments, criticism, suggestions, and bug reports.  Almost every",
X+ 		PANEL_LABEL_BOLD, FALSE,
X+ 		NULL);
X+ 	return obj;
X+ }
X+ 
X+ /*
X+  * Create object `message12' in the specified instance.
X+ 
X+  */
X+ Xv_opaque
X+ contool_about_message12_create(ip, owner)
X+ 	caddr_t		ip;
X+ 	Xv_opaque	owner;
X+ {
X+ 	Xv_opaque	obj;
X+ 	
X+ 	obj = xv_create(owner, PANEL_MESSAGE,
X+ 		XV_KEY_DATA, INSTANCE, ip,
X+ 		XV_HELP_DATA, "contool:message12",
X+ 		XV_X, 14,
X+ 		XV_Y, 190,
X+ 		XV_WIDTH, 462,
X+ 		XV_HEIGHT, 13,
X+ 		PANEL_LABEL_STRING, "feature in this version of contool was added as the result of a user request. ",
X+ 		PANEL_LABEL_BOLD, FALSE,
X+ 		NULL);
X+ 	return obj;
X+ }
X+ 
X+ /*
X+  * Create object `message13' in the specified instance.
X+ 
X+  */
X+ Xv_opaque
X+ contool_about_message13_create(ip, owner)
X+ 	caddr_t		ip;
X+ 	Xv_opaque	owner;
X+ {
X+ 	Xv_opaque	obj;
X+ 	
X+ 	obj = xv_create(owner, PANEL_MESSAGE,
X+ 		XV_KEY_DATA, INSTANCE, ip,
X+ 		XV_HELP_DATA, "contool:message13",
X+ 		XV_X, 14,
X+ 		XV_Y, 206,
X+ 		XV_WIDTH, 467,
X+ 		XV_HEIGHT, 13,
X+ 		PANEL_LABEL_STRING, "User feedback is the single best driving force in the evolution of my tools.  I ",
X+ 		PANEL_LABEL_BOLD, FALSE,
X+ 		NULL);
X+ 	return obj;
X+ }
X+ 
X+ /*
X+  * Create object `message14' in the specified instance.
X+ 
X+  */
X+ Xv_opaque
X+ contool_about_message14_create(ip, owner)
X+ 	caddr_t		ip;
X+ 	Xv_opaque	owner;
X+ {
X+ 	Xv_opaque	obj;
X+ 	
X+ 	obj = xv_create(owner, PANEL_MESSAGE,
X+ 		XV_KEY_DATA, INSTANCE, ip,
X+ 		XV_HELP_DATA, "contool:message14",
X+ 		XV_X, 14,
X+ 		XV_Y, 222,
X+ 		XV_WIDTH, 205,
X+ 		XV_HEIGHT, 13,
X+ 		PANEL_LABEL_STRING, "look forward to hearing from you!",
X+ 		PANEL_LABEL_BOLD, FALSE,
X+ 		NULL);
X+ 	return obj;
X+ }
X+ 
X+ /*
X+  * Create object `message16' in the specified instance.
X+ 
X+  */
X+ Xv_opaque
X+ contool_about_message16_create(ip, owner)
X+ 	caddr_t		ip;
X+ 	Xv_opaque	owner;
X+ {
X+ 	Xv_opaque	obj;
X+ 	
X+ 	obj = xv_create(owner, PANEL_MESSAGE,
X+ 		XV_KEY_DATA, INSTANCE, ip,
X+ 		XV_HELP_DATA, "contool:message16",
X+ 		XV_X, 14,
X+ 		XV_Y, 254,
X+ 		XV_WIDTH, 481,
X+ 		XV_HEIGHT, 13,
X+ 		PANEL_LABEL_STRING, "Contool has been placed in the public domain, but the copyright on the source",
X+ 		PANEL_LABEL_BOLD, FALSE,
X+ 		NULL);
X+ 	return obj;
X+ }
X+ 
X+ /*
X+  * Create object `message17' in the specified instance.
X+ 
X+  */
X+ Xv_opaque
X+ contool_about_message17_create(ip, owner)
X+ 	caddr_t		ip;
X+ 	Xv_opaque	owner;
X+ {
X+ 	Xv_opaque	obj;
X+ 	
X+ 	obj = xv_create(owner, PANEL_MESSAGE,
X+ 		XV_KEY_DATA, INSTANCE, ip,
X+ 		XV_HELP_DATA, "contool:message17",
X+ 		XV_X, 14,
X+ 		XV_Y, 270,
X+ 		XV_WIDTH, 472,
X+ 		XV_HEIGHT, 13,
X+ 		PANEL_LABEL_STRING, "code is retained by myself and Harris Corporation, my employer.  This means",
X+ 		PANEL_LABEL_BOLD, FALSE,
X+ 		NULL);
X+ 	return obj;
X+ }
X+ 
X+ /*
X+  * Create object `message18' in the specified instance.
X+ 
X+  */
X+ Xv_opaque
X+ contool_about_message18_create(ip, owner)
X+ 	caddr_t		ip;
X+ 	Xv_opaque	owner;
X+ {
X+ 	Xv_opaque	obj;
X+ 	
X+ 	obj = xv_create(owner, PANEL_MESSAGE,
X+ 		XV_KEY_DATA, INSTANCE, ip,
X+ 		XV_HELP_DATA, "contool:message18",
X+ 		XV_X, 14,
X+ 		XV_Y, 286,
X+ 		XV_WIDTH, 460,
X+ 		XV_HEIGHT, 13,
X+ 		PANEL_LABEL_STRING, "that you can give the source code to anyone but you cannot sell any part of",
X+ 		PANEL_LABEL_BOLD, FALSE,
X+ 		NULL);
X+ 	return obj;
X+ }
X+ 
X+ /*
X+  * Create object `message19' in the specified instance.
X+ 
X+  */
X+ Xv_opaque
X+ contool_about_message19_create(ip, owner)
X+ 	caddr_t		ip;
X+ 	Xv_opaque	owner;
X+ {
X+ 	Xv_opaque	obj;
X+ 	
X+ 	obj = xv_create(owner, PANEL_MESSAGE,
X+ 		XV_KEY_DATA, INSTANCE, ip,
X+ 		XV_HELP_DATA, "contool:message19",
X+ 		XV_X, 14,
X+ 		XV_Y, 302,
X+ 		XV_WIDTH, 455,
X+ 		XV_HEIGHT, 13,
X+ 		PANEL_LABEL_STRING, "the source code, nor can you incorporate any part of the source code into a",
X+ 		PANEL_LABEL_BOLD, FALSE,
X+ 		NULL);
X+ 	return obj;
X+ }
X+ 
X+ /*
X+  * Create object `message20' in the specified instance.
X+ 
X+  */
X+ Xv_opaque
X+ contool_about_message20_create(ip, owner)
X+ 	caddr_t		ip;
X+ 	Xv_opaque	owner;
X+ {
X+ 	Xv_opaque	obj;
X+ 	
X+ 	obj = xv_create(owner, PANEL_MESSAGE,
X+ 		XV_KEY_DATA, INSTANCE, ip,
X+ 		XV_HELP_DATA, "contool:message20",
X+ 		XV_X, 14,
X+ 		XV_Y, 318,
X+ 		XV_WIDTH, 219,
X+ 		XV_HEIGHT, 13,
X+ 		PANEL_LABEL_STRING, "product which is subsequently sold.",
X+ 		PANEL_LABEL_BOLD, FALSE,
X+ 		NULL);
X+ 	return obj;
X+ }
X+ 
X+ /*
X+  * Create object `send_mail' in the specified instance.
X+ 
X+  */
X+ Xv_opaque
X+ contool_about_send_mail_create(ip, owner)
X+ 	caddr_t		ip;
X+ 	Xv_opaque	owner;
X+ {
X+ 	extern void		popup_send_mail();
X+ 	Xv_opaque	obj;
X+ 	
X+ 	obj = xv_create(owner, PANEL_BUTTON,
X+ 		XV_KEY_DATA, INSTANCE, ip,
X+ 		XV_HELP_DATA, "contool:send_mail",
X+ 		XV_X, 215,
X+ 		XV_Y, 352,
X+ 		XV_WIDTH, 78,
X+ 		XV_HEIGHT, 20,
X+ 		PANEL_LABEL_STRING, "Send Mail",
X+ 		PANEL_NOTIFY_PROC, popup_send_mail,
X+ 		NULL);
X+ 	return obj;
X+ }
X+ 
X+ /*
X+  * Initialize an instance of object `mail'.
X+  */
X+ contool_mail_objects *
X+ contool_mail_objects_initialize(ip, owner)
X+ 	contool_mail_objects	*ip;
X+ 	Xv_opaque	owner;
X+ {
X+ 	if (!ip && !(ip = (contool_mail_objects *) calloc(1, sizeof (contool_mail_objects))))
X+ 		return (contool_mail_objects *) NULL;
X+ 	if (!ip->mail)
X+ 		ip->mail = contool_mail_mail_create(ip, owner);
X+ 	if (!ip->mail_controls)
X+ 		ip->mail_controls = contool_mail_mail_controls_create(ip, ip->mail);
X+ 	if (!ip->message21)
X+ 		ip->message21 = contool_mail_message21_create(ip, ip->mail_controls);
X+ 	if (!ip->message22)
X+ 		ip->message22 = contool_mail_message22_create(ip, ip->mail_controls);
X+ 	if (!ip->address)
X+ 		ip->address = contool_mail_address_create(ip, ip->mail_controls);
X+ 	if (!ip->other_address)
X+ 		ip->other_address = contool_mail_other_address_create(ip, ip->mail_controls);
X+ 	if (!ip->message)
X+ 		ip->message = contool_mail_message_create(ip, ip->mail);
X+ 	if (!ip->mail_controls1)
X+ 		ip->mail_controls1 = contool_mail_mail_controls1_create(ip, ip->mail);
X+ 	if (!ip->accept_send)
X+ 		ip->accept_send = contool_mail_accept_send_create(ip, ip->mail_controls1);
X+ 	if (!ip->cancel_mail)
X+ 		ip->cancel_mail = contool_mail_cancel_mail_create(ip, ip->mail_controls1);
X+ 	return ip;
X+ }
X+ 
X+ /*
X+  * Create object `mail' in the specified instance.
X+ 
X+  */
X+ Xv_opaque
X+ contool_mail_mail_create(ip, owner)
X+ 	caddr_t		ip;
X+ 	Xv_opaque	owner;
X+ {
X+ 	Xv_opaque	obj;
X+ 	
X+ 	obj = xv_create(owner, FRAME_CMD,
X+ 		XV_KEY_DATA, INSTANCE, ip,
X+ 		XV_WIDTH, 506,
X+ 		XV_HEIGHT, 338,
X+ 		XV_LABEL, "Contool: Send mail",
X+ 		XV_SHOW, FALSE,
X+ 		FRAME_SHOW_FOOTER, FALSE,
X+ 		FRAME_SHOW_RESIZE_CORNER, FALSE,
X+ 		FRAME_CMD_PUSHPIN_IN, FALSE,
X+ 		NULL);
X+ 	xv_set(xv_get(obj, FRAME_CMD_PANEL), WIN_SHOW, FALSE, NULL);
X+ 	return obj;
X+ }
X+ 
X+ /*
X+  * Create object `mail_controls' in the specified instance.
X+ 
X+  */
X+ Xv_opaque
X+ contool_mail_mail_controls_create(ip, owner)
X+ 	caddr_t		ip;
X+ 	Xv_opaque	owner;
X+ {
X+ 	Xv_opaque	obj;
X+ 	
X+ 	obj = xv_create(owner, PANEL,
X+ 		XV_KEY_DATA, INSTANCE, ip,
X+ 		XV_HELP_DATA, "contool:mail_controls",
X+ 		XV_X, 0,
X+ 		XV_Y, 0,
X+ 		XV_WIDTH, WIN_EXTEND_TO_EDGE,
X+ 		XV_HEIGHT, 92,
X+ 		WIN_BORDER, FALSE,
X+ 		NULL);
X+ 	return obj;
X+ }
X+ 
X+ /*
X+  * Create object `message21' in the specified instance.
X+ 
X+  */
X+ Xv_opaque
X+ contool_mail_message21_create(ip, owner)
X+ 	caddr_t		ip;
X+ 	Xv_opaque	owner;
X+ {
X+ 	Xv_opaque	obj;
X+ 	
X+ 	obj = xv_create(owner, PANEL_MESSAGE,
X+ 		XV_KEY_DATA, INSTANCE, ip,
X+ 		XV_HELP_DATA, "contool:message21",
X+ 		XV_X, 14,
X+ 		XV_Y, 14,
X+ 		XV_WIDTH, 478,
X+ 		XV_HEIGHT, 13,
X+ 		PANEL_LABEL_STRING, "Your feedback is appreciated.  To ensure that your message reaches me, check",
X+ 		PANEL_LABEL_BOLD, FALSE,
X+ 		NULL);
X+ 	return obj;
X+ }
X+ 
X+ /*
X+  * Create object `message22' in the specified instance.
X+ 
X+  */
X+ Xv_opaque
X+ contool_mail_message22_create(ip, owner)
X+ 	caddr_t		ip;
X+ 	Xv_opaque	owner;
X+ {
X+ 	Xv_opaque	obj;
X+ 	
X+ 	obj = xv_create(owner, PANEL_MESSAGE,
X+ 		XV_KEY_DATA, INSTANCE, ip,
X+ 		XV_HELP_DATA, "contool:message22",
X+ 		XV_X, 14,
X+ 		XV_Y, 30,
X+ 		XV_WIDTH, 395,
X+ 		XV_HEIGHT, 13,
X+ 		PANEL_LABEL_STRING, "that the \"To\" address is valid for your site before clicking \"Send\".",
X+ 		PANEL_LABEL_BOLD, FALSE,
X+ 		NULL);
X+ 	return obj;
X+ }
X+ 
X+ /*
X+  * Create object `address' in the specified instance.
X+ 
X+  */
X+ Xv_opaque
X+ contool_mail_address_create(ip, owner)
X+ 	caddr_t		ip;
X+ 	Xv_opaque	owner;
X+ {
X+ 	extern int		handle_address();
X+ 	Xv_opaque	obj;
X+ 	
X+ 	obj = xv_create(owner, PANEL_CHOICE, PANEL_DISPLAY_LEVEL, PANEL_CURRENT,
X+ 		XV_KEY_DATA, INSTANCE, ip,
X+ 		XV_HELP_DATA, "contool:address",
X+ 		XV_X, 14,
X+ 		XV_Y, 64,
X+ 		XV_WIDTH, 278,
X+ 		XV_HEIGHT, 23,
X+ 		PANEL_VALUE_X, 43,
X+ 		PANEL_VALUE_Y, 64,
X+ 		PANEL_LAYOUT, PANEL_HORIZONTAL,
X+ 		PANEL_CHOICE_NROWS, 1,
X+ 		PANEL_LABEL_STRING, "To:",
X+ 		PANEL_NOTIFY_PROC, handle_address,
X+ 		PANEL_CHOICE_STRINGS,
X+ 			"chuck@trantor.harris-atd.com",
X+ 			"uunet!trantor.harris-atd.com!chuck",
X+ 			"Other:",
X+ 			0,
X+ 		NULL);
X+ 	return obj;
X+ }
X+ 
X+ /*
X+  * Create object `other_address' in the specified instance.
X+ 
X+  */
X+ Xv_opaque
X+ contool_mail_other_address_create(ip, owner)
X+ 	caddr_t		ip;
X+ 	Xv_opaque	owner;
X+ {
X+ 	Xv_opaque	obj;
X+ 	
X+ 	obj = xv_create(owner, PANEL_TEXT,
X+ 		XV_KEY_DATA, INSTANCE, ip,
X+ 		XV_HELP_DATA, "contool:other_address",
X+ 		XV_X, 105,
X+ 		XV_Y, 69,
X+ 		XV_WIDTH, 385,
X+ 		XV_HEIGHT, 15,
X+ 		PANEL_VALUE_X, 114,
X+ 		PANEL_VALUE_Y, 69,
X+ 		PANEL_LAYOUT, PANEL_HORIZONTAL,
X+ 		PANEL_VALUE_DISPLAY_LENGTH, 47,
X+ 		PANEL_VALUE_STORED_LENGTH, 256,
X+ 		PANEL_READ_ONLY, FALSE,
X+ 		NULL);
X+ 	return obj;
X+ }
X+ 
X+ /*
X+  * Create object `message' in the specified instance.
X+ 
X+  */
X+ Xv_opaque
X+ contool_mail_message_create(ip, owner)
X+ 	caddr_t		ip;
X+ 	Xv_opaque	owner;
X+ {
X+ 	Xv_opaque	obj;
X+ 	
X+ 	obj = xv_create(owner, TEXTSW,
X+ 		XV_KEY_DATA, INSTANCE, ip,
X+ 		XV_X, 0,
X+ 		XV_Y, 92,
X+ 		XV_WIDTH, WIN_EXTEND_TO_EDGE,
X+ 		XV_HEIGHT, 188,
X+ 		OPENWIN_SHOW_BORDERS, TRUE,
X+ 		NULL);
X+ 	return obj;
X+ }
X+ 
X+ /*
X+  * Create object `mail_controls1' in the specified instance.
X+ 
X+  */
X+ Xv_opaque
X+ contool_mail_mail_controls1_create(ip, owner)
X+ 	caddr_t		ip;
X+ 	Xv_opaque	owner;
X+ {
X+ 	Xv_opaque	obj;
X+ 	
X+ 	obj = xv_create(owner, PANEL,
X+ 		XV_KEY_DATA, INSTANCE, ip,
X+ 		XV_HELP_DATA, "contool:mail_controls1",
X+ 		XV_X, 0,
X+ 		XV_Y, 280,
X+ 		XV_WIDTH, WIN_EXTEND_TO_EDGE,
X+ 		XV_HEIGHT, WIN_EXTEND_TO_EDGE,
X+ 		WIN_BORDER, FALSE,
X+ 		NULL);
X+ 	return obj;
X+ }
X+ 
X+ /*
X+  * Create object `accept_send' in the specified instance.
X+ 
X+  */
X+ Xv_opaque
X+ contool_mail_accept_send_create(ip, owner)
X+ 	caddr_t		ip;
X+ 	Xv_opaque	owner;
X+ {
X+ 	extern void		send_mail();
X+ 	Xv_opaque	obj;
X+ 	
X+ 	obj = xv_create(owner, PANEL_BUTTON,
X+ 		XV_KEY_DATA, INSTANCE, ip,
X+ 		XV_HELP_DATA, "contool:accept_send",
X+ 		XV_X, 193,
X+ 		XV_Y, 18,
X+ 		XV_WIDTH, 48,
X+ 		XV_HEIGHT, 20,
X+ 		PANEL_LABEL_STRING, "Send",
X+ 		PANEL_NOTIFY_PROC, send_mail,
X+ 		NULL);
X+ 	return obj;
X+ }
X+ 
X+ /*
X+  * Create object `cancel_mail' in the specified instance.
X+ 
X+  */
X+ Xv_opaque
X+ contool_mail_cancel_mail_create(ip, owner)
X+ 	caddr_t		ip;
X+ 	Xv_opaque	owner;
X+ {
X+ 	extern void		cancel_mail();
X+ 	Xv_opaque	obj;
X+ 	
X+ 	obj = xv_create(owner, PANEL_BUTTON,
X+ 		XV_KEY_DATA, INSTANCE, ip,
X+ 		XV_HELP_DATA, "contool:cancel_mail",
X+ 		XV_X, 253,
X+ 		XV_Y, 18,
X+ 		XV_WIDTH, 59,
X+ 		XV_HEIGHT, 20,
X+ 		PANEL_LABEL_STRING, "Cancel",
X+ 		PANEL_NOTIFY_PROC, cancel_mail,
X  		NULL);
X  	return obj;
X  }
X*** contool_ui.h.orig	Thu Nov  1 15:09:48 1990
X--- contool_ui.h	Thu Nov  1 13:47:26 1990
X***************
X*** 151,154 ****
X--- 151,226 ----
X  extern Xv_opaque	contool_store_store_type_create();
X  extern Xv_opaque	contool_store_store_file_create();
X  extern Xv_opaque	contool_store_accept_store_create();
X+ 
X+ typedef struct {
X+ 	Xv_opaque	about;
X+ 	Xv_opaque	about_controls;
X+ 	Xv_opaque	message1;
X+ 	Xv_opaque	message5;
X+ 	Xv_opaque	message6;
X+ 	Xv_opaque	message7;
X+ 	Xv_opaque	message8;
X+ 	Xv_opaque	message9;
X+ 	Xv_opaque	message10;
X+ 	Xv_opaque	message15;
X+ 	Xv_opaque	message11;
X+ 	Xv_opaque	message12;
X+ 	Xv_opaque	message13;
X+ 	Xv_opaque	message14;
X+ 	Xv_opaque	message16;
X+ 	Xv_opaque	message17;
X+ 	Xv_opaque	message18;
X+ 	Xv_opaque	message19;
X+ 	Xv_opaque	message20;
X+ 	Xv_opaque	send_mail;
X+ } contool_about_objects;
X+ 
X+ extern contool_about_objects	*contool_about_objects_initialize();
X+ 
X+ extern Xv_opaque	contool_about_about_create();
X+ extern Xv_opaque	contool_about_about_controls_create();
X+ extern Xv_opaque	contool_about_message1_create();
X+ extern Xv_opaque	contool_about_message5_create();
X+ extern Xv_opaque	contool_about_message6_create();
X+ extern Xv_opaque	contool_about_message7_create();
X+ extern Xv_opaque	contool_about_message8_create();
X+ extern Xv_opaque	contool_about_message9_create();
X+ extern Xv_opaque	contool_about_message10_create();
X+ extern Xv_opaque	contool_about_message15_create();
X+ extern Xv_opaque	contool_about_message11_create();
X+ extern Xv_opaque	contool_about_message12_create();
X+ extern Xv_opaque	contool_about_message13_create();
X+ extern Xv_opaque	contool_about_message14_create();
X+ extern Xv_opaque	contool_about_message16_create();
X+ extern Xv_opaque	contool_about_message17_create();
X+ extern Xv_opaque	contool_about_message18_create();
X+ extern Xv_opaque	contool_about_message19_create();
X+ extern Xv_opaque	contool_about_message20_create();
X+ extern Xv_opaque	contool_about_send_mail_create();
X+ 
X+ typedef struct {
X+ 	Xv_opaque	mail;
X+ 	Xv_opaque	mail_controls;
X+ 	Xv_opaque	message21;
X+ 	Xv_opaque	message22;
X+ 	Xv_opaque	address;
X+ 	Xv_opaque	other_address;
X+ 	Xv_opaque	message;
X+ 	Xv_opaque	mail_controls1;
X+ 	Xv_opaque	accept_send;
X+ 	Xv_opaque	cancel_mail;
X+ } contool_mail_objects;
X+ 
X+ extern contool_mail_objects	*contool_mail_objects_initialize();
X+ 
X+ extern Xv_opaque	contool_mail_mail_create();
X+ extern Xv_opaque	contool_mail_mail_controls_create();
X+ extern Xv_opaque	contool_mail_message21_create();
X+ extern Xv_opaque	contool_mail_message22_create();
X+ extern Xv_opaque	contool_mail_address_create();
X+ extern Xv_opaque	contool_mail_other_address_create();
X+ extern Xv_opaque	contool_mail_message_create();
X+ extern Xv_opaque	contool_mail_mail_controls1_create();
X+ extern Xv_opaque	contool_mail_accept_send_create();
X+ extern Xv_opaque	contool_mail_cancel_mail_create();
X  #endif
X*** filename_completion.c.orig	Thu Nov  1 15:09:50 1990
X--- filename_completion.c	Tue Oct 23 08:20:50 1990
X***************
X*** 0 ****
X--- 1,52 ----
X+ /************************************************************************/
X+ /*	Copyright 1988-1990 by Chuck Musciano and Harris Corporation	*/
X+ /*									*/
X+ /*	Permission to use, copy, modify, and distribute this software	*/
X+ /*	and its documentation for any purpose and without fee is	*/
X+ /*	hereby granted, provided that the above copyright notice	*/
X+ /*	appear in all copies and that both that copyright notice and	*/
X+ /*	this permission notice appear in supporting documentation, and	*/
X+ /*	that the name of Chuck Musciano and Harris Corporation not be	*/
X+ /*	used in advertising or publicity pertaining to distribution	*/
X+ /*	of the software without specific, written prior permission.	*/
X+ /*	Chuck Musciano and Harris Corporation make no representations	*/
X+ /*	about the suitability of this software for any purpose.  It is	*/
X+ /*	provided "as is" without express or implied warranty.  This 	*/
X+ /*	software may not be sold without the prior explicit permission	*/
X+ /*	of Harris Corporation.						*/
X+ /************************************************************************/
X+ 
X+ /************************************************************************/
X+ /*									*/
X+ /*	filename_completion.c	completion handler for text items	*/
X+ /*									*/
X+ /************************************************************************/
X+ 
X+ #include	<stdio.h>
X+ #include	<sys/param.h>
X+ #include	<sys/types.h>
X+ #include	<xview/xview.h>
X+ #include	<xview/panel.h>
X+ 
X+ #include	"manifest.h"
X+ 
X+ /************************************************************************/
X+ EXPORT	Panel_setting	filename_completion(item, event)
X+ 
X+ Panel_item	item;
X+ Event		*event;
X+ 
X+ {	char	*p, *expand_filename();
X+ 
X+ 	switch (event_action(event)) {
X+ 	   case '\n' :
X+ 	   case '\r' :
X+ 	   case ' '  : if ((p = expand_filename((char *) xv_get(item, PANEL_VALUE))) == NULL)
X+ 	   		  window_bell(xv_get(item, XV_OWNER));
X+ 	   	       else
X+ 	   	          xv_set(item, PANEL_VALUE, p, 0);
X+ 	   	       return(PANEL_NONE);
X+ 	   case '\t' : return(event_shift_is_down(event)? PANEL_PREVIOUS : PANEL_NEXT);
X+ 	   default   : return(panel_text_notify(item, event));
X+ 	   }
X+ }
X*** load_icon.c.orig	Thu Nov  1 15:09:55 1990
X--- load_icon.c	Thu Nov  1 09:07:38 1990
X***************
X*** 23,29 ****
X  #include	<xview/icon_load.h>
X  
X  #include	"manifest.h"
X! #include	"contool.h"
X  
X  PUBLIC	char	*getenv();
X  
X--- 23,32 ----
X  #include	<xview/icon_load.h>
X  
X  #include	"manifest.h"
X! 
X! #if !defined(ICON_PATH)
X! #define		ICON_PATH		".:./icons:/usr/local/images:/usr/include/images"
X! #endif
X  
X  PUBLIC	char	*getenv();
X  
X*** patchlevel.h.orig	Thu Nov  1 15:10:00 1990
X--- patchlevel.h	Thu Nov  1 09:08:10 1990
X***************
X*** 2,8 ****
X--- 2,12 ----
X  /*									*/
X  /*	Patch		Comments					*/
X  /*	  0		Initial release for XView			*/
X+ /*			   comp.sources.x: Volume 10, Issues 34-39	*/
X  /*									*/
X  /*	  1		Bug fixes; see README for details		*/
X+ /*			   comp.sources.x: Volume 10, Issue 40		*/
X+ /*									*/
X+ /*	  2		Bug fixes; see README for details		*/
X  /*									*/
X  /************************************************************************/
X*** pinned_menu_notify.c.orig	Thu Nov  1 15:10:00 1990
X--- pinned_menu_notify.c	Tue Oct 23 08:03:27 1990
X***************
X*** 0 ****
X--- 1,52 ----
X+ /************************************************************************/
X+ /*	Copyright 1988-1990 by Chuck Musciano and Harris Corporation	*/
X+ /*									*/
X+ /*	Permission to use, copy, modify, and distribute this software	*/
X+ /*	and its documentation for any purpose and without fee is	*/
X+ /*	hereby granted, provided that the above copyright notice	*/
X+ /*	appear in all copies and that both that copyright notice and	*/
X+ /*	this permission notice appear in supporting documentation, and	*/
X+ /*	that the name of Chuck Musciano and Harris Corporation not be	*/
X+ /*	used in advertising or publicity pertaining to distribution	*/
X+ /*	of the software without specific, written prior permission.	*/
X+ /*	Chuck Musciano and Harris Corporation make no representations	*/
X+ /*	about the suitability of this software for any purpose.  It is	*/
X+ /*	provided "as is" without express or implied warranty.  This 	*/
X+ /*	software may not be sold without the prior explicit permission	*/
X+ /*	of Harris Corporation.						*/
X+ /************************************************************************/
X+ 
X+ /************************************************************************/
X+ /*									*/
X+ /*	pinned_menu_notify.c	GUIDE callback for pinned menus		*/
X+ /*									*/
X+ /************************************************************************/
X+ 
X+ #include	<stdio.h>
X+ #include	<sys/param.h>
X+ #include	<sys/types.h>
X+ #include	<xview/xview.h>
X+ 
X+ #include	"manifest.h"
X+ 
X+ /************************************************************************/
X+ EXPORT	void	pinned_menu_notify(menu, item)
X+ 
X+ Menu		menu;
X+ Menu_item	item;
X+ 
X+ {	Xv_opaque	pin_window	 = (Xv_opaque) xv_get(menu, MENU_PIN_WINDOW);
X+ 	void		(*menu_notify)() = (void (*)()) xv_get(menu, MENU_GEN_PROC);
X+ 	void		(*item_notify)() = (void (*)()) xv_get(item, MENU_GEN_PROC);
X+ 	
X+ 	if (pin_window && xv_get(pin_window, XV_SHOW)) {
X+ 	   if (menu_notify)
X+ 	      (*menu_notify)(menu, MENU_NOTIFY);
X+ 	   if (item_notify)
X+ 	      (*item_notify)(item, MENU_NOTIFY);
X+ 	   if (item_notify)
X+ 	      (*item_notify)(item, MENU_NOTIFY_DONE);
X+ 	   if (menu_notify)
X+ 	      (*menu_notify)(menu, MENU_NOTIFY_DONE);
X+ 	}
X+ }
X*** place_dialog.c.orig	Thu Nov  1 15:10:01 1990
X--- place_dialog.c	Tue Oct 23 08:03:26 1990
X***************
X*** 0 ****
X--- 1,65 ----
X+ /************************************************************************/
X+ /*	Copyright 1988-1990 by Chuck Musciano and Harris Corporation	*/
X+ /*									*/
X+ /*	Permission to use, copy, modify, and distribute this software	*/
X+ /*	and its documentation for any purpose and without fee is	*/
X+ /*	hereby granted, provided that the above copyright notice	*/
X+ /*	appear in all copies and that both that copyright notice and	*/
X+ /*	this permission notice appear in supporting documentation, and	*/
X+ /*	that the name of Chuck Musciano and Harris Corporation not be	*/
X+ /*	used in advertising or publicity pertaining to distribution	*/
X+ /*	of the software without specific, written prior permission.	*/
X+ /*	Chuck Musciano and Harris Corporation make no representations	*/
X+ /*	about the suitability of this software for any purpose.  It is	*/
X+ /*	provided "as is" without express or implied warranty.  This 	*/
X+ /*	software may not be sold without the prior explicit permission	*/
X+ /*	of Harris Corporation.						*/
X+ /************************************************************************/
X+ 
X+ /************************************************************************/
X+ /*									*/
X+ /*	place_dialog.c	position a dialog box at the right place	*/
X+ /*									*/
X+ /************************************************************************/
X+ 
X+ #include	<stdio.h>
X+ #include	<sys/param.h>
X+ #include	<sys/types.h>
X+ #include	<xview/xview.h>
X+ #include	<X11/Xutil.h>
X+ 
X+ #include	"manifest.h"
X+ 
X+ /************************************************************************/
X+ EXPORT	void	place_dialog(base, dialog)
X+ 
X+ Xv_opaque	base;
X+ Xv_opaque	dialog;
X+ 
X+ {	Rect		br, dr, sr;
X+ 	XWMHints	*hints;
X+ 
X+ 	sr = *((Rect *) xv_get(base, WIN_SCREEN_RECT));
X+ 	frame_get_rect(base, &br);
X+ 	frame_get_rect(dialog, &dr);
X+ 	if (rect_right(&br) + dr.r_width < sr.r_width) {
X+ 	   dr.r_left = rect_right(&br);
X+ 	   dr.r_top = br.r_top;
X+ 	   }
X+ 	else if (dr.r_width <= br.r_left) {
X+ 	   dr.r_left = br.r_left - dr.r_width;
X+ 	   dr.r_top = br.r_top;
X+ 	   }
X+ 	else {
X+ 	   dr.r_left = br.r_left + 32;
X+ 	   dr.r_top = br.r_top + 32;
X+ 	   }
X+ 	frame_set_rect(dialog, &dr);
X+ 
X+ 	hints = XGetWMHints(xv_get(dialog, XV_DISPLAY), xv_get(dialog, XV_XID));
X+ 	hints->flags |= StateHint;
X+ 	hints->initial_state = NormalState;
X+ 	XSetWMHints(xv_get(dialog, XV_DISPLAY), xv_get(dialog, XV_XID), hints);
X+ 	XFree(hints);
X+ }
X+ 
X*** send_mail.c.orig	Thu Nov  1 15:10:04 1990
X--- send_mail.c	Thu Nov  1 13:39:36 1990
X***************
X*** 0 ****
X--- 1,112 ----
X+ /************************************************************************/
X+ /*									*/
X+ /*	send_mail.c	display a little information window		*/
X+ /*									*/
X+ /************************************************************************/
X+ 
X+ #include	<stdio.h>
X+ #include	<sys/param.h>
X+ #include	<sys/types.h>
X+ #include	<xview/xview.h>
X+ #include	<xview/panel.h>
X+ #include	<xview/textsw.h>
X+ #include	"contool_ui.h"
X+ 
X+ #include	"manifest.h"
X+ 
X+ PUBLIC	contool_base_objects	*contool_base;
X+ 
X+ PRIVATE	contool_mail_objects	*dialog = NULL;
X+ 
X+ /************************************************************************/
X+ EXPORT	popup_send_mail(item, event)
X+ 
X+ Panel_item	item;
X+ Event		*event;
X+ 
X+ {
X+ 	if (dialog == NULL) {
X+ 	   dialog = contool_mail_objects_initialize(NULL, contool_base->base);
X+ 	   place_dialog(contool_base->base, dialog->mail);
X+ 	   xv_set(dialog->other_address, WIN_SHOW, FALSE, NULL);
X+ 	   }
X+ 	xv_set(dialog->mail, XV_SHOW, TRUE, NULL);
X+ 	xv_set(item, PANEL_NOTIFY_STATUS, XV_OK, 0);
X+ }
X+ 
X+ /************************************************************************/
X+ EXPORT	void	handle_address(item, value, event)
X+ 
X+ Panel_item	item;
X+ int		value;
X+ Event		*event;
X+ 
X+ {
X+ 	if (value == 2) {
X+ 	   xv_set(dialog->other_address, WIN_SHOW, TRUE, NULL);
X+ 	   panel_paint(dialog->address, PANEL_NO_CLEAR);
X+ 	   panel_paint(dialog->other_address, PANEL_NO_CLEAR);
X+ 	   }
X+ 	else {
X+ 	   xv_set(dialog->other_address, WIN_SHOW, FALSE, NULL);
X+ 	   panel_paint(dialog->address, PANEL_NO_CLEAR);
X+ 	   }
X+ }
X+ 
X+ /************************************************************************/
X+ EXPORT	void	send_mail(item, event)
X+ 
X+ Panel_item	item;
X+ Event		*event;
X+ 
X+ {	char	cmd[1024], *buf;
X+ 	int	val, size;
X+ 	FILE	*pipe;
X+ 
X+ 	xv_set(item, PANEL_NOTIFY_STATUS, XV_ERROR, 0);
X+ 	val = (int) xv_get(dialog->address, PANEL_VALUE);
X+ 	if (val != 2)
X+ 	   sprintf(cmd, "%s %s", MAILER, xv_get(dialog->address, PANEL_CHOICE_STRING, val));
X+ 	else {
X+ 	   buf = (char *) xv_get(dialog->other_address, PANEL_VALUE);
X+ 	   if (is_empty(buf)) {
X+ 	      error("You must specify an alternate address before sending your message");
X+ 	      return;
X+ 	      }
X+ 	   else
X+ 	      sprintf(cmd, "%s %s", MAILER, buf);
X+ 	   }
X+ 	lets_get_busy(contool_base->base, TRUE, NULL);
X+ 	if ((pipe = popen(cmd, "w")) == NULL) {
X+ 	   error("Could not invoke \"%s\" to send mail", cmd);
X+ 	   return;
X+ 	   }
X+ 	size = (int) xv_get(dialog->message, TEXTSW_LENGTH);
X+ 	if (size == 0) {
X+ 	   error("Please type a message before sending the mail");
X+ 	   return;
X+ 	   }
X+ 	buf = (char *) malloc(size);
X+ 	xv_get(dialog->message, TEXTSW_CONTENTS, 0, buf, size);
X+ 	fprintf(pipe, "Subject: Contool comment\n\n");
X+ 	if (fwrite(buf, 1, size, pipe) != size) {
X+ 	   error("Could not write message to the mailer");
X+ 	   free(buf);
X+ 	   return;
X+ 	   }
X+ 	pclose(pipe);
X+ 	free(buf);
X+ 	lets_get_busy(contool_base->base, FALSE, NULL);
X+ 	xv_set(item, PANEL_NOTIFY_STATUS, XV_OK, 0);
X+ }
X+ 
X+ /************************************************************************/
X+ EXPORT	void	cancel_mail(item, event)
X+ 
X+ Panel_item	item;
X+ Event		*event;
X+ 
X+ {
X+ 	textsw_reset(dialog->message, 0, 0);
X+ 	xv_set(item, PANEL_NOTIFY_STATUS, XV_ERROR, 0);
X+ }
END_OF_FILE
if test 57082 -ne `wc -c <'patch'`; then
    echo shar: \"'patch'\" unpacked with wrong size!
fi
# end of 'patch'
fi
echo shar: End of shell archive.
exit 0

Chuck Musciano				ARPA  : chuck@trantor.harris-atd.com
Harris Corporation 			Usenet: ...!uunet!x102a!trantor!chuck
PO Box 37, MS 3A/1912			AT&T  : (407) 727-6131
Melbourne, FL 32902			FAX   : (407) 729-2537

A good newspaper is never good enough,
	but a lousy newspaper is a joy forever.		-- Garrison Keillor