v13i067: xrainbow, Part05/05

Dave Nedde daven at maxine.WPI.EDU
Fri Jun 28 11:05:28 AEST 1991


Submitted-by: daven at maxine.WPI.EDU (Dave Nedde)
Posting-number: Volume 13, Issue 67
Archive-name: xrainbow/part05

#! /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 archive 5 (of 5)."
# Contents:  xrainbow/X11/Xaw_d/Makefile xrainbow/include/list.h
#   xrainbow/main/AriRegAll.c xrainbow/main/Imakefile
#   xrainbow/main/Makefile xrainbow/main/actions.c
#   xrainbow/main/callbacks.c xrainbow/main/color.c
#   xrainbow/main/list.c xrainbow/main/list.h xrainbow/main/misc.c
#   xrainbow/main/misc.h xrainbow/main/miscx.c
#   xrainbow/main/xrainbow.c
# Wrapped by daven at ash on Mon Jun  3 12:33:25 1991
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'xrainbow/X11/Xaw_d/Makefile' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'xrainbow/X11/Xaw_d/Makefile'\"
else
echo shar: Extracting \"'xrainbow/X11/Xaw_d/Makefile'\" \(8387 characters\)
sed "s/^X//" >'xrainbow/X11/Xaw_d/Makefile' <<'END_OF_FILE'
X# Makefile generated by imake - do not edit!
X# $XConsortium: imake.c,v 1.51 89/12/12 12:37:30 jim Exp $
X#
X# The cpp used on this machine replaces all newlines and multiple tabs and
X# spaces in a macro expansion with a single space.  Imake tries to compensate
X# for this, but is not always successful.
X#
X
X###########################################################################
X# Makefile generated from "Imake.tmpl" and <Imakefile>
X# $XConsortium: Imake.tmpl,v 1.77 89/12/18 17:01:37 jim Exp $
X#
X# Platform-specific parameters may be set in the appropriate .cf
X# configuration files.  Site-wide parameters may be set in the file
X# site.def.  Full rebuilds are recommended if any parameters are changed.
X#
X# If your C preprocessor doesn't define any unique symbols, you'll need
X# to set BOOTSTRAPCFLAGS when rebuilding imake (usually when doing
X# "make Makefile", "make Makefiles", or "make World").
X#
X# If you absolutely can't get imake to work, you'll need to set the
X# variables at the top of each Makefile as well as the dependencies at the
X# bottom (makedepend will do this automatically).
X#
X
X###########################################################################
X# platform-specific configuration parameters - edit sun.cf to change
X
X# platform:  $XConsortium: sun.cf,v 1.38 89/12/23 16:10:10 jim Exp $
X# operating system:  SunOS 4.1
X
X###########################################################################
X# site-specific configuration parameters - edit site.def to change
X
X# site:  $XConsortium: site.def,v 1.21 89/12/06 11:46:50 jim Exp $
X
X            SHELL = /bin/sh
X
X              TOP = ../../.
X      CURRENT_DIR = ./X11/Xaw_d
X
X               AR = ar cq
X  BOOTSTRAPCFLAGS =
X               CC = cc
X
X         COMPRESS = compress
X              CPP = /lib/cpp $(STD_CPP_DEFINES)
X    PREPROCESSCMD = cc -E $(STD_CPP_DEFINES)
X          INSTALL = install
X               LD = ld
X             LINT = lint
X      LINTLIBFLAG = -C
X         LINTOPTS = -axz
X               LN = ln -s
X             MAKE = make
X               MV = mv
X               CP = cp
X           RANLIB = ranlib
X  RANLIBINSTFLAGS =
X               RM = rm -f
X     STD_INCLUDES =
X  STD_CPP_DEFINES =
X      STD_DEFINES =
X EXTRA_LOAD_FLAGS =
X  EXTRA_LIBRARIES =
X             TAGS = ctags
X
X    SHAREDCODEDEF = -DSHAREDCODE
X         SHLIBDEF = -DSUNSHLIB
X
X    PROTO_DEFINES =
X
X     INSTPGMFLAGS =
X
X     INSTBINFLAGS = -m 0755
X     INSTUIDFLAGS = -m 4755
X     INSTLIBFLAGS = -m 0664
X     INSTINCFLAGS = -m 0444
X     INSTMANFLAGS = -m 0444
X     INSTDATFLAGS = -m 0444
X    INSTKMEMFLAGS = -m 4755
X
X          DESTDIR =
X
X     TOP_INCLUDES = -I$(INCROOT)
X
X      CDEBUGFLAGS = -O
X        CCOPTIONS =
X      COMPATFLAGS = -DXAW_BC
X
X      ALLINCLUDES = $(STD_INCLUDES) $(TOP_INCLUDES) $(INCLUDES) $(EXTRA_INCLUDES)
X       ALLDEFINES = $(ALLINCLUDES) $(STD_DEFINES) $(PROTO_DEFINES) $(DEFINES) $(COMPATFLAGS)
X           CFLAGS = $(CDEBUGFLAGS) $(CCOPTIONS) $(ALLDEFINES)
X        LINTFLAGS = $(LINTOPTS) -DLINT $(ALLDEFINES)
X           LDLIBS = $(SYS_LIBRARIES) $(EXTRA_LIBRARIES)
X        LDOPTIONS = $(CDEBUGFLAGS) $(CCOPTIONS)
X   LDCOMBINEFLAGS = -X -r
X
X        MACROFILE = sun.cf
X           RM_CMD = $(RM) *.CKP *.ln *.BAK *.bak *.o core errs ,* *~ *.a .emacs_* tags TAGS make.log MakeOut
X
X    IMAKE_DEFINES =
X
X         IRULESRC = $(CONFIGDIR)
X        IMAKE_CMD = $(IMAKE) -DUseInstalled -I$(IRULESRC) $(IMAKE_DEFINES)
X
X     ICONFIGFILES = $(IRULESRC)/Imake.tmpl $(IRULESRC)/Imake.rules \
X			$(IRULESRC)/Project.tmpl $(IRULESRC)/site.def \
X			$(IRULESRC)/$(MACROFILE) $(EXTRA_ICONFIGFILES)
X
X###########################################################################
X# X Window System Build Parameters
X# $XConsortium: Project.tmpl,v 1.63 89/12/18 16:46:44 jim Exp $
X
X###########################################################################
X# X Window System make variables; this need to be coordinated with rules
X# $XConsortium: Project.tmpl,v 1.63 89/12/18 16:46:44 jim Exp $
X
X          PATHSEP = /
X        USRLIBDIR = $(DESTDIR)/usr/lib
X           BINDIR = $(DESTDIR)/usr/bin/X11
X          INCROOT = $(DESTDIR)/usr/include
X     BUILDINCROOT = $(TOP)
X      BUILDINCDIR = $(BUILDINCROOT)/X11
X      BUILDINCTOP = ..
X           INCDIR = $(INCROOT)/X11
X           ADMDIR = $(DESTDIR)/usr/adm
X           LIBDIR = $(USRLIBDIR)/X11
X        CONFIGDIR = $(LIBDIR)/config
X       LINTLIBDIR = $(USRLIBDIR)/lint
X
X          FONTDIR = $(LIBDIR)/fonts
X         XINITDIR = $(LIBDIR)/xinit
X           XDMDIR = $(LIBDIR)/xdm
X           AWMDIR = $(LIBDIR)/awm
X           TWMDIR = $(LIBDIR)/twm
X           GWMDIR = $(LIBDIR)/gwm
X          MANPATH = $(DESTDIR)/usr/man
X    MANSOURCEPATH = $(MANPATH)/man
X           MANDIR = $(MANSOURCEPATH)n
X        LIBMANDIR = $(MANSOURCEPATH)3
X      XAPPLOADDIR = $(LIBDIR)/app-defaults
X
X        SOXLIBREV = 4.2
X          SOXTREV = 4.0
X         SOXAWREV = 4.0
X        SOOLDXREV = 4.0
X         SOXMUREV = 4.0
X        SOXEXTREV = 4.0
X
X       FONTCFLAGS = -t
X
X     INSTAPPFLAGS = $(INSTDATFLAGS)
X
X            IMAKE = imake
X           DEPEND = makedepend
X              RGB = rgb
X            FONTC = bdftosnf
X        MKFONTDIR = mkfontdir
X        MKDIRHIER = /bin/sh $(BINDIR)/mkdirhier.sh
X
X        CONFIGSRC = $(TOP)/config
X        CLIENTSRC = $(TOP)/clients
X          DEMOSRC = $(TOP)/demos
X           LIBSRC = $(TOP)/lib
X          FONTSRC = $(TOP)/fonts
X       INCLUDESRC = $(TOP)/X11
X        SERVERSRC = $(TOP)/server
X          UTILSRC = $(TOP)/util
X        SCRIPTSRC = $(UTILSRC)/scripts
X       EXAMPLESRC = $(TOP)/examples
X       CONTRIBSRC = $(TOP)/../contrib
X           DOCSRC = $(TOP)/doc
X           RGBSRC = $(TOP)/rgb
X        DEPENDSRC = $(UTILSRC)/makedepend
X         IMAKESRC = $(CONFIGSRC)
X         XAUTHSRC = $(LIBSRC)/Xau
X          XLIBSRC = $(LIBSRC)/X
X           XMUSRC = $(LIBSRC)/Xmu
X       TOOLKITSRC = $(LIBSRC)/Xt
X       AWIDGETSRC = $(LIBSRC)/Xaw
X       OLDXLIBSRC = $(LIBSRC)/oldX
X      XDMCPLIBSRC = $(LIBSRC)/Xdmcp
X      BDFTOSNFSRC = $(FONTSRC)/bdftosnf
X     MKFONTDIRSRC = $(FONTSRC)/mkfontdir
X     EXTENSIONSRC = $(TOP)/extensions
X
X  DEPEXTENSIONLIB = $(USRLIBDIR)/libXext.a
X     EXTENSIONLIB =  -lXext
X
X          DEPXLIB = $(DEPEXTENSIONLIB)
X             XLIB = $(EXTENSIONLIB) -lX11
X
X      DEPXAUTHLIB = $(USRLIBDIR)/libXau.a
X         XAUTHLIB =  -lXau
X
X        DEPXMULIB =
X           XMULIB = -lXmu
X
X       DEPOLDXLIB =
X          OLDXLIB = -loldX
X
X      DEPXTOOLLIB =
X         XTOOLLIB = -lXt
X
X        DEPXAWLIB =
X           XAWLIB = -lXaw
X
X LINTEXTENSIONLIB = $(USRLIBDIR)/llib-lXext.ln
X         LINTXLIB = $(USRLIBDIR)/llib-lX11.ln
X          LINTXMU = $(USRLIBDIR)/llib-lXmu.ln
X        LINTXTOOL = $(USRLIBDIR)/llib-lXt.ln
X          LINTXAW = $(USRLIBDIR)/llib-lXaw.ln
X
X          DEPLIBS = $(DEPXAWLIB) $(DEPXMULIB) $(DEPXTOOLLIB) $(DEPXLIB)
X
X         DEPLIBS1 = $(DEPLIBS)
X         DEPLIBS2 = $(DEPLIBS)
X         DEPLIBS3 = $(DEPLIBS)
X
X###########################################################################
X# Imake rules for building libraries, programs, scripts, and data files
X# rules:  $XConsortium: Imake.rules,v 1.67 89/12/18 17:14:15 jim Exp $
X
X###########################################################################
X# start of Imakefile
X
X#
X#   Imakefile for Xaw_d : Dave Nedde (daven at wpi.wpi.edu)
X#
X
X        INCROOT = ../..
X           SRCS = DrawingA.c
X
Xall:: libXaw_d.a
X
XlibXaw_d.a: DrawingA.o
X	$(RM) $@
X	$(AR) $@ DrawingA.o
X	$(RANLIB) $@
X
Xdepend::
X	$(DEPEND) -s "# DO NOT DELETE" -- $(ALLDEFINES) -- $(SRCS)
X
Xlintlib:: llib-lXaw_d.ln
X
Xllib-lXaw_d.ln: $(SRCS)
X	$(RM) $@
X	$(LINT) $(LINTLIBFLAG)Xaw_d $(LINTFLAGS) $(SRCS)
X
X###########################################################################
X# common rules for all Makefiles - do not edit
X
Xemptyrule::
X
Xclean::
X	$(RM_CMD) \#*
X
XMakefile::
X	- at if [ -f Makefile ]; then \
X	echo "	$(RM) Makefile.bak; $(MV) Makefile Makefile.bak"; \
X	$(RM) Makefile.bak; $(MV) Makefile Makefile.bak; \
X	else exit 0; fi
X	$(IMAKE_CMD) -DTOPDIR=$(TOP) -DCURDIR=$(CURRENT_DIR)
X
Xtags::
X	$(TAGS) -w *.[ch]
X	$(TAGS) -xw *.[ch] > TAGS
X
X###########################################################################
X# empty rules for directories that do not have SUBDIRS - do not edit
X
Xinstall::
X	@echo "install in $(CURRENT_DIR) done"
X
Xinstall.man::
X	@echo "install.man in $(CURRENT_DIR) done"
X
XMakefiles::
X
Xincludes::
X
X###########################################################################
X# dependencies generated by makedepend
X
END_OF_FILE
if test 8387 -ne `wc -c <'xrainbow/X11/Xaw_d/Makefile'`; then
    echo shar: \"'xrainbow/X11/Xaw_d/Makefile'\" unpacked with wrong size!
fi
# end of 'xrainbow/X11/Xaw_d/Makefile'
fi
if test -f 'xrainbow/include/list.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'xrainbow/include/list.h'\"
else
echo shar: Extracting \"'xrainbow/include/list.h'\" \(2984 characters\)
sed "s/^X//" >'xrainbow/include/list.h' <<'END_OF_FILE'
X/**********************************************************************
X * List.h - List data structures.
X *
X * David Nedde  11/21/89
X **********************************************************************/
X
X#ifndef LIST_H
X#define LIST_H
X
Xtypedef unsigned char bool;
X
X/* One node in the list */
Xtypedef struct list_node_struct list_node_type;
Xstruct list_node_struct {
X  char *item_ptr;      /* The data item hung off of the list */
X  list_node_type *prev_node_ptr; /* Points to the prev node in the list */
X  list_node_type *next_node_ptr; /* Points to the next node in the list */
X};
X
X/* The list's head, tail, etc */
Xtypedef struct list_struct *list_type;
Xstruct list_struct {
X  list_node_type *head_ptr; /* Points to the head of the list */
X  list_node_type *next_ptr; /* Points to next item returned with list_next */
X  list_node_type *curr_ptr; /* Points to curr item returned with list_next */
X  list_node_type *tail_ptr; /* Points to the end of the list */
X};
X
X#define TRUE  1
X#define FALSE 0
X
X#ifndef NULL
X#define NULL ((char *)0L)
X#endif
X
X#define LIST_NULL ((list_type)NULL)
X
X#ifdef DEBUG
X#define assert( condition, message)                                     \
X  {                                                                     \
X    if (!(condition))                                                   \
X      printf("List Error: File \"%s\", Line %d: %s",                 	\
X                  __FILE__, __LINE__, message);                         \
X  }
X
X#define LIST_TEST(list) /*list_test(list)*/
X#else
X#define assert( condition, message)
X#define LIST_TEST(list)
X#endif
X
X
X
X#define ListMalloc(n) \
X  (list_malloc(TRUE,(n)) == NULL \
X     ? (char *)printf("List Error: File \"%s\", Line %d: Out of memory", \
X		      __FILE__,__LINE__) \
X     : list_malloc(FALSE,(n)))
X
X
X/**********************************************************************
X * List of pointers handling routines
X *
X *   List_Make          - Create a list
X *   List_Add_End       - Add to the end of the list
X *   List_Add_Start     - Add to the start of the list
X *   List_Remove_Start  - Remove first item from a list and return it
X *   List_First         - Move to start of list and return first item
X *   List_Next          - Return the next item in the list (NULL if eol)
X *   List_Last          - Return last item in list
X *   List_Destroy       - Deallocate the list but not the contents
X *   List_Deallocate    - Deallocate everything in the list
X *   List_Dup_Node      - Allocate a duplicate list node
X *
X * David Nedde  11/21/89
X **********************************************************************/
Xlist_type list_make();
Xchar *list_add_end();
Xchar *list_add_start();
Xchar *list_add_before_curr();
Xchar *list_add_sort();
Xchar *list_remove_start();
Xchar *list_remove_end();
Xchar *list_remove_curr();
Xchar *list_first();
Xchar *list_next();
Xchar *list_last();
Xvoid      list_destroy();
Xvoid      list_deallocate();
Xchar *list_dup_node();
Xchar	 *list_malloc();
Xint  list_count();
X
X#endif
X
END_OF_FILE
if test 2984 -ne `wc -c <'xrainbow/include/list.h'`; then
    echo shar: \"'xrainbow/include/list.h'\" unpacked with wrong size!
fi
# end of 'xrainbow/include/list.h'
fi
if test -f 'xrainbow/main/AriRegAll.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'xrainbow/main/AriRegAll.c'\"
else
echo shar: Extracting \"'xrainbow/main/AriRegAll.c'\" \(5207 characters\)
sed "s/^X//" >'xrainbow/main/AriRegAll.c' <<'END_OF_FILE'
X/*
X** Copyright (c) 1990 David E. Smyth
X**
X** Redistribution and use in source and binary forms are permitted
X** provided that the above copyright notice and this paragraph are
X** duplicated in all such forms and that any documentation, advertising
X** materials, and other materials related to such distribution and use
X** acknowledge that the software was developed by David E. Smyth.  The
X** name of David E. Smyth may not be used to endorse or promote products
X** derived from this software without specific prior written permission.
X** THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
X** WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
X** MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
X**
X*/
X
X/*
X* SCCS_data: @(#)AriRegAll.c 1.0 ( 19 June 1990 )
X*
X* Subsystem_group:
X*
X*     Widget Creation Library - Athena Resource Interpreter
X*
X* Module_description:
X*
X*     This module contains registration routine for all Athena
X*     widget constructors and classes.  
X*
X* Module_interface_summary: 
X*
X*     void AriRegisterAthena ( XtAppContext app )
X*
X* Module_history:
X*                                                  
X*   mm/dd/yy  initials  function  action
X*   --------  --------  --------  ---------------------------------------------
X*   06/19/90  D.Smyth   all	  create.
X*
X* Design_notes:
X*
X*******************************************************************************
X*/
X/*
X*******************************************************************************
X* Include_files.
X*******************************************************************************
X*/
X
X#include <X11/Xatom.h>
X#include <X11/Intrinsic.h>
X#include <X11/StringDefs.h>
X
X#include <X11/Xaw/AsciiText.h>
X#include <X11/Xaw/Command.h>
X#include <X11/Xaw/Form.h>
X#include <X11/Xaw/Label.h>
X#include <X11/Xaw/List.h>
X/*#include <X11/Xaw/MenuButton.h>*/
X/*#include <X11/Xaw/SimpleMenu.h>*/
X/*#include <X11/Xaw/SmeBSB.h>*/
X/*#include <X11/Xaw/Toggle.h>*/
X#include <X11/Xaw/Viewport.h>
X/*#include <X11/Xaw/Scrollbar.h>*/
X/*#include <X11/Xaw/Box.h>*/
X/*#include <X11/Xaw/Clock.h>*/
X/*#include <X11/Xaw/Dialog.h>*/
X/*#include <X11/Xaw/Grip.h>*/
X/*#include <X11/Xaw/Logo.h>*/
X/*#include <X11/Xaw/SmeLine.h>*/
X/*#include <X11/Xaw/StripChart.h>*/
X#include <X11/Xaw/Paned.h>
X
X#include <X11/Xaw/Cardinals.h>
X
Xvoid AriRegisterAthena ( app )
X    XtAppContext app;
X{
X
X#define RCN( name, class ) WcRegisterClassName ( app, name, class );
X#define RCP( name, class ) WcRegisterClassPtr  ( app, name, class );
X
X    /* -- register all Athena widget classes */
X    /* Simple Widgets (Chapt 3) */
X    RCN("Command",			commandWidgetClass	);
X    RCP("commandWidgetClass",		commandWidgetClass	);
X/*    RCN("Grip",				gripWidgetClass		);*/
X/*    RCP("gripWidgetClass",		gripWidgetClass		);*/
X    RCN("Label",			labelWidgetClass	);
X    RCP("labelWidgetClass",		labelWidgetClass	);
X    RCN("List",				listWidgetClass		);
X    RCP("listWidgetClass",		listWidgetClass		);
X/*    RCN("Scrollbar",			scrollbarWidgetClass	);*/
X/*    RCP("scrollbarWidgetClass",		scrollbarWidgetClass	);*/
X/*    RCN("Simple",			simpleWidgetClass	);*/
X/*    RCP("simpleWidgetClass",		simpleWidgetClass	);*/
X/*    RCN("StripChart",			stripChartWidgetClass	);*/
X/*    RCP("stripChartWidgetClass",	stripChartWidgetClass	);*/
X/*    RCN("Toggle",			toggleWidgetClass	);*/
X/*    RCP("toggleWidgetClass",		toggleWidgetClass	);*/
X
X    /* Menus (Chapt 4) */
X/*    RCN("SimpleMenu",			simpleMenuWidgetClass	);*/
X/*    RCP("simpleMenuWidgetClass",	simpleMenuWidgetClass	);*/
X/*    RCN("SmeBSB",			smeBSBObjectClass	);*/
X/*    RCP("smeBSBObjectClass",		smeBSBObjectClass	);*/
X/*    RCN("SmeLine",			smeLineObjectClass	);*/
X/*    RCP("smeLineObjectClass",		smeLineObjectClass	);*/
X/*    RCN("Sme",				smeObjectClass		);*/
X/*    RCP("smeObjectClass",		smeObjectClass		);*/
X/*    RCN("MenuButton",			menuButtonWidgetClass	);*/
X/*    RCP("menuButtonWidgetClass",	menuButtonWidgetClass	);*/
X
X    /* Text Widgets (Chapt 5) */
X    RCN("AsciiText",			asciiTextWidgetClass	); /* NB name */
X    RCP("asciiTextWidgetClass",		asciiTextWidgetClass	);
X/*    RCN("AsciiSrc",			asciiSrcObjectClass	);*/
X/*    RCP("asciiSrcObjectClass",		asciiSrcObjectClass	);*/
X/*    RCN("AsciiSink",			asciiSinkObjectClass	);*/
X/*    RCP("asciiSinkObjectClass",		asciiSinkObjectClass	);*/
X/*    RCN("Text",				textWidgetClass		);*/
X/*    RCP("textWidgetClass",		textWidgetClass		);*/
X
X    /* Composite and Constraint Widgets (Chapt 6) */
X/*    RCN("Box",				boxWidgetClass		);*/
X/*    RCP("boxWidgetClass",		boxWidgetClass		);*/
X/*    RCN("Dialog",			dialogWidgetClass	);*/
X/*    RCP("dialogWidgetClass",		dialogWidgetClass	);*/
X    RCN("Form",				formWidgetClass		);
X    RCP("formWidgetClass",		formWidgetClass		);
X    RCN("Paned",			panedWidgetClass	);
X    RCP("panedWidgetClass",		panedWidgetClass	);
X    RCN("Viewport",			viewportWidgetClass	);
X    RCP("viewportWidgetClass",		viewportWidgetClass	);
X
X    /* Other Interestng Widgets (not in ref manual) */
X/*    RCN("ClockWidget",			clockWidgetClass	);*/
X/*    RCP("clockWidgetClass",		clockWidgetClass	);*/
X/*    RCN("LogoWidget",			logoWidgetClass		);*/
X/*    RCP("logoWidgetClass",		logoWidgetClass		);*/
X
X#undef RCN
X#undef RCP
X}
END_OF_FILE
if test 5207 -ne `wc -c <'xrainbow/main/AriRegAll.c'`; then
    echo shar: \"'xrainbow/main/AriRegAll.c'\" unpacked with wrong size!
fi
# end of 'xrainbow/main/AriRegAll.c'
fi
if test -f 'xrainbow/main/Imakefile' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'xrainbow/main/Imakefile'\"
else
echo shar: Extracting \"'xrainbow/main/Imakefile'\" \(1038 characters\)
sed "s/^X//" >'xrainbow/main/Imakefile' <<'END_OF_FILE'
X/**/#
X/**/#   Imakefile for XRainbow : Dave Nedde (daven at wpi.wpi.edu)
X/**/#
X
X        BASEDIR = ..
X        INCROOT = $(BASEDIR)/include
X    DEPXAW_DLIB = $(BASEDIR)/X11/Xaw_d/libXaw_d.a
X       DEPWCLIB = $(BASEDIR)/Wc1_05/Wc/libWc.a
X       XAW_DLIB = $(BASEDIR)/X11/Xaw_d/libXaw_d.a
X          WCLIB = $(BASEDIR)/Wc1_05/Wc/libWc.a
X        DEPLIBS = $(DEPXAW_DLIB) $(DEPWCLIB) \
X		  $(DEPXAWLIB) $(DEPXMULIB) $(DEPXTOOLLIB) $(DEPXLIB)
X       LINTOPTS = -achz
X        DEFINES = -DRGB_TXT='"'DefaultRGBDatabase'.txt"'
X
X#ifdef UltrixArchitecture
XLOCAL_LIBRARIES = $(DEPLIBS)
X#else
XLOCAL_LIBRARIES =  $(WCLIB) $(XAW_DLIB) $(XAWLIB) \
X		   $(XMULIB) $(XTOOLLIB) $(XLIB) -L$(HOME)/lib /*-lmalloc */
X/**/#/usr/lib/debug/malloc.o
X#endif
X
XSRCS = \
X	AriRegAll.c \
X	actions.c \
X	callbacks.c \
X	color.c \
X	misc.c \
X	miscx.c \
X	list.c \
X	xrainbow.c
X
XOBJS = \
X	AriRegAll.o \
X	actions.o \
X	callbacks.o \
X	color.o \
X	misc.o \
X	miscx.o \
X	list.o \
X	xrainbow.o
X
XComplexProgramTarget(xrainbow)
X
XInstallAppDefaults(xrainbow)
X
X
Xdebug:
X	$(MAKE) 'CDEBUGFLAGS=-g'
X
END_OF_FILE
if test 1038 -ne `wc -c <'xrainbow/main/Imakefile'`; then
    echo shar: \"'xrainbow/main/Imakefile'\" unpacked with wrong size!
fi
# end of 'xrainbow/main/Imakefile'
fi
if test -f 'xrainbow/main/Makefile' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'xrainbow/main/Makefile'\"
else
echo shar: Extracting \"'xrainbow/main/Makefile'\" \(9477 characters\)
sed "s/^X//" >'xrainbow/main/Makefile' <<'END_OF_FILE'
X# Makefile generated by imake - do not edit!
X# $XConsortium: imake.c,v 1.51 89/12/12 12:37:30 jim Exp $
X#
X# The cpp used on this machine replaces all newlines and multiple tabs and
X# spaces in a macro expansion with a single space.  Imake tries to compensate
X# for this, but is not always successful.
X#
X
X###########################################################################
X# Makefile generated from "Imake.tmpl" and <Imakefile>
X# $XConsortium: Imake.tmpl,v 1.77 89/12/18 17:01:37 jim Exp $
X#
X# Platform-specific parameters may be set in the appropriate .cf
X# configuration files.  Site-wide parameters may be set in the file
X# site.def.  Full rebuilds are recommended if any parameters are changed.
X#
X# If your C preprocessor doesn't define any unique symbols, you'll need
X# to set BOOTSTRAPCFLAGS when rebuilding imake (usually when doing
X# "make Makefile", "make Makefiles", or "make World").
X#
X# If you absolutely can't get imake to work, you'll need to set the
X# variables at the top of each Makefile as well as the dependencies at the
X# bottom (makedepend will do this automatically).
X#
X
X###########################################################################
X# platform-specific configuration parameters - edit sun.cf to change
X
X# platform:  $XConsortium: sun.cf,v 1.38 89/12/23 16:10:10 jim Exp $
X# operating system:  SunOS 4.1
X
X###########################################################################
X# site-specific configuration parameters - edit site.def to change
X
X# site:  $XConsortium: site.def,v 1.21 89/12/06 11:46:50 jim Exp $
X
X            SHELL = /bin/sh
X
X              TOP = ../.
X      CURRENT_DIR = ./main
X
X               AR = ar cq
X  BOOTSTRAPCFLAGS =
X               CC = cc
X
X         COMPRESS = compress
X              CPP = /lib/cpp $(STD_CPP_DEFINES)
X    PREPROCESSCMD = cc -E $(STD_CPP_DEFINES)
X          INSTALL = install
X               LD = ld
X             LINT = lint
X      LINTLIBFLAG = -C
X         LINTOPTS = -axz
X               LN = ln -s
X             MAKE = make
X               MV = mv
X               CP = cp
X           RANLIB = ranlib
X  RANLIBINSTFLAGS =
X               RM = rm -f
X     STD_INCLUDES =
X  STD_CPP_DEFINES =
X      STD_DEFINES =
X EXTRA_LOAD_FLAGS =
X  EXTRA_LIBRARIES =
X             TAGS = ctags
X
X    SHAREDCODEDEF = -DSHAREDCODE
X         SHLIBDEF = -DSUNSHLIB
X
X    PROTO_DEFINES =
X
X     INSTPGMFLAGS =
X
X     INSTBINFLAGS = -m 0755
X     INSTUIDFLAGS = -m 4755
X     INSTLIBFLAGS = -m 0664
X     INSTINCFLAGS = -m 0444
X     INSTMANFLAGS = -m 0444
X     INSTDATFLAGS = -m 0444
X    INSTKMEMFLAGS = -m 4755
X
X          DESTDIR =
X
X     TOP_INCLUDES = -I$(INCROOT)
X
X      CDEBUGFLAGS = -O
X        CCOPTIONS =
X      COMPATFLAGS = -DXAW_BC
X
X      ALLINCLUDES = $(STD_INCLUDES) $(TOP_INCLUDES) $(INCLUDES) $(EXTRA_INCLUDES)
X       ALLDEFINES = $(ALLINCLUDES) $(STD_DEFINES) $(PROTO_DEFINES) $(DEFINES) $(COMPATFLAGS)
X           CFLAGS = $(CDEBUGFLAGS) $(CCOPTIONS) $(ALLDEFINES)
X        LINTFLAGS = $(LINTOPTS) -DLINT $(ALLDEFINES)
X           LDLIBS = $(SYS_LIBRARIES) $(EXTRA_LIBRARIES)
X        LDOPTIONS = $(CDEBUGFLAGS) $(CCOPTIONS)
X   LDCOMBINEFLAGS = -X -r
X
X        MACROFILE = sun.cf
X           RM_CMD = $(RM) *.CKP *.ln *.BAK *.bak *.o core errs ,* *~ *.a .emacs_* tags TAGS make.log MakeOut
X
X    IMAKE_DEFINES =
X
X         IRULESRC = $(CONFIGDIR)
X        IMAKE_CMD = $(IMAKE) -DUseInstalled -I$(IRULESRC) $(IMAKE_DEFINES)
X
X     ICONFIGFILES = $(IRULESRC)/Imake.tmpl $(IRULESRC)/Imake.rules \
X			$(IRULESRC)/Project.tmpl $(IRULESRC)/site.def \
X			$(IRULESRC)/$(MACROFILE) $(EXTRA_ICONFIGFILES)
X
X###########################################################################
X# X Window System Build Parameters
X# $XConsortium: Project.tmpl,v 1.63 89/12/18 16:46:44 jim Exp $
X
X###########################################################################
X# X Window System make variables; this need to be coordinated with rules
X# $XConsortium: Project.tmpl,v 1.63 89/12/18 16:46:44 jim Exp $
X
X          PATHSEP = /
X        USRLIBDIR = $(DESTDIR)/usr/lib
X           BINDIR = $(DESTDIR)/usr/bin/X11
X          INCROOT = $(DESTDIR)/usr/include
X     BUILDINCROOT = $(TOP)
X      BUILDINCDIR = $(BUILDINCROOT)/X11
X      BUILDINCTOP = ..
X           INCDIR = $(INCROOT)/X11
X           ADMDIR = $(DESTDIR)/usr/adm
X           LIBDIR = $(USRLIBDIR)/X11
X        CONFIGDIR = $(LIBDIR)/config
X       LINTLIBDIR = $(USRLIBDIR)/lint
X
X          FONTDIR = $(LIBDIR)/fonts
X         XINITDIR = $(LIBDIR)/xinit
X           XDMDIR = $(LIBDIR)/xdm
X           AWMDIR = $(LIBDIR)/awm
X           TWMDIR = $(LIBDIR)/twm
X           GWMDIR = $(LIBDIR)/gwm
X          MANPATH = $(DESTDIR)/usr/man
X    MANSOURCEPATH = $(MANPATH)/man
X           MANDIR = $(MANSOURCEPATH)n
X        LIBMANDIR = $(MANSOURCEPATH)3
X      XAPPLOADDIR = $(LIBDIR)/app-defaults
X
X        SOXLIBREV = 4.2
X          SOXTREV = 4.0
X         SOXAWREV = 4.0
X        SOOLDXREV = 4.0
X         SOXMUREV = 4.0
X        SOXEXTREV = 4.0
X
X       FONTCFLAGS = -t
X
X     INSTAPPFLAGS = $(INSTDATFLAGS)
X
X            IMAKE = imake
X           DEPEND = makedepend
X              RGB = rgb
X            FONTC = bdftosnf
X        MKFONTDIR = mkfontdir
X        MKDIRHIER = /bin/sh $(BINDIR)/mkdirhier.sh
X
X        CONFIGSRC = $(TOP)/config
X        CLIENTSRC = $(TOP)/clients
X          DEMOSRC = $(TOP)/demos
X           LIBSRC = $(TOP)/lib
X          FONTSRC = $(TOP)/fonts
X       INCLUDESRC = $(TOP)/X11
X        SERVERSRC = $(TOP)/server
X          UTILSRC = $(TOP)/util
X        SCRIPTSRC = $(UTILSRC)/scripts
X       EXAMPLESRC = $(TOP)/examples
X       CONTRIBSRC = $(TOP)/../contrib
X           DOCSRC = $(TOP)/doc
X           RGBSRC = $(TOP)/rgb
X        DEPENDSRC = $(UTILSRC)/makedepend
X         IMAKESRC = $(CONFIGSRC)
X         XAUTHSRC = $(LIBSRC)/Xau
X          XLIBSRC = $(LIBSRC)/X
X           XMUSRC = $(LIBSRC)/Xmu
X       TOOLKITSRC = $(LIBSRC)/Xt
X       AWIDGETSRC = $(LIBSRC)/Xaw
X       OLDXLIBSRC = $(LIBSRC)/oldX
X      XDMCPLIBSRC = $(LIBSRC)/Xdmcp
X      BDFTOSNFSRC = $(FONTSRC)/bdftosnf
X     MKFONTDIRSRC = $(FONTSRC)/mkfontdir
X     EXTENSIONSRC = $(TOP)/extensions
X
X  DEPEXTENSIONLIB = $(USRLIBDIR)/libXext.a
X     EXTENSIONLIB =  -lXext
X
X          DEPXLIB = $(DEPEXTENSIONLIB)
X             XLIB = $(EXTENSIONLIB) -lX11
X
X      DEPXAUTHLIB = $(USRLIBDIR)/libXau.a
X         XAUTHLIB =  -lXau
X
X        DEPXMULIB =
X           XMULIB = -lXmu
X
X       DEPOLDXLIB =
X          OLDXLIB = -loldX
X
X      DEPXTOOLLIB =
X         XTOOLLIB = -lXt
X
X        DEPXAWLIB =
X           XAWLIB = -lXaw
X
X LINTEXTENSIONLIB = $(USRLIBDIR)/llib-lXext.ln
X         LINTXLIB = $(USRLIBDIR)/llib-lX11.ln
X          LINTXMU = $(USRLIBDIR)/llib-lXmu.ln
X        LINTXTOOL = $(USRLIBDIR)/llib-lXt.ln
X          LINTXAW = $(USRLIBDIR)/llib-lXaw.ln
X
X          DEPLIBS = $(DEPXAWLIB) $(DEPXMULIB) $(DEPXTOOLLIB) $(DEPXLIB)
X
X         DEPLIBS1 = $(DEPLIBS)
X         DEPLIBS2 = $(DEPLIBS)
X         DEPLIBS3 = $(DEPLIBS)
X
X###########################################################################
X# Imake rules for building libraries, programs, scripts, and data files
X# rules:  $XConsortium: Imake.rules,v 1.67 89/12/18 17:14:15 jim Exp $
X
X###########################################################################
X# start of Imakefile
X
X#
X#   Imakefile for XRainbow : Dave Nedde (daven at wpi.wpi.edu)
X#
X
X        BASEDIR = ..
X        INCROOT = $(BASEDIR)/include
X    DEPXAW_DLIB = $(BASEDIR)/X11/Xaw_d/libXaw_d.a
X       DEPWCLIB = $(BASEDIR)/Wc1_05/Wc/libWc.a
X       XAW_DLIB = $(BASEDIR)/X11/Xaw_d/libXaw_d.a
X          WCLIB = $(BASEDIR)/Wc1_05/Wc/libWc.a
X        DEPLIBS = $(DEPXAW_DLIB) $(DEPWCLIB) \
X		  $(DEPXAWLIB) $(DEPXMULIB) $(DEPXTOOLLIB) $(DEPXLIB)
X       LINTOPTS = -achz
X        DEFINES = -DRGB_TXT='"'$(LIBDIR)/rgb'.txt"'
X
XLOCAL_LIBRARIES =  $(WCLIB) $(XAW_DLIB) $(XAWLIB) \
X		   $(XMULIB) $(XTOOLLIB) $(XLIB) -L$(HOME)/lib
X#/usr/lib/debug/malloc.o
X
XSRCS = \
X	AriRegAll.c \
X	actions.c \
X	callbacks.c \
X	color.c \
X	misc.c \
X	miscx.c \
X	list.c \
X	xrainbow.c
X
XOBJS = \
X	AriRegAll.o \
X	actions.o \
X	callbacks.o \
X	color.o \
X	misc.o \
X	miscx.o \
X	list.o \
X	xrainbow.o
X
X PROGRAM = xrainbow
X
Xall:: xrainbow
X
Xxrainbow: $(OBJS) $(DEPLIBS)
X	$(RM) $@
X	$(CC) -o $@ $(OBJS) $(LDOPTIONS) $(LOCAL_LIBRARIES) $(LDLIBS) $(EXTRA_LOAD_FLAGS)
X
Xinstall:: xrainbow
X	$(INSTALL) -c $(INSTPGMFLAGS)   xrainbow $(BINDIR)
X
Xinstall.man:: xrainbow.man
X	$(INSTALL) -c $(INSTMANFLAGS) xrainbow.man $(MANDIR)/xrainbow.n
X
Xdepend::
X	$(DEPEND) -s "# DO NOT DELETE" -- $(ALLDEFINES) -- $(SRCS)
X
Xlint:
X	$(LINT) $(LINTFLAGS) $(SRCS) $(LINTLIBS)
Xlint1:
X	$(LINT) $(LINTFLAGS) $(FILE) $(LINTLIBS)
X
Xclean::
X	$(RM) $(PROGRAM)
X
Xinstall:: xrainbow.ad
X	$(INSTALL) -c $(INSTAPPFLAGS) xrainbow.ad $(XAPPLOADDIR)/xrainbow
X
Xdebug:
X	$(MAKE) 'CDEBUGFLAGS=-g'
X
X###########################################################################
X# common rules for all Makefiles - do not edit
X
Xemptyrule::
X
Xclean::
X	$(RM_CMD) \#*
X
XMakefile::
X	- at if [ -f Makefile ]; then \
X	echo "	$(RM) Makefile.bak; $(MV) Makefile Makefile.bak"; \
X	$(RM) Makefile.bak; $(MV) Makefile Makefile.bak; \
X	else exit 0; fi
X	$(IMAKE_CMD) -DTOPDIR=$(TOP) -DCURDIR=$(CURRENT_DIR)
X
Xtags::
X	$(TAGS) -w *.[ch]
X	$(TAGS) -xw *.[ch] > TAGS
X
X###########################################################################
X# empty rules for directories that do not have SUBDIRS - do not edit
X
Xinstall::
X	@echo "install in $(CURRENT_DIR) done"
X
Xinstall.man::
X	@echo "install.man in $(CURRENT_DIR) done"
X
XMakefiles::
X
Xincludes::
X
X###########################################################################
X# dependencies generated by makedepend
X
END_OF_FILE
if test 9477 -ne `wc -c <'xrainbow/main/Makefile'`; then
    echo shar: \"'xrainbow/main/Makefile'\" unpacked with wrong size!
fi
# end of 'xrainbow/main/Makefile'
fi
if test -f 'xrainbow/main/actions.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'xrainbow/main/actions.c'\"
else
echo shar: Extracting \"'xrainbow/main/actions.c'\" \(6153 characters\)
sed "s/^X//" >'xrainbow/main/actions.c' <<'END_OF_FILE'
X/**********************************************************************
X * Actions.c - Handle widget actions
X *
X * EndAsciiValAction - An action that checks and sets the specified value.
X * set_ascii_widget_var - Set a value in an ascii widget and associated var
X * get_ascii_widget_value - Checks and sets a double value from a text widget
X * set_ascii_widget_value - Sets an ascii widget's value given a double
X * set_ascii_text - Set an ascii text widget to the passed string
X *
X * Copyright 1991, David Nedde
X *
X * Permission to use, copy, modify, and distribute this software
X * and its documentation for any purpose and without fee is granted
X * provided that the above copyright notice appears in all copies.
X * It is provided "as is" without express or implied warranty.
X **********************************************************************/
X#include <stdio.h>
X#include <errno.h>
X#include <X11/Xlib.h>
X#include <X11/Intrinsic.h>
X#include <X11/StringDefs.h>
X#include <X11/Xutil.h>
X#include <X11/Xaw/Form.h>
X#include <X11/Xaw/AsciiText.h>
X#include <Wc/WcCreate.h>
X#include "misc.h"
X
X
X#define NC(x,mess)				\
X{						\
X  if ((x) == NULL)				\
X    fprintf("XRainbow: System error: %s\n",mess);	\
X}
X
X/* The intensity ratios - allocated in color.c */
Xextern double red_intensity,green_intensity,blue_intensity;
X
X
X
X/**********************************************************************
X * void EndAsciiValAction(w,event,params,num_params)
X *
X * An action that checks and sets the specified value.
X *
X * Resource file syntax:
X *   EndAsciiValAction(ascii_widget_name)
X **********************************************************************/
Xvoid EndAsciiValAction(w,event,params,num_params)
XWidget    w;
XXEvent   *event;
XString   *params;
XCardinal *num_params;
X{
X  double strtod();
X
X
X  if (*num_params != 1)
X  {
X    fprintf(stderr,"XRainbow: Resource file error: Invalid number of params passed to EndAsciiValAction\n");
X    return;
X  }
X
X  if (!strcmp(params[0],"red_value"))
X    get_ascii_widget_value(w,"red_value","Red",0,1,
X			   &red_intensity);
X  else
X  if (!strcmp(params[0],"green_value"))
X    get_ascii_widget_value(w,"green_value","Green",0,1,
X			   &green_intensity);
X  else
X  if (!strcmp(params[0],"blue_value"))
X    get_ascii_widget_value(w,"blue_value","Blue",0,1,
X			   &blue_intensity);
X  else
X    fprintf(stderr,"XRainbow: Resource file error:\n\tInvalid widget name '%s' passed to EndAsciiValAction\n",
X	    params[0]);
X}
X
X
X
X/**********************************************************************
X * set_ascii_widget_var
X *
X * Set a value in an ascii widget and it's associated variable
X **********************************************************************/
Xset_ascii_widget_var(w,var_name,value)
XWidget	w;
Xchar	*var_name;
Xdouble  value;
X{
X  XEvent		event;
X  char			*params[1];
X  static Cardinal 	num_params = 1;
X
X  
X  /* Set the value in the ascii widget */
X  set_ascii_widget_value(w,var_name,value);
X  
X  params[0] = var_name;
X  EndAsciiValAction(w,&event/*ignored*/,params,&num_params);
X}
X
X
X
X/**********************************************************************
X * void get_ascii_widget_value(w,event,params,num_params)
X *
X * Checks and sets an integer value from a text widget
X *
X * Resource file syntax:
X *   AsciiToIntAction(Ascii-widget-name,value's-name,lower-limit,upper-limit)
X *
X **********************************************************************/
Xget_ascii_widget_value(w,widget_name,values_name,
X		       lower_limit,upper_limit,val_ptr)
XWidget	w;
Xchar	*widget_name;
Xchar	*values_name;
Xint	lower_limit;
Xint	upper_limit;
Xdouble	*val_ptr;
X{
X  Widget	value_w;	/* The ascii widget */
X  char		*answer;	/* The string typed in an ascii value */
X  double	temp_num;	/* Holds new value while validity checked */
X  char		*cptr;
X  int		n;
X  Arg		wargs[3];
X
X
X  NC(value_w = WcFullNameToWidget(w,format_static("*%s",widget_name)),
X     format_static("Finding %s widget",widget_name));
X
X  /* Get filter string */
X  n = 0;
X  XtSetArg(wargs[n],XtNstring,&answer);		n++;
X  XtGetValues(value_w,wargs,n);
X
X  /* Copy the answer since we will edit textSrc and change it's value */
X  answer = XtNewString(answer);
X  temp_num = strtod(answer,&cptr);
X
X  if (cptr == answer)
X  {
X    /* First character was invalid */
X    printf("Bad %s number format: Enter valid number\n",values_name);
X    XtFree(answer);
X    set_ascii_widget_value(value_w,widget_name,*val_ptr); /* Reset answer */
X    return;
X  }
X
X  if (*cptr != '\0')
X  {
X    /* An invalid character was found */
X    printf("Invalid trailing string '%s' ignored\n",cptr);
X    /* Set to value without trailing junk */
X    set_ascii_widget_value(value_w,widget_name,temp_num); 
X  }
X
X  if (temp_num < lower_limit || temp_num > upper_limit)
X  {
X    printf("%s (%g) out of range (%d - %d); Enter number in range\n",
X	   values_name,temp_num,lower_limit,upper_limit);
X    set_ascii_widget_value(value_w,widget_name,*val_ptr);  /* Reset value */
X    return;
X  }
X  *val_ptr = temp_num;	/* Set requested value */
X
X  XtFree(answer);
X}
X
X
X
X/**********************************************************************
X * set_ascii_widget_value
X *
X * Sets an ascii widget's value to the ascii representation of the passed
X *   integer and puts the cursor at the end of the text
X **********************************************************************/
Xset_ascii_widget_value(w,widget_name,value)
XWidget	w;
Xchar   *widget_name;
Xdouble	value;
X{
X  Widget	ascii_w;
X
X
X  if ((ascii_w = WcFullNameToWidget(w,format_static("*%s",widget_name))) == NULL)
X    fprintf(stderr,"XSauci: Resource file error: Cannot find %s widget\n",widget_name);
X
X  set_ascii_text(ascii_w,format_static("%g",value));
X}
X
X
X
X/**********************************************************************
X * set_ascii_text
X *
X * Set an ascii text widget to the passed string and put the cursor at
X *   the end of the string.
X **********************************************************************/
Xset_ascii_text(w,string)
XWidget	w;
Xchar	*string;
X{
X  int	n;
X  Arg	wargs[2];
X
X
X  n = 0;
X  XtSetArg(wargs[n],XtNstring,string);	n++;
X  XtSetValues(w,wargs,n);
X
X  /* Move cursor to end of path name */
X  XawTextSetInsertionPoint(w,strlen(string));
X}
END_OF_FILE
if test 6153 -ne `wc -c <'xrainbow/main/actions.c'`; then
    echo shar: \"'xrainbow/main/actions.c'\" unpacked with wrong size!
fi
# end of 'xrainbow/main/actions.c'
fi
if test -f 'xrainbow/main/callbacks.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'xrainbow/main/callbacks.c'\"
else
echo shar: Extracting \"'xrainbow/main/callbacks.c'\" \(3336 characters\)
sed "s/^X//" >'xrainbow/main/callbacks.c' <<'END_OF_FILE'
X/**********************************************************************
X * Callbacks.c - Handle widget callbacks
X *
X * setup_lists - Used to initialize the option and value lists at startup
X * list_callback - Moves items between the sort options and sort values lists 
X *
X * Copyright 1991, David Nedde
X *
X * Permission to use, copy, modify, and distribute this software
X * and its documentation for any purpose and without fee is granted
X * provided that the above copyright notice appears in all copies.
X * It is provided "as is" without express or implied warranty.
X **********************************************************************/
X#include <stdio.h>
X#include <X11/Intrinsic.h>
X#include <X11/StringDefs.h>
X#include <X11/Xaw/List.h>
X#include <X11/Xaw_d/DrawingA.h>
X#include <Wc/WcCreate.h>
X
X
XWidget WcFullNameToWidget();
X#define NC(x,mess)				\
X{						\
X  if ((x) == NULL)				\
X    fprintf("XRainbow: System error: %s\n",mess);	\
X}
X
X
X/* Holds sort keys available and sort keys used */
XString sort_options[7] = { "File Order",  "Intensity ",  "Name      ",
X			   "Red       ",  "Blue      ",  "Green     ",  NULL };
XString sort_values[7]  = { NULL,  NULL,  NULL,  NULL,  NULL,  NULL,  NULL };
X
X
X
X/**********************************************************************
X * setup_lists
X *
X * Used to initialize the option and value lists at runtime startup
X **********************************************************************/
Xvoid setup_lists(w, side, call_data)
XWidget  w;
Xchar	*side;
Xcaddr_t	call_data;
X{
X  if (strcmp(side,"left") == 0)
X    XawListChange(w,sort_options,0,0,True);
X  else
X    XawListChange(w,sort_values,0,0,True);
X}
X
X
X/**********************************************************************
X * list_callback
X *
X * Moves items between the sort options and sort values lists when they
X * are selected.
X **********************************************************************/
Xvoid list_callback(w, side, call_data)
XWidget  		w;
Xchar			*side;
XXawListReturnStruct	*call_data;
X{
X  int		x;
X  Widget	left_w,right_w;
X
X
X  if (strcmp(side,"left") == 0)
X  {
X    /* Left widget callback */
X    left_w = w;
X    NC(right_w = WcFullNameToWidget(w,"*right_list"),
X       "Cannot find right_list");
X    /* Move from left to right list */
X    /* Find first non-null in sort_values to put the selected string */
X    for (x = 0; sort_values[x] != NULL; x++)
X      ;
X
X    /* Store selected left item into right list */
X    sort_values[x] = sort_options[call_data->list_index];
X    /* Remove item from left list */
X    for (x = call_data->list_index; sort_options[x] != NULL; x++)
X      sort_options[x] = sort_options[x+1];
X  }
X  else
X  {
X    /* Right widget callback */
X    right_w = w;
X    NC(left_w = WcFullNameToWidget(w,"*left_list"),
X       "Cannot find left_list");
X    /* Move from right to left list */
X    /* Find first non-null in sort_options to put the selected string */
X    for (x = 0; sort_options[x] != NULL; x++)
X      ;
X
X    /* Store selected left item into right list */
X    sort_options[x] = sort_values[call_data->list_index];
X    /* Remove item from left list */
X    for (x = call_data->list_index; sort_values[x] != NULL; x++)
X      sort_values[x] = sort_values[x+1];
X  }
X
X  /* Update the lists' display, etc */
X  XawListChange(left_w,sort_options,0,0,True);
X  XawListChange(right_w,sort_values,0,0,True);
X}
END_OF_FILE
if test 3336 -ne `wc -c <'xrainbow/main/callbacks.c'`; then
    echo shar: \"'xrainbow/main/callbacks.c'\" unpacked with wrong size!
fi
# end of 'xrainbow/main/callbacks.c'
fi
if test -f 'xrainbow/main/color.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'xrainbow/main/color.c'\"
else
echo shar: Extracting \"'xrainbow/main/color.c'\" \(13948 characters\)
sed "s/^X//" >'xrainbow/main/color.c' <<'END_OF_FILE'
X/**********************************************************************
X * Color.c - Handle creating and displaying the colored widgets
X *
X * init_colors - Setup sys_colors, color_count, colormap, gc, widgets
X * init_widgets - Create widgets to hold the color and color name
X * color_expose - A callback for when a drawing area widget is exposed
X * compare_colors - Returns an ordering between 2 colors based on sort_values
X * resort_list - Sort sys_colors and redraw widgets based on new ordering.
X *
X * Copyright 1991, David Nedde
X *
X * Permission to use, copy, modify, and distribute this software
X * and its documentation for any purpose and without fee is granted
X * provided that the above copyright notice appears in all copies.
X * It is provided "as is" without express or implied warranty.
X **********************************************************************/
X#include <stdio.h>
X#include <X11/Xos.h>
X#include <X11/Intrinsic.h>
X#include <X11/StringDefs.h>
X#include <X11/Xaw_d/DrawingA.h>
X#include <X11/Xaw/Label.h>
X#include <X11/Xaw/Form.h>
X#include <Wc/WcCreate.h>
X#include <list.h>
X#include "misc.h"
X#include "patchlevel.h"
X
X
X#ifndef RGB_TXT	/* The file holding the rgb values */
X#define RGB_TXT "/usr/lib/X11/rgb.txt"
X#endif
X#define NC(x,mess)				\
X{						\
X  if ((x) == NULL)				\
X    fprintf("XRainbow: System error: %s\n",mess);	\
X}
X#define NUM_COLORS 50	/* Number of unique colors that can be displayed */
X#define NULL_PIXEL 300	/* Used to flag invalid pixel values */
X
X/* Holds one rgb.txt color entry */
Xtypedef struct {
X  char  	colorname[50];	/* Name of the color */
X  XColor	color;		/* r,g,b and pixel values */
X  int		file_seq;	/* The order in rgb.txt the entry was stored */
X  int		seq;		/* The number index the entry is */
X} sys_color_type;
X
Xstatic sys_color_type	**sys_colors;	/* Holds all rgb.txt colors */
Xstatic int		color_count;	/* Number of sys_colors */
Xextern String		sort_values[];	/* The keys to sort on (callbacks.c) */
Xlist_type		queue;		/* Holds the allocated pixel values */
XGC			gc;		/* Global GC */
XColormap		cmap;		/* Global colormap */
Xint			monochrome;	/* True if on a mono screen */
Xdouble 			red_intensity;	/* Color intensity ratios */
Xdouble			green_intensity;
Xdouble			blue_intensity;
X
Xvoid	color_expose();			/* Callback color box exposure */
XWidget	WcFullNameToWidget();
Xchar    *malloc();
X
X
X
X/**********************************************************************
X * init_colors
X *
X * Setup sys_colors, color_count, colormap, gc, widgets
X **********************************************************************/
Xinit_colors(w,passed_file_name)
XWidget	w;
Xchar	*passed_file_name;
X{
X  Display	       *d = XtDisplay(w);
X  int			x;
X  FILE		       *rgb;
X  int			prev_r,prev_g,prev_b; /* Used to avoid dup. entries */
X  int			r,g,b;
X  char			colorname[50];
X  char			filename[50];
X
X
X  if (sys_colors == (sys_color_type **)0)
X  {
X    cmap = DefaultColormap(d,DefaultScreen(d));
X    gc = XCreateGC(XtDisplay(w), DefaultRootWindow(XtDisplay(w)), 0, 0);
X    monochrome = DisplayCells(XtDisplay(w), 
X			      DefaultScreen(XtDisplay(w))) == 2;
X    queue = list_make();
X
X    /* Determine file to load */
X    if (passed_file_name == (char *)0 || *passed_file_name == '\0')
X      strcpy(filename,RGB_TXT);
X    else
X      strcpy(filename,passed_file_name);
X
X
X    /*** Find the number of system colors */
X    if (!(rgb = fopen(filename, "r"))) {
X	perror(filename);
X	exit(1);
X    }
X    color_count = 0;
X    prev_r = prev_g = prev_b = -1;
X    while (4 == fscanf(rgb, "%d %d %d %[^\n]\n", &r, &g, &b, colorname)) {
X      if (r != prev_r  ||  g != prev_g  ||  b != prev_b) {
X	prev_r = r;
X	prev_g = g;
X	prev_b = b;
X	color_count++;
X      }
X    }
X
X    /*** We have the number of entries - allocate space and load them in */
X    rewind(rgb);
X      
X    NC(sys_colors = (sys_color_type **)malloc(sizeof(sys_color_type *)*
X					      color_count),
X       "Out of memory in init_colors");
X
X    prev_r = prev_g = prev_b = -1;
X    for (x = 0; x < color_count;)
X    {
X      NC(sys_colors[x] = (sys_color_type *)malloc(sizeof(sys_color_type)),
X	 "Out of memory in init_colors");
X
X      fscanf(rgb, "%d %d %d %[^\n]\n", &r, &g, &b, sys_colors[x]->colorname);
X      if (r != prev_r  ||  g != prev_g  ||  b != prev_b) {
X	prev_r = r;
X	prev_g = g;
X	prev_b = b;
X	sys_colors[x]->color.red = r*(65535.0/255);	/* Convert 0..255 */
X	sys_colors[x]->color.green = g*(65535.0/255);	/*  to 0..65535   */
X	sys_colors[x]->color.blue = b*(65535.0/255);
X        sys_colors[x]->file_seq = x;			/* Location in file */
X        sys_colors[x]->seq = x;				/* Location in array */
X	sys_colors[x]->color.pixel = NULL_PIXEL;
X	sys_colors[x]->color.flags = DoRed|DoGreen|DoBlue;
X	x++;
X      }
X    }
X
X    init_widgets(w);	/* Create all the color widgets */
X
X  }
X}
X
X
X
X/**********************************************************************
X * init_widgets
X *
X * Create widgets to hold the color and color name
X **********************************************************************/
Xinit_widgets(w)
XWidget w;
X{
X  Widget	prev_form_w = (Widget)0;
X  Widget	a_form_w;	/* Holds all color widgets */
X  Widget	form_w;		/* Temp for the the form widgets */
X  Widget	drawinga_w;	/* Temp for the color drawee widgets */
X  Widget	label_w;	/* Temp for the color name widgets */
X  Dimension	label_height = 1; /* Height of the label widget */
X                                /* Set to 1 so it is flagged and fixed */
X  int		x;
X  int		n;
X  Arg		wargs[10];
X  char		temp_str[50];
X
X
X  /* Initialize the intensity ratios */
X  set_ascii_widget_var(w,"red_value",.33);
X  set_ascii_widget_var(w,"green_value",.33);
X  set_ascii_widget_var(w,"blue_value",.33);
X
X  label_w = WcFullNameToWidget(w,"*about1");
X  sprintf(temp_str,"XRainbow V1.%d",PATCHLEVEL);
X  n = 0;
X  XtSetArg(wargs[n],XtNlabel,temp_str);			n++;
X  XtSetValues(label_w,wargs,n);
X
X  NC(a_form_w = WcFullNameToWidget(w,"*aform"),"Finding aform widget");
X
X  /* Create all widgets in the list */
X  for (x = 0; x < color_count; x++)
X  {
X    /* Create a form widget holding a drwingArea and label widget */
X    n = 0;
X    if (prev_form_w != (Widget)0)
X      XtSetArg(wargs[n],XtNfromVert,prev_form_w);			n++;
X    form_w = XtCreateManagedWidget(format_static("form%d",x), 
X				   formWidgetClass, a_form_w, wargs, n);
X    prev_form_w = form_w;
X
X    /* Create a drawingArea widget the same height as the label widget */
X    n = 0;
X    XtSetArg(wargs[n],XtNheight,label_height);				n++;
X    drawinga_w = XtCreateManagedWidget(format_static("drawinga%d",x), 
X				       drawingAreaWidgetClass, 
X				       form_w, wargs, n);
X    XtAddCallback(drawinga_w,XtNexposeCallback,color_expose,
X		  &sys_colors[x]->seq);
X
X    /* Create a label widget that holds the color's name */
X    n = 0;
X    XtSetArg(wargs[n],XtNlabel,format_static("(%d,%d,%d) %s", 
X			     (int)(sys_colors[x]->color.red*(255.0/65535)), 
X			     (int)(sys_colors[x]->color.green*(255.0/65535)), 
X			     (int)(sys_colors[x]->color.blue*(255.0/65535)),
X					     sys_colors[x]->colorname));
X	     n++;
X    XtSetArg(wargs[n],XtNfromHoriz,drawinga_w);				n++;
X    label_w = XtCreateManagedWidget(format_static("label%d",x), 
X				    labelWidgetClass, form_w, wargs, n);
X
X    if (label_height == 1)
X    {
X      /* Set the label_height variable to it's correct value */
X      n = 0;
X      XtSetArg(wargs[n],XtNheight,&label_height);			n++;
X      XtGetValues(label_w,wargs,n);
X
X      /* Fix up the first canvas which incorrectly has height 1 */
X      n = 0;
X      XtSetArg(wargs[n],XtNheight,label_height);			n++;
X      XtSetValues(drawinga_w,wargs,n);
X    }
X  }
X}
X
X
X
X/**********************************************************************
X * color_expose
X *
X * A callback for when a drawing area widget is exposed
X **********************************************************************/
Xvoid color_expose(w, color_index_ptr, call_data)
XWidget  		     w;
Xint			     *color_index_ptr;
XXawDrawingAreaCallbackStruct *call_data;
X{
X  int		       color_index= *color_index_ptr; /* Where in sys_colors */
X  sys_color_type	*unexposed_color;     /* Holds color that is covered */
X  XExposeEvent		*xexpose;
X
X
X  if (sys_colors[color_index]->color.pixel == NULL_PIXEL)
X    /* The exposed drawingArea doesn't have a valid pixel -- get one */
X    if (list_count(queue) >= NUM_COLORS)
X    {
X      /* Queue of pixels is full -- Use the pixel at the front of the queue
X      /* since it must be covered by now */
X      unexposed_color = (sys_color_type *)list_remove_start(queue);
X      sys_colors[color_index]->color.pixel = unexposed_color->color.pixel;
X      unexposed_color->color.pixel = NULL_PIXEL;
X      list_add_end(sys_colors[color_index],queue);
X    }
X    else
X    {
X      /* Well, if queue not full, we must be just starting.	*/
X      /* allocate the color cell ourself.			*/
X      if (!monochrome)
X      {
X	if (!XAllocColorCells(XtDisplay(w), cmap, TRUE, NULL, 0, 
X			      &sys_colors[color_index]->color.pixel, 1))
X	{
X	  fprintf(stderr,"XRainbow: Cannot allocate color cells\n");
X	  exit(1);
X	}
X      }
X      else
X      {
X	/* Just make every color black */
X	sys_colors[color_index]->color.pixel = 
X	  BlackPixel(XtDisplay(w),DefaultScreen(XtDisplay(w)));
X      }
X      /* Put ourself in the queue */
X      list_add_end(sys_colors[color_index],queue);
X    }
X
X  /* Now we have a good pixel value -- redraw the exposed area */
X  if (!monochrome)
X#if 1
X    XStoreColor(XtDisplay(w),cmap,&(sys_colors[color_index]->color));
X#else
X  /* This won't work if the server has names than the client doesn't */
X  XStoreNamedColor(XtDisplay(w),cmap,sys_colors[color_index]->colorname,
X		   sys_colors[color_index]->color.pixel, DoRed|DoGreen|DoBlue);
X#endif
X  XSetForeground(XtDisplay(w), gc, sys_colors[color_index]->color.pixel);
X  xexpose = &call_data->event->xexpose;
X  XFillRectangle(xexpose->display,xexpose->window,gc,
X		xexpose->x,xexpose->y,
X		xexpose->width,xexpose->height);
X}
X
X
X/**********************************************************************
X * compare_colors
X *
X * Called by qsort
X * Returns an ordering between 2 colors based on sort_values
X **********************************************************************/
Xcompare_colors(a_ptr, b_ptr)
Xsys_color_type **a_ptr, **b_ptr;
X{
X  int	n;
X  int	diff;
X  char	*sort_str;
X
X
X  /* Keep looping, trying the next sort_values until we find a difference */
X  for (n = 0, sort_str = sort_values[n]; sort_str != NULL; 
X       n++,   sort_str = sort_values[n])
X  {
X    /* Isn't it handy that each sort_values name starts with a unique letter */
X    switch (sort_str[0])
X    {
X      case 'F':
X        /* File ordering -- a unique ordering */
X        diff = (*a_ptr)->file_seq - (*b_ptr)->file_seq;
X	break;
X
X      case 'I':
X	/* Intensity ordering */
X	/* Could calulate intensity beforehand and store in struct for speed */
X        diff = ((*a_ptr)->color.red   * red_intensity + 
X		(*a_ptr)->color.green * green_intensity +
X		(*a_ptr)->color.blue  * blue_intensity) -
X	       ((*b_ptr)->color.red   * red_intensity + 
X		(*b_ptr)->color.green * green_intensity +
X		(*b_ptr)->color.blue  * blue_intensity);
X	break;
X
X      case 'N':
X	/* Color Name ordering */
X        diff = strcmp((*a_ptr)->colorname, (*b_ptr)->colorname);
X	break;
X
X      case 'R':
X	/* Red color component ordering */
X	diff = (*a_ptr)->color.red - (*b_ptr)->color.red;
X	break;
X
X      case 'B':
X	/* Blue color component ordering */
X	diff = (*a_ptr)->color.blue - (*b_ptr)->color.blue;
X	break;
X
X      case 'G':
X	/* Green color component ordering */
X	diff = (*a_ptr)->color.green - (*b_ptr)->color.green;
X	break;
X
X      default:
X	/* What th- !? */
X	fprintf(stderr,"Error: Invalid sort option name 1st char\n");
X	diff = 1;
X	break;
X    }
X    if (diff != 0)
X      /* Found a difference -- get outta here */
X      break;
X  }
X  return(diff);
X}
X
X
X
X/**********************************************************************
X * resort_list
X *
X * Sort sys_colors and redraw widgets based on new ordering.
X * A callback from the sort_popup Apply button
X **********************************************************************/
Xvoid resort_list(w, client_data, call_data)
XWidget  w;
Xcaddr_t client_data;
Xcaddr_t	call_data;
X{
X  int		x,n;
X  Widget	a_form_w;
X  Widget	drawinga_w;
X  Widget	label_w;
X  Dimension	width,height;	/* DrawingAreas dimensions for XClearArea() */
X  Arg		warg;
X  Arg		wargs[3];
X
X
X  if (sort_values[0] == NULL)
X    /* If there are no keys to sort on, don't do anything */
X    return;
X
X  /* Sort based on the sort_values[] keys */
X  qsort(sys_colors, color_count, sizeof(sys_color_type *), compare_colors);
X
X  /* Get drawinga dimensions for later XClearArea() */
X  NC(a_form_w = WcFullNameToWidget(w, "*viewport.aform"),
X       "Couldn't find aform widget");
X  XawFormDoLayout(a_form_w,False); /* Turn off layout recomputation */
X
X  /* Get drawinga dimensions for later XClearArea() */
X  NC(drawinga_w = WcFullNameToWidget(w, "*viewport.aform.form0.drawinga0"),
X       "Couldn't find drawinga widget");
X  n = 0;
X  XtSetArg(wargs[n],XtNwidth,&width);	n++;
X  XtSetArg(wargs[n],XtNheight,&height);	n++;
X  XtGetValues(drawinga_w,wargs,n);
X
X  /* Change each label and expose each drawingArea widget */
X  for (x = 0; x < color_count; x++)
X  {
X    NC(label_w = WcFullNameToWidget(w,
X		       format_static("*viewport.aform.form%d.label%d",x,x)),
X       "Couldn't find label widget");
X
X    XtSetArg(warg,XtNlabel,format_static("(%d,%d,%d) %s", 
X			     (int)(sys_colors[x]->color.red*(255.0/65535)), 
X			     (int)(sys_colors[x]->color.green*(255.0/65535)), 
X			     (int)(sys_colors[x]->color.blue*(255.0/65535)),
X					     sys_colors[x]->colorname));
X    XtSetValues(label_w,&warg,1);
X
X
X    NC(drawinga_w = WcFullNameToWidget(w,
X		       format_static("*viewport.aform.form%d.drawinga%d",x,x)),
X       "Couldn't find drawinga widget");
X
X    /* Why do we need +1 with the width? I don;t know... */
X    XClearArea(XtDisplay(drawinga_w),XtWindow(drawinga_w),0,0,
X	       (int)width+1,(int)height,True);
X  }
X  XawFormDoLayout(a_form_w,True); /* Turn on layout recomputation */
X}
END_OF_FILE
if test 13948 -ne `wc -c <'xrainbow/main/color.c'`; then
    echo shar: \"'xrainbow/main/color.c'\" unpacked with wrong size!
fi
# end of 'xrainbow/main/color.c'
fi
if test -f 'xrainbow/main/list.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'xrainbow/main/list.c'\"
else
echo shar: Extracting \"'xrainbow/main/list.c'\" \(6308 characters\)
sed "s/^X//" >'xrainbow/main/list.c' <<'END_OF_FILE'
X/**********************************************************************
X * List.c - A subset of my list library, combined into one file
X *
X * Copyright 1991, David Nedde
X *
X * Permission to use, copy, modify, and distribute this software
X * and its documentation for any purpose and without fee is granted
X * provided that the above copyright notice appears in all copies.
X * It is provided "as is" without express or implied warranty.
X **********************************************************************/
X
X#include "list.h"
X
X/**********************************************************************
X * List_Make - Create a list
X *
X * Usage:
X *    list = list_make();
X *
X *    list_type list <-  The created list
X *
X * David Nedde  11/21/89
X **********************************************************************/
Xlist_type list_make()
X{
X  list_type list;
X
X
X  list = (list_type)ListMalloc( sizeof( struct list_struct));
X  list->head_ptr = list->next_ptr = list->curr_ptr = list->tail_ptr = 
X    (list_node_type *)NULL;
X  return(list);
X}
X
X/**********************************************************************
X * List_Malloc - Conditionally allocate a piece of memory.
X *
X * Usage:
X *   ptr = (ptr_type *)my_malloc(allocate, n);
X *
X *   ptr_type *ptr      <-  Points to the piece of memory allocated
X *   bool      allocate  -> if TRUE, actually allocates memory
X *                          if FALSE, returns ptr to previously allocated mem
X *   int       n         -> Number of bytes to allocate
X *
X * Algorithm:
X *   This is meant to used with the macro ListMalloc, which needs to be able
X *   to get the same memory pointer twice.  See list.h:ListMalloc()
X **********************************************************************/
Xchar *list_malloc(allocate, n)
Xbool allocate;
Xint  n;
X{
X  char *malloc();
X  static char *temp_ptr = NULL;
X
X
X  if (allocate)
X    temp_ptr = (char *)malloc((unsigned)n);
X
X  return( temp_ptr);
X}
X
X/**********************************************************************
X * List_Count - Return the number of elements in a list
X *
X * Usage:
X *    int list_count( list);
X *
X *    list_type list -> The list to be counted
X *
X * Algorithm:
X *    O(n) sequential counting algorithm
X *
X * David Nedde  5/91
X **********************************************************************/
Xint list_count( list)
Xlist_type list;
X{
X  int count = 0;
X  char *item_ptr;
X
X  assert(list != LIST_NULL,"NULL list in list_count");
X
X  for (item_ptr = list_first( list);
X       item_ptr != NULL;
X       item_ptr = list_next( list))
X    count++;
X
X  return(count);
X}
X
X/**********************************************************************
X * List_First - Move to start of list and return first item
X *
X * Usage:
X *    item_ptr = list_first( list);
X *
X *    char *item_ptr <-  The first item in the list
X *    list_type list      -> The list to access
X *
X * David Nedde  11/21/89
X **********************************************************************/
Xchar *list_first( list)
Xlist_type list;
X{
X  assert(list != LIST_NULL,"Getting start of a list");
X
X  if (list->head_ptr == (list_node_type *)NULL)
X    /* Empty list */
X    return( NULL);
X
X  list->next_ptr = list->head_ptr->next_node_ptr;
X  return( list->head_ptr->item_ptr);
X}
X
X
X/**********************************************************************
X * List_Next - Return the next item in a list or NULL if end of list
X *
X * Usage:
X *    item_ptr = list_next( list);
X *
X *    char *item_ptr <- The next item in the list
X *    list_type list      -> The list to access
X *
X * David Nedde  11/21/89
X **********************************************************************/
Xchar *list_next( list)
Xlist_type list;
X{
X  char *item_ptr;
X
X
X  assert(list != LIST_NULL,"Getting next item in list");
X
X  if ((list->head_ptr == (list_node_type *)NULL) || 
X      (list->next_ptr == (list_node_type *)NULL))
X    return((char *)NULL);
X
X  item_ptr       = list->next_ptr->item_ptr;
X  list->curr_ptr = list->next_ptr;
X  list->next_ptr = list->next_ptr->next_node_ptr;
X  return( item_ptr);
X}
X
X/**********************************************************************
X * List_Add_End - Add an item to the end of a list
X *
X * Usage:
X *    data_ptr = list_add_end( item_ptr, list);
X *
X *    char *data_ptr <-  A pointer to the data added to the list
X *    char *item_ptr  -> A pointer to the data added to the list
X *    list_type list      -> The list to add to
X *
X * David Nedde  11/21/89
X **********************************************************************/
Xchar *list_add_end( item_ptr, list)
Xchar *item_ptr;
Xlist_type list;
X{
X  list_node_type *node_ptr;
X
X
X  assert(list != LIST_NULL && item_ptr != NULL,"Adding to list's end");
X  node_ptr = (list_node_type *)ListMalloc( sizeof( list_node_type));
X  node_ptr->item_ptr      = item_ptr;
X  node_ptr->next_node_ptr = (list_node_type *)NULL;
X  node_ptr->prev_node_ptr = list->tail_ptr;
X
X  if (list->head_ptr == (list_node_type *)NULL)
X    /* Empty list */
X    list->head_ptr = list->next_ptr = list->curr_ptr = list->tail_ptr = 
X      node_ptr;
X  else
X  {
X    list->tail_ptr->next_node_ptr = node_ptr;
X    list->tail_ptr 		  = node_ptr;
X  }
X
X  return( node_ptr->item_ptr);
X}
X
X/**********************************************************************
X * List_Remove_Start - Remove an item from the beginning of a list.
X *
X * Usage:
X *    data_ptr = list_remove_start( list);
X *
X *    char *data_ptr <-  A pointer to the data removed from the list
X *    list_type list      -> The list to remove from
X *
X * David Nedde  11/21/89
X **********************************************************************/
Xchar *list_remove_start( list)
Xlist_type list;
X{
X  list_node_type *node_ptr;
X  char *item_ptr;
X
X
X  assert(list != LIST_NULL,"Removing from list's start");
X
X  if (list->head_ptr == (list_node_type *)NULL)
X    /* Empty list */
X    return( NULL);
X
X  node_ptr = list->head_ptr;
X  item_ptr = node_ptr->item_ptr;
X
X  list->head_ptr = list->head_ptr->next_node_ptr;
X
X  if (list->head_ptr == (list_node_type *)NULL)
X    /* Removing only item in list */
X    list->tail_ptr = list->next_ptr = list->curr_ptr = (list_node_type *)NULL;
X  else
X  {
X    list->head_ptr->prev_node_ptr = (list_node_type *)NULL;
X    if (list->next_ptr == node_ptr)
X      list->next_ptr = (list_node_type *)NULL;
X  }
X
X  free( (char *)node_ptr);
X
X  return( item_ptr);
X}
END_OF_FILE
if test 6308 -ne `wc -c <'xrainbow/main/list.c'`; then
    echo shar: \"'xrainbow/main/list.c'\" unpacked with wrong size!
fi
# end of 'xrainbow/main/list.c'
fi
if test -f 'xrainbow/main/list.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'xrainbow/main/list.h'\"
else
echo shar: Extracting \"'xrainbow/main/list.h'\" \(3256 characters\)
sed "s/^X//" >'xrainbow/main/list.h' <<'END_OF_FILE'
X/**********************************************************************
X * List.h - List data structures.
X *
X * Copyright 1991, David Nedde
X *
X * Permission to use, copy, modify, and distribute this software
X * and its documentation for any purpose and without fee is granted
X * provided that the above copyright notice appears in all copies.
X * It is provided "as is" without express or implied warranty.
X **********************************************************************/
X
X#ifndef LIST_H
X#define LIST_H
X
Xtypedef unsigned char bool;
X
X/* One node in the list */
Xtypedef struct list_node_struct list_node_type;
Xstruct list_node_struct {
X  char *item_ptr;      /* The data item hung off of the list */
X  list_node_type *prev_node_ptr; /* Points to the prev node in the list */
X  list_node_type *next_node_ptr; /* Points to the next node in the list */
X};
X
X/* The list's head, tail, etc */
Xtypedef struct list_struct *list_type;
Xstruct list_struct {
X  list_node_type *head_ptr; /* Points to the head of the list */
X  list_node_type *next_ptr; /* Points to next item returned with list_next */
X  list_node_type *curr_ptr; /* Points to curr item returned with list_next */
X  list_node_type *tail_ptr; /* Points to the end of the list */
X};
X
X#define TRUE  1
X#define FALSE 0
X
X#ifndef NULL
X#define NULL ((char *)0L)
X#endif
X
X#define LIST_NULL ((list_type)NULL)
X
X#ifdef DEBUG
X#define assert( condition, message)                                     \
X  {                                                                     \
X    if (!(condition))                                                   \
X      printf("List Error: File \"%s\", Line %d: %s",                 	\
X                  __FILE__, __LINE__, message);                         \
X  }
X
X#define LIST_TEST(list) /*list_test(list)*/
X#else
X#define assert( condition, message)
X#define LIST_TEST(list)
X#endif
X
X
X
X#define ListMalloc(n) \
X  (list_malloc(TRUE,(n)) == NULL \
X     ? (char *)printf("List Error: File \"%s\", Line %d: Out of memory", \
X		      __FILE__,__LINE__) \
X     : list_malloc(FALSE,(n)))
X
X
X/**********************************************************************
X * List of pointers handling routines
X *
X *   List_Make          - Create a list
X *   List_Add_End       - Add to the end of the list
X *   List_Add_Start     - Add to the start of the list
X *   List_Remove_Start  - Remove first item from a list and return it
X *   List_First         - Move to start of list and return first item
X *   List_Next          - Return the next item in the list (NULL if eol)
X *   List_Last          - Return last item in list
X *   List_Destroy       - Deallocate the list but not the contents
X *   List_Deallocate    - Deallocate everything in the list
X *   List_Dup_Node      - Allocate a duplicate list node
X *
X * David Nedde  11/21/89
X **********************************************************************/
Xlist_type list_make();
Xchar *list_add_end();
Xchar *list_add_start();
Xchar *list_add_before_curr();
Xchar *list_add_sort();
Xchar *list_remove_start();
Xchar *list_remove_end();
Xchar *list_remove_curr();
Xchar *list_first();
Xchar *list_next();
Xchar *list_last();
Xvoid      list_destroy();
Xvoid      list_deallocate();
Xchar *list_dup_node();
Xchar	 *list_malloc();
Xint  list_count();
X
X#endif
X
END_OF_FILE
if test 3256 -ne `wc -c <'xrainbow/main/list.h'`; then
    echo shar: \"'xrainbow/main/list.h'\" unpacked with wrong size!
fi
# end of 'xrainbow/main/list.h'
fi
if test -f 'xrainbow/main/misc.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'xrainbow/main/misc.c'\"
else
echo shar: Extracting \"'xrainbow/main/misc.c'\" \(4065 characters\)
sed "s/^X//" >'xrainbow/main/misc.c' <<'END_OF_FILE'
X/**********************************************************************
X * Misc.c - Support routines for XSauci
X *
X * format_static     - Format a list of args, returning a static string.
X * Make_String	     - Allocate a copy of the passed string
X *
X * Copyright 1990, David Nedde
X *
X * Permission to use, copy, modify, and distribute this software
X * and its documentation for any purpose and without fee is granted
X * provided that the above copyright notice appears in all copies.
X * It is provided "as is" without express or implied warranty.
X **********************************************************************/
X
X#include <stdio.h>
X#include <ctype.h>
X#include <varargs.h>
X#include "misc.h"
X
X
X#define NC(x,mess)				\
X{						\
X  if ((x) == NULL)				\
X    fprintf("XRainbow: System error: %s\n",mess);	\
X}
X
Xchar *malloc();
Xchar *format_str_ap_ptr();
X
Xtypedef int bool;
X
X#define True  1
X#define False 0
X
X
X/**********************************************************************
X * Format_Str_Ap_Ptr - Like format_str, but gets passed an 'ap' pointer.
X * Format_Static     - Format a list of args, returning a static string.
X *		       Static strings are reused after NUM_SS calls.
X *
X * Usage:
X *    str = format_static( format, arg, ...);
X *
X *    char *str    <-  Points to the allocated, formatted string
X *    char *format  -> The printf-style format to print the args with
X **********************************************************************/
X#define NUM_SS	10  /* Number of static strings to use */
Xchar *format_static( format, va_alist)
Xchar *format;
Xva_dcl
X{
X  va_list     	ap;
X  int		curr_str;
X  static int	next_str = 0;
X  static char 	*static_str[NUM_SS];
X
X
X  curr_str = next_str;
X  next_str = (next_str + 1) % NUM_SS;
X
X  if (static_str[curr_str] != (char *)0)
X    free(static_str[curr_str]);
X
X  va_start( ap);
X  static_str[curr_str] = format_str_ap_ptr( format, &ap);
X  va_end( ap);
X
X  return( static_str[curr_str]);
X}
X
Xchar *format_str_ap_ptr( format, ap_ptr)
Xchar    *format;
Xva_list *ap_ptr;
X{
X  char   *src_ptr;
X  char   *dest_ptr;
X  char    dest_str[1000];
X  char   *new_form_ptr;
X  char    new_form[ 10];
X  bool    all_done;
X
X
X  src_ptr  = format;
X  dest_ptr = dest_str;
X  while (*src_ptr != '\0')
X  {
X    while (*src_ptr != '%' && *src_ptr != '\0')
X      *dest_ptr++ = *src_ptr++;
X
X    /* Now src_ptr points to a '%' or end of string */
X    if (*src_ptr != '\0')
X    {
X      new_form_ptr    = new_form;
X      *new_form_ptr++ = *src_ptr++;
X      all_done        = False;
X      while (!all_done)
X	switch (*new_form_ptr++ = *src_ptr++)
X	{
X	  case 'd':
X	  case 'i':
X	  case 'o':
X	  case 'u':
X	  case 'x':
X	  case 'X':
X            *new_form_ptr = '\0';
X            sprintf(dest_ptr,new_form,va_arg( *ap_ptr, int));
X            all_done = True;
X            break;
X
X	  case 'f':
X	  case 'e':
X	  case 'E':
X	  case 'g':
X	  case 'G':
X            *new_form_ptr = '\0';
X            sprintf(dest_ptr,new_form,va_arg( *ap_ptr, double));
X            all_done = True;
X	    break;
X
X	  case 'c':
X            *new_form_ptr = '\0';
X            sprintf(dest_ptr,new_form,va_arg( *ap_ptr, char));
X            all_done = True;
X	    break;
X
X	  case 's':	
X            *new_form_ptr = '\0';
X            sprintf(dest_ptr,new_form,va_arg( *ap_ptr, char *));
X            all_done = True;
X	    break;
X
X	  case '%':
X            *new_form_ptr = '\0';
X            sprintf(dest_ptr,new_form);
X            all_done = True;
X	}
X
X      /* Move dest_ptr to the end of it's string again */
X      while (*dest_ptr != '\0')
X        dest_ptr++;
X    }
X  }
X
X  *dest_ptr = '\0'; /* Null terminate the string */
X
X  return( make_string( dest_str));
X}
X
X
X/**********************************************************************
X * Make_String - Allocate a copy of the passed string
X **********************************************************************/
Xchar *make_string( str)
Xchar *str;
X{
X  char *ret_str;
X
X
X  NC(str,"Null string passed to make_string");
X  NC(ret_str = malloc((unsigned)strlen(str)+1),"Out of memory in make_string");
X  (void)strcpy( ret_str, str);
X
X  return( ret_str);
X}
END_OF_FILE
if test 4065 -ne `wc -c <'xrainbow/main/misc.c'`; then
    echo shar: \"'xrainbow/main/misc.c'\" unpacked with wrong size!
fi
# end of 'xrainbow/main/misc.c'
fi
if test -f 'xrainbow/main/misc.h' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'xrainbow/main/misc.h'\"
else
echo shar: Extracting \"'xrainbow/main/misc.h'\" \(534 characters\)
sed "s/^X//" >'xrainbow/main/misc.h' <<'END_OF_FILE'
X/**********************************************************************
X * Copyright 1990, David Nedde
X *
X * Permission to use, copy, modify, and distribute this software
X * and its documentation for any purpose and without fee is granted
X * provided that the above copyright notice appears in all copies.
X * It is provided "as is" without express or implied warranty.
X **********************************************************************/
X
Xchar  *format_static();
Xchar  *format_str();
Xchar  *make_string();
Xchar  *search_string();
END_OF_FILE
if test 534 -ne `wc -c <'xrainbow/main/misc.h'`; then
    echo shar: \"'xrainbow/main/misc.h'\" unpacked with wrong size!
fi
# end of 'xrainbow/main/misc.h'
fi
if test -f 'xrainbow/main/miscx.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'xrainbow/main/miscx.c'\"
else
echo shar: Extracting \"'xrainbow/main/miscx.c'\" \(3509 characters\)
sed "s/^X//" >'xrainbow/main/miscx.c' <<'END_OF_FILE'
X/**********************************************************************
X * miscx.c - Misc X functions
X *
X * PlaceWindow - Moves the passed widget to a new location on the screen
X *
X * Copyright 1991, David Nedde
X *
X * Permission to use, copy, modify, and distribute this software
X * and its documentation for any purpose and without fee is granted
X * provided that the above copyright notice appears in all copies.
X * It is provided "as is" without express or implied warranty.
X **********************************************************************/
X
X#include <stdio.h>
X#include <errno.h>
X#include <X11/Xlib.h>
X#include <X11/Xos.h>
X#include <X11/Xutil.h>
X#include <X11/Intrinsic.h>
X#include <X11/StringDefs.h>
X#include <Wc/WcCreate.h>
X#include "misc.h"
X
X#define NC(x,mess)				\
X{						\
X  if ((x) == NULL)				\
X    fprintf("XRainbow: System error: %s\n",mess);	\
X}
X
X
X/**********************************************************************
X * void PlaceWindow(w, place_type, call_data)
X *
X * A callback that moves the passed widget to a new location on the screen.
X *
X * Resource File Usage:
X *   PlaceWindow(pointer|widget|parent|widget_name,x_offset,y_offset)
X *    pointer - Place widget at pointer position
X *    widget  - Place widget at widget location
X *    parent  - Place widget at widget parent's location
X *    widget_name - Place widget at the named widget's location
X *    x_offset - The signed x pixel distance from specified placement point
X *    y_offset - The signed y pixel distance from specified placement point
X **********************************************************************/
Xvoid PlaceWindow(w, place_type, call_data)
XWidget  w;
Xchar   *place_type;
Xcaddr_t call_data;
X{
X  Widget   widget;		/* The widget if placing relative to one */
X  Position rootx_return;	/* The root x,y location to put the widget */
X  Position rooty_return;
X  char    *in_args;		/* A copy of the arguments passed in */
X  int      x_offset;		/* The offsets passed in */
X  int      y_offset;
X  char    *type;		/* First resource file argument */
X  char	  *strtok();
X  int	   n;
X  Arg	   wargs[10];
X
X
X  /* Parse the 3 arguments into type, x/y_offset */
X  in_args = XtNewString(place_type);
X  type = strtok(in_args,",");
X  x_offset = (int)atol(strtok((char *)NULL,","));
X  y_offset = (int)atol(strtok((char *)NULL,","));
X
X  if (!strcmp(type,"pointer"))
X  {
X    /* Place widget offset from the pointer position */
X    Window		root_return, child_return;
X    unsigned int	mask;
X    int			win_x,win_y;
X    int			root_x,root_y;
X
X    XQueryPointer(XtDisplay(w),DefaultRootWindow(XtDisplay(w)),
X		  &root_return,&child_return,
X		  &root_x,&root_y,&win_x,&win_y,&mask);
X    rootx_return = root_x;
X    rooty_return = root_y;
X  }
X  else
X  if (!strcmp(type,"widget"))
X    /* Place widget at an offset from calling widget */
X    XtTranslateCoords(w,(Position)0,(Position)0,
X		      &rootx_return,&rooty_return);
X  else
X  if (!strcmp(type,"parent"))
X    /* Place widget at an offset from calling widget's parent */
X    XtTranslateCoords(XtParent(w),(Position)0,(Position)0,
X		      &rootx_return,&rooty_return);
X  else
X  {
X    /* Place widget at an offset from the specified widget */
X    NC(widget = WcFullNameToWidget(w,type),"Finding widget in PlaceWindow");
X    XtTranslateCoords(widget,(Position)0,(Position)0,
X		      &rootx_return,&rooty_return);
X  }
X
X  n = 0;
X  XtSetArg(wargs[n],XtNx,rootx_return+x_offset);		n++;
X  XtSetArg(wargs[n],XtNy,rooty_return+y_offset);		n++;
X  XtSetValues(w,wargs,n);
X  XtFree(in_args);
X}
END_OF_FILE
if test 3509 -ne `wc -c <'xrainbow/main/miscx.c'`; then
    echo shar: \"'xrainbow/main/miscx.c'\" unpacked with wrong size!
fi
# end of 'xrainbow/main/miscx.c'
fi
if test -f 'xrainbow/main/xrainbow.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'xrainbow/main/xrainbow.c'\"
else
echo shar: Extracting \"'xrainbow/main/xrainbow.c'\" \(3630 characters\)
sed "s/^X//" >'xrainbow/main/xrainbow.c' <<'END_OF_FILE'
X/**********************************************************************
X * XRainbow.c - Main routine
X *
X * Copyright 1991, David Nedde
X *
X * Permission to use, copy, modify, and distribute this software
X * and its documentation for any purpose and without fee is granted
X * provided that the above copyright notice appears in all copies.
X * It is provided "as is" without express or implied warranty.
X **********************************************************************/
X
X/*
X** Copyright (c) 1990 David E. Smyth
X**
X** Redistribution and use in source and binary forms are permitted
X** provided that the above copyright notice and this paragraph are
X** duplicated in all such forms and that any documentation, advertising
X** materials, and other materials related to such distribution and use
X** acknowledge that the software was developed by David E. Smyth.  The
X** name of David E. Smyth may not be used to endorse or promote products
X** derived from this software without specific prior written permission.
X** THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
X** WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
X** MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
X**
X*/
X
X/******************************************************************************
X**   Include_files.
X******************************************************************************/
X
X#include <X11/Intrinsic.h>
X#include <ctype.h>
X#include <Wc/WcCreate.h>
X#include <X11/Xaw_d/DrawingA.h>
X
Xextern void PlaceWindow ();
Xextern void setup_lists ();
Xextern void list_callback ();
Xextern void resort_list ();
Xextern void EndAsciiValAction ();
X
X/******************************************************************************
X*   MAIN function
X******************************************************************************/
X
Xmain ( argc, argv )
X    int   argc;
X    char* argv[];
X{   
X  char*        appClass;
X  XtAppContext app;
X  Widget       appShell;
X
X  appClass = (char*) XtMalloc ( strlen ( argv[0] ) + 1 );
X  strcpy (appClass, argv[0]);
X  /* initialize first letter to make class, or first two if
X  ** first is already capitalized, or don't worry about it.
X  */
X  if (islower(appClass[0]))
X      appClass[0] = toupper(appClass[0]);
X  else if (islower(appClass[1]))
X      appClass[1] = toupper(appClass[1]);
X
X  /*  -- Intialize Toolkit creating the application shell */
X  appShell = XtInitialize ( 
X      argv[0], appClass,		/* app name and class */
X      NULL, 0, 			/* description of cmd line options */
X      &argc, argv 
X  );
X  app = XtWidgetToApplicationContext(appShell);
X
X  /*  -- Register all application specific widget classes */
X  WcRegisterClassName(app, "DrawingArea",            drawingAreaWidgetClass);
X  WcRegisterClassPtr( app, "drawingAreaWidgetClass", drawingAreaWidgetClass);
X
X
X  /*  -- Register all Athena and Public widget classes */
X  AriRegisterAthena(app);
X
X  /*  -- Register application specific actions */
X  WcRegisterAction(app, "EndAsciiValAction",  EndAsciiValAction);
X
X  /*  -- Register application specific callbacks */
X  WcRegisterCallback(app, "PlaceWindow",        PlaceWindow, (caddr_t)0);
X  WcRegisterCallback(app, "setup_lists",        setup_lists, (caddr_t)0);
X  WcRegisterCallback(app, "list_callback",      list_callback, (caddr_t)0);
X  WcRegisterCallback(app, "resort_list",        resort_list, (caddr_t)0);
X
X
X  /*  -- Create widget tree below toplevel shell using Xrm database */
X  WcWidgetCreation ( appShell );
X
X  init_colors(appShell,argv[1]);
X
X  /*  -- Realize the widget tree and enter the main application loop */
X  XtRealizeWidget ( appShell );
X  XtMainLoop ( );
X}
END_OF_FILE
if test 3630 -ne `wc -c <'xrainbow/main/xrainbow.c'`; then
    echo shar: \"'xrainbow/main/xrainbow.c'\" unpacked with wrong size!
fi
# end of 'xrainbow/main/xrainbow.c'
fi
echo shar: End of archive 5 \(of 5\).
cp /dev/null ark5isdone
MISSING=""
for I in 1 2 3 4 5 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked all 5 archives.
    echo "Please Read README"
    rm -f ark[1-9]isdone
else
    echo You still need to unpack the following archives:
    echo "        " ${MISSING}
fi
##  End of shell archive.
exit 0

--
Dan Heller
O'Reilly && Associates       Z-Code Software    Comp-sources-x:
Senior Writer                President          comp-sources-x at uunet.uu.net
argv at ora.com                 argv at zipcode.com



More information about the Comp.sources.x mailing list