Article 2757 of comp.sources.unix:
Submitted-By: mik@cs.su.oz.au (Michael Koelling)
Posting-Number: Volume 29, Issue 97
Archive-Name: red-96/part02

#!/bin/sh
# This is `part02' (part 2 of a multipart archive).
# Do not concatenate these parts, unpack them in order with `/bin/sh'.
# File `Red/Blue' is being continued...
#
touch -am 1231235999 $$.touch >/dev/null 2>&1
if test ! -f 1231235999 && test -f $$.touch; then
  shar_touch=touch
else
  shar_touch=:
  echo
  echo 'WARNING: not restoring timestamps.  Consider getting and'
  echo "installing GNU \`touch', distributed in GNU File Utilities..."
  echo
fi
rm -f 1231235999 $$.touch
#
if test ! -r _sharseq.tmp; then
  echo 'Please unpack part 1 first!'
  exit 1
fi
shar_sequence=`cat _sharseq.tmp`
if test "$shar_sequence" != 2; then
  echo "Please unpack part $shar_sequence next!"
  exit 1
fi
if test ! -f _sharnew.tmp; then
  echo 'x - still skipping Red/Blue'
else
  echo 'x - continuing file Red/Blue'
  sed 's/^X//' << 'SHAR_EOF' >> 'Red/Blue' &&
XBlue*DialogFind*TabButton.fontList:		*Helvetica-Bold-R-Normal*-12-*
XBlue*DialogFind*caseButton.labelString:		Case sensitive
XBlue*DialogFind*wordButton.labelString:		Match whole word
XBlue*DialogFind*directionButton.labelString:	Search backwards
X
X##  PREFERENCES DIALOG ##
X
XRed*DialogPref.dialogTitle:		Red: Preferences
XRed*DialogPref.toggleArea*fontList:	*Helvetica-Bold-R-Normal*-17-*
XRed*DialogPref.toggleArea.background:	gray80
XRed*DialogPref*showTbButton.labelString:	Show toolbar
XRed*DialogPref*beepButton.labelString:		Beep with warnings
XRed*DialogPref*backupButton.labelString:	Make backup when saving
XRed*DialogPref*newlineButton.labelString: 	Always end file with Newline character
X
X##  FUNCTION DIALOG ##
X
XRed*DialogFunction.dialogTitle:			Red: Functions
XRed*DialogFunction*fontList:			*Helvetica-Bold-R-Normal*-14-*
XRed*DialogFunction*horizontalSpacing:		20
XRed*DialogFunction*verticalSpacing:		20
XRed*DialogFunction.CategoryMenu.labelString:	Categories:
XRed*DialogFunction*FunctionList.width:		300
XRed*DialogFunction*FunctionList.visibleItemCount:	12
XRed*DialogFunction*FunctionList.background:	gray85
XRed*DialogFunction*KeyList.width:		180
XRed*DialogFunction*KeyList.visibleItemCount:	4
XRed*DialogFunction*KeyList.background:		gray85
XRed*DialogFunction*KeyLabel*fontList:		*Helvetica-Bold-R-Normal*-12-*
XRed*DialogFunction*KeyLabel.labelString:	Key Bindings:
XRed*DialogFunction*descrArea.background:	gray85
XRed*DialogFunction*descrArea.borderWidth:	1
X
X##  FUNCTION CALL DIALOG ##
X
XBlue*DialogFuncCall*fontList:		*Helvetica-Bold-R-Normal*-14-*
XBlue*DialogFuncCall*Comment.fontList:	*Helvetica-Bold*-14-*
XBlue*DialogFuncCall*Comment.alignment:	XmALIGNMENT_BEGINNING
XBlue*DialogFuncCall*FuncName.alignment:	XmALIGNMENT_END
XBlue*DialogFuncCall*historyList.traversalOn:	False
XBlue*DialogFuncCall*horizontalSpacing:		2
XBlue*DialogFuncCall*verticalSpacing:		10
XBlue*DialogFuncCall*workArea.spacing:		5
XBlue*DialogFuncCall*paramArea.marginHeight:	0
XBlue*DialogFuncCall*nameArea.marginHeight:	0
XBlue*DialogFuncCall*historyList*visibleItemCount:	6
X
X##  FUNCTION RESULT DIALOG ##
X
XBlue*DialogFuncRes*valueList*visibleItemCount:	4
XBlue*DialogFuncRes*valueList*background:	gray85
XBlue*DialogFuncRes*fontList:		*Helvetica-Bold-R-Normal*-14-*
XBlue*DialogFuncRes*listLabel.fontList:	*Helvetica-Bold-R-Normal*-17-*
XBlue*DialogFuncRes*Comment.alignment:	XmALIGNMENT_BEGINNING
XBlue*DialogFuncRes*Comment.fontList:	*Helvetica-Bold*-14-*
XBlue*DialogFuncRes*horizontalSpacing:	8
XBlue*DialogFuncRes*verticalSpacing:	8
X
X
X## THINGS THAT SHOULD NOT BE CHANGED BY A USER ##
X
XRed*infoArea.traversalOn:		False
XRed*toggleArea.traversalOn:		False
XRed*buttonArea.traversalOn:		False
XRed*PrefDialog*buttonArea.traversalOn:	True
XRed*toolBar.traversalOn:		False
XBlue*toolBar.traversalOn:		False
XBlue*toggleArea.traversalOn:		False
XBlue*buttonArea.traversalOn:		False
XBlue*controlArea.traversalOn:		False
XBlueDebug*listArea.traversalOn:		False
XBlue*benchWindow.traversalOn:		False
XTerminal*traversalOn:			False
SHAR_EOF
  echo 'File Red/Blue is complete' &&
  $shar_touch -am 0512224096 'Red/Blue' &&
  chmod 0640 'Red/Blue' ||
  echo 'restore of Red/Blue failed'
  shar_count="`wc -c < 'Red/Blue'`"
  test 12973 -eq "$shar_count" ||
    echo "Red/Blue: original size 12973, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= Red/Makefile ==============
if test -f 'Red/Makefile' && test X"$1" != X"-c"; then
  echo 'x - skipping Red/Makefile (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting Red/Makefile (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'Red/Makefile' &&
X#
X# Makefile for Blue and Red.				-mik-  March 1996
X#
X# This Makefile builds the whole system by calling make in the subdiretories
X# and then binding the object files together in the current directory.
X#
X# Two applications can be made:
X#
X#   make 	builds the Blue integrated environment
X#   make red	builds Red, the stand-alone version of the Blue editor
X#
X#
X# $Id: Makefile,v 0.1 1996/05/01 06:03:14 oscar Exp $
X
X# THINGS YOU MIGHT HAVE TO CHANGE ON YOUR SYSTEM:
X# ------------------------------------------------
X# The following definitions are different on different systems and you might
X# need to find out the correct paths on your system.
X
XMAKE = make
XSHELL = /bin/sh
X
X## The C++ compiler:
X
XCC = g++
XCXX = g++
XCCC = $(CXX)
X
X## The linker (I use the GNU C++ compiler for linking as well)
X
XLD = g++
X
X## The X Windows directories.  In the include directory, you must find X11/ and
X## in there the X11 header files.  In the lib directory, you should find 
X## (amongst other things) libX11.a
X
XX11_INCLUDE_PATH = /usr/openwin/include
XX11_LIB_PATH = /usr/openwin/lib
X
X## The Motif directories.   In the lib directory you must find libXm.so and 
X## libXm.a, in the include directory you need a subdirectory "Xm".  
X## On your system, this might be the same as the X Windows directory above 
X## (e.g. /usr/openwin/include).
X
XMOTIF_INCLUDE_PATH = /usr/dt/include
XMOTIF_LIB_PATH = /usr/dt/lib
X
X##
X## Antlr/Dlg directories.  Not needed for the Red stand-alone version.  Set
X## this variable to nothing for Red:
X## ANTLR_INCLUDE_DIR = 
X##
XANTLR_INCLUDE_DIR = /local/usr/lib/antlr
X
X##
X## C Preprocessor defines
X##
XCPP_FLAGS = -DDEBUGGING
X
X##
X## Include flags 
X##
XINCLUDE_FLAGS = \
X	-I. -I$(X11_INCLUDE_PATH) -I$(MOTIF_INCLUDE_PATH) \
X	-I$(ANTLR_INCLUDE_DIR)
X
X##
X## Debug flags 
X##
XDEBUG_FLAGS = -g
X
X##
X## Optimization flags
X##
XOPT_FLAGS = 
X
X##
X## Warning flags
X##
XWARN_FLAGS = -Wall -Winline -Wno-unused
X
X##
X## Specialist Compiler flags
X##
XCMPLR_FLAGS = -fhandle-exceptions
X
XCOMPILE_UTILITY_DIR = bin
X
X# YOU SHOULD NOT NEED TO CHANGE ANYTHING BELOW THIS LINE.
X# -------------------------------------------------------
X
X# For a realease version, set this variable.  This causes the compiler to run
X# with optimisation and without warnings
X
XMAKE_RELEASE = true
X
X# export the variables that are needed in nested Makefiles
X
Xexport CC
X
X# set optimisation and warning flags
X
Xifdef MAKE_RELEASE
X  CPP_FLAGS =
X  OPT_FLAGS = -O
X  WARN_FLAGS =
X  DEBUG_FLAGS =
Xendif
X
XCCFLAGS = -c $(CPP_FLAGS) $(DEBUG_FLAGS) $(OPT_FLAGS) $(CMPLR_FLAGS) $(INCLUDE_FLAGS) $(WARN_FLAGS)
Xexport CCFLAGS
X
XCXXFLAGS = $(CCFLAGS)
X
XLDFLAGS = -g -Xlinker -R$(MOTIF_LIB_PATH) -L$(MOTIF_LIB_PATH) -Xlinker -R$(X11_LIB_PATH) -L$(X11_LIB_PATH)
X
XLIBS =  -lXm -lXt -lX11
XTHREADLIB = -lpthread -lposix4
X
X#
X# Make variables to be passed down to subdirectories
X#
XMARGS =	"CC=${CC}" "CXX=${CXX}" "CCC=${CCC}" "CPP_FLAGS=${CPP_FLAGS}" \
X	"INCLUDE_FLAGS=${INCLUDE_FLAGS}" "DEBUG_FLAGS=${DEBUG_FLAGS}" \
X	"OPT_FLAGS=${OPT_FLAGS}" "WARN_FLAGS=${WARN_FLAGS}" \
X	"CMPLR_FLAGS=${CMPLR_FLAGS}" \
X	"COMPILE_UTILITY_DIR=../${COMPILE_UTILITY_DIR}"
X
XPROJECT_DIR =  Project
XPROJ_DEV_DIR = ProjectDev
XPROJ_COMPDEV_DIR = ProjectCompDev
XEDITOR_DIR  =  Red
XUTILITY_DIR =  Utility
XDEBUGGER_DIR = Debugger
XCOMPILER_DIR = Compiler
XCOMP_DEV_DIR = CompilerDev
XASSEM_DIR   =  Assembler
XMACHINE_DIR =  Machine
XBUILTIN_DIR =  Built-Ins
XSAR_EDITOR_DIR  =  SAR_Red
XSAR_UTILITY_DIR =  SAR_Utility
X
XSUBDIRS =	$(PROJECT_DIR) $(PROJ_DEV_DIR) $(EDITOR_DIR) $(UTILITY_DIR) \
X		$(DEBUGGER_DIR) $(COMPILER_DIR) $(COMP_DEV_DIR) \
X		$(PROJ_COMPDEV_DIR) \
X		$(ASSEM_DIR) $(MACHINE_DIR) $(BUILTIN_DIR) \
X		$(SAR_EDITOR_DIR) $(SAR_UTILITY_DIR)
X
X# The Red objects used for the integrated version
X
XRED_OBJECTS = $(UTILITY_DIR)/debug.o $(UTILITY_DIR)/utility.o \
X	$(UTILITY_DIR)/dialog.o $(UTILITY_DIR)/messages.o \
X	$(UTILITY_DIR)/fs_dialog.o $(UTILITY_DIR)/question_dlg.o \
X	$(UTILITY_DIR)/list.o $(UTILITY_DIR)/main.o \
X	$(EDITOR_DIR)/keymap.o \
X	$(EDITOR_DIR)/function.o $(EDITOR_DIR)/screen.o $(EDITOR_DIR)/info.o \
X	$(EDITOR_DIR)/line.o $(EDITOR_DIR)/buffer.o $(EDITOR_DIR)/bufferpos.o \
X	$(EDITOR_DIR)/finder.o $(EDITOR_DIR)/action.o \
X	$(EDITOR_DIR)/actionstack.o $(EDITOR_DIR)/userfunc.o \
X	$(EDITOR_DIR)/red.o $(EDITOR_DIR)/editor.o
X
X# The Red objects used for the stand-alone version (same objects, produced from
X# the same source files -with different flags- in another directory)
X
XSAR_RED_OBJECTS = $(SAR_UTILITY_DIR)/debug.o $(SAR_UTILITY_DIR)/utility.o \
X	$(SAR_UTILITY_DIR)/dialog.o $(SAR_UTILITY_DIR)/messages.o \
X	$(SAR_UTILITY_DIR)/fs_dialog.o $(SAR_UTILITY_DIR)/question_dlg.o \
X	$(SAR_UTILITY_DIR)/list.o $(SAR_UTILITY_DIR)/main.o \
X	$(SAR_EDITOR_DIR)/keymap.o $(SAR_EDITOR_DIR)/function.o \
X	$(SAR_EDITOR_DIR)/screen.o $(SAR_EDITOR_DIR)/info.o \
X	$(SAR_EDITOR_DIR)/line.o $(SAR_EDITOR_DIR)/buffer.o \
X	$(SAR_EDITOR_DIR)/bufferpos.o \
X	$(SAR_EDITOR_DIR)/finder.o $(SAR_EDITOR_DIR)/action.o \
X	$(SAR_EDITOR_DIR)/actionstack.o $(SAR_EDITOR_DIR)/userfunc.o \
X	$(SAR_EDITOR_DIR)/red.o $(SAR_EDITOR_DIR)/editor.o
X
X# Blue objects that are always used (no second test version exists)
X
XNOTEST_OBJECTS = $(RED_OBJECTS) \
X	$(UTILITY_DIR)/get_string_dlg.o $(UTILITY_DIR)/textregion.o \
X	$(UTILITY_DIR)/support.o $(UTILITY_DIR)/stdfunc.o \
X	$(DEBUGGER_DIR)/debugger.o \
X	$(MACHINE_DIR)/ame.o $(MACHINE_DIR)/heap.o \
X	$(MACHINE_DIR)/stack.o \
X	$(MACHINE_DIR)/gen_obj.o $(MACHINE_DIR)/ud_obj.o \
X	$(MACHINE_DIR)/arr_obj.o $(MACHINE_DIR)/str_obj.o \
X	$(MACHINE_DIR)/environment.o $(MACHINE_DIR)/controller.o \
X	$(BUILTIN_DIR)/builtin_mgr.o $(BUILTIN_DIR)/tterm.o \
X	$(BUILTIN_DIR)/input_buffer.o $(BUILTIN_DIR)/btest.o \
X	$(ASSEM_DIR)/assembler.o $(ASSEM_DIR)/instruction.o \
X	$(ASSEM_DIR)/labref.o $(ASSEM_DIR)/code.o 
X
X# additional objects for Blue (with a developer's and an official 
X# version)
X
XCOMPILER_OBJECTS = \
X	$(COMPILER_DIR)/BlueCompiler.a
X
XCOMP_DEV_OBJECTS = \
X	$(COMP_DEV_DIR)/BlueCompiler.a
X
X
XPROJECT_OBJECTS = $(PROJECT_DIR)/arrow.o $(PROJECT_DIR)/xclass.o \
X	$(PROJECT_DIR)/iclass.o $(PROJECT_DIR)/object.o \
X	$(PROJECT_DIR)/class_list.o $(PROJECT_DIR)/object_list.o \
X	$(PROJECT_DIR)/funccall_dlg.o $(PROJECT_DIR)/funcres_dlg.o \
X	$(PROJECT_DIR)/scheme.o $(PROJECT_DIR)/predefined.o \
X	$(PROJECT_DIR)/blue.o
X
XPROJ_DEV_OBJECTS = $(PROJ_DEV_DIR)/arrow.o $(PROJ_DEV_DIR)/xclass.o \
X	$(PROJ_DEV_DIR)/iclass.o $(PROJ_DEV_DIR)/object.o \
X	$(PROJ_DEV_DIR)/class_list.o $(PROJ_DEV_DIR)/object_list.o \
X	$(PROJ_DEV_DIR)/funccall_dlg.o $(PROJ_DEV_DIR)/funcres_dlg.o \
X	$(PROJ_DEV_DIR)/scheme.o $(PROJ_DEV_DIR)/predefined.o \
X	$(PROJ_DEV_DIR)/blue.o 
X
X
XPROJ_COMPDEV_OBJECTS = $(PROJ_COMPDEV_DIR)/arrow.o $(PROJ_COMPDEV_DIR)/xclass.o \
X	$(PROJ_COMPDEV_DIR)/iclass.o $(PROJ_COMPDEV_DIR)/object.o \
X	$(PROJ_COMPDEV_DIR)/class_list.o $(PROJ_COMPDEV_DIR)/object_list.o \
X	$(PROJ_COMPDEV_DIR)/funccall_dlg.o $(PROJ_COMPDEV_DIR)/funcres_dlg.o \
X	$(PROJ_COMPDEV_DIR)/scheme.o $(PROJ_COMPDEV_DIR)/predefined.o \
X	$(PROJ_COMPDEV_DIR)/blue.o 
X
X
XBLUE_OBJECTS = $(NOTEST_OBJECTS) $(PROJECT_OBJECTS) $(COMPILER_OBJECTS) 
X
X# objects for the stand alone Red only:
X
Xall:	project machine builtin editor utility compiler debugger assembler
X	$(LD) $(LDFLAGS) $(BLUE_OBJECTS) $(LIBS) $(THREADLIB) -o blue
X
X# for compiler test
Xct:	proj_comp_dev machine builtin editor utility comp_dev debugger assembler
X	$(LD) $(LDFLAGS) $(NOTEST_OBJECTS) $(PROJ_COMPDEV_OBJECTS) \
X	$(COMP_DEV_OBJECTS) $(LIBS) $(THREADLIB) -o ctblue
X
X# for project test
Xpt:	proj_dev machine builtin editor utility compiler debugger assembler
X	$(LD) $(LDFLAGS) $(NOTEST_OBJECTS) $(PROJ_DEV_OBJECTS) \
X	$(COMPILER_OBJECTS) $(LIBS) $(THREADLIB) -o ptblue
X
X.PHONY: project
Xproject:
X	@cd $(PROJECT_DIR); $(MAKE) all
X	@echo
X
X.PHONY: proj_dev
Xproj_dev:
X	@cd $(PROJ_DEV_DIR); $(MAKE) all
X	@echo
X
X.PHONY: machine
Xmachine:
X	@cd $(MACHINE_DIR); $(MAKE) all
X	@echo
X
X.PHONY: builtin
Xbuiltin:
X	@cd $(BUILTIN_DIR); $(MAKE) all
X	@echo
X
X.PHONY: editor
Xeditor:
X	@cd $(EDITOR_DIR); $(MAKE) all
X	@echo
X
X.PHONY: utility
Xutility:
X	@cd $(UTILITY_DIR); $(MAKE) all
X	@echo
X
X.PHONY: compiler
Xcompiler:
X	@cd $(COMPILER_DIR); $(MAKE) $(MARGS) all
X	@echo
X
X.PHONY: comp_dev
Xcomp_dev:
X	@cd $(COMP_DEV_DIR); $(MAKE) $(MARGS) all
X	@echo
X
X.PHONY: proj_comp_dev
Xproj_comp_dev:
X	@cd $(PROJ_COMPDEV_DIR); $(MAKE) $(MARGS) all
X	@echo
X
X.PHONY: debugger
Xdebugger:
X	@cd $(DEBUGGER_DIR); $(MAKE) all
X	@echo
X
X.PHONY: assembler
Xassembler:
X	@cd $(ASSEM_DIR); $(MAKE) all
X	@echo
X
X
X.PHONY: red
Xred:	
X	@cd $(SAR_UTILITY_DIR); $(MAKE) RO_FLAG='-DRED_ONLY' all
X	@echo
X	@cd $(SAR_EDITOR_DIR); $(MAKE) RO_FLAG='-DRED_ONLY' all
X	@echo
X	$(LD) $(LDFLAGS) $(SAR_RED_OBJECTS) $(LIBS) -o red
X
X.PHONY: backup
Xbackup:
X	cp $(PROJECT_DIR)/Makefile $(PROJECT_DIR)/*.h $(PROJECT_DIR)/*.i \
X		$(PROJECT_DIR)/*.cc Backup/$(PROJECT_DIR)
X	cp $(PROJ_DEV_DIR)/Makefile $(PROJ_DEV_DIR)/*.h $(PROJ_DEV_DIR)/*.i \
X		$(PROJ_DEV_DIR)/*.cc Backup/$(PROJ_DEV_DIR)
X	cp $(EDITOR_DIR)/Makefile $(EDITOR_DIR)/*.h $(EDITOR_DIR)/*.i \
X		$(EDITOR_DIR)/*.cc Backup/$(EDITOR_DIR)
X	cp $(ASSEM_DIR)/Makefile $(ASSEM_DIR)/*.h $(ASSEM_DIR)/*.cc \
X		Backup/$(ASSEM_DIR)
X	cp $(COMPILER_DIR)/Makefile $(COMPILER_DIR)/*.h \
X		$(COMPILER_DIR)/*.cc Backup/$(COMPILER_DIR)
X	cp -r $(COMPILER_DIR)/Compiler Backup/$(COMPILER_DIR)
X	cp $(COMP_DEV_DIR)/Makefile $(COMP_DEV_DIR)/*.h \
X		$(COMP_DEV_DIR)/*.cc Backup/$(COMP_DEV_DIR)
X	cp $(MACHINE_DIR)/Makefile $(MACHINE_DIR)/*.h \
X		$(MACHINE_DIR)/*.cc Backup/$(MACHINE_DIR)
X	cp $(BUILTIN_DIR)/Makefile $(BUILTIN_DIR)/*.h \
X		$(BUILTIN_DIR)/*.cc Backup/$(BUILTIN_DIR)
X	cp $(DEBUGGER_DIR)/Makefile $(DEBUGGER_DIR)/*.h $(DEBUGGER_DIR)/*.i \
X		$(DEBUGGER_DIR)/*.cc Backup/$(DEBUGGER_DIR)
X	cp $(UTILITY_DIR)/Makefile $(UTILITY_DIR)/*.h $(UTILITY_DIR)/*.cc \
X		Backup/$(UTILITY_DIR)
X	cp Bitmaps/* Backup/Bitmaps
X
X.PHONY: installred
Xinstallred:
X	cp red /u3/staff/mik/bin/red-prog
X	cp red /u3/staff/mik/ugrad/bin/red-prog; \
X		chmod go+rx /u3/staff/mik/ugrad/bin/red-prog
X	cp Blue /u3/staff/mik/ugrad/red/Blue
X
X.PHONY: count
Xcount:
X	wc $(PROJECT_DIR)/*.h $(PROJECT_DIR)/*.cc $(PROJECT_DIR)/*.i $(PROJECT_DIR)/Makefile \
X	   $(EDITOR_DIR)/*.h $(EDITOR_DIR)/*.cc $(EDITOR_DIR)/*.i $(EDITOR_DIR)/Makefile \
X	   $(DEBUGGER_DIR)/*.h $(DEBUGGER_DIR)/*.cc $(DEBUGGER_DIR)/*.i $(DEBUGGER_DIR)/Makefile \
X	   $(UTILITY_DIR)/*.h $(UTILITY_DIR)/*.cc $(UTILITY_DIR)/Makefile \
X	   $(COMPILER_DIR)/*.h $(COMPILER_DIR)/*.cc $(COMPILER_DIR)/Makefile \
X	   $(ASSEM_DIR)/*.h $(ASSEM_DIR)/*.cc $(ASSEM_DIR)/Makefile \
X	   $(BUILTIN_DIR)/*.h $(BUILTIN_DIR)/*.cc $(BUILTIN_DIR)/Makefile \
X	   $(MACHINE_DIR)/*.h $(MACHINE_DIR)/*.cc $(MACHINE_DIR)/Makefile 
X
Xdepend:
X	@for x in $(SUBDIRS); do \
X		if [ -d $$x ]; then \
X			(cd $$x; pwd; $(MAKE) $(MARGS) $@); \
X		fi \
X	done
X
Xclean:
X	cd $(EDITOR_DIR); $(MAKE) clean
X	cd $(SAR_EDITOR_DIR); $(MAKE) clean
X	cd $(UTILITY_DIR); $(MAKE) clean
X	cd $(SAR_UTILITY_DIR); $(MAKE) clean
X	if [ -d $(PROJECT_DIR) ]; then cd $(PROJECT_DIR); $(MAKE) clean; fi
X	if [ -d $(PROJ_DEV_DIR) ]; then cd $(PROJ_DEV_DIR); $(MAKE) clean; fi
X	if [ -d $(DEBUGGER_DIR) ]; then cd $(DEBUGGER_DIR); $(MAKE) clean; fi
X	if [ -d $(ASSEM_DIR) ]; then cd $(ASSEM_DIR); $(MAKE) clean; fi
X	if [ -d $(COMPILER_DIR) ]; then cd $(COMPILER_DIR); $(MAKE) clean; fi
X	if [ -d $(MACHINE_DIR) ]; then cd $(MACHINE_DIR); $(MAKE) clean; fi
X	if [ -d $(BUILTIN_DIR) ]; then cd $(BUILTIN_DIR); $(MAKE) clean; fi
X	rm -f *~ core
X
Xrealclean:
X	cd $(EDITOR_DIR); $(MAKE) realclean
X	cd $(SAR_EDITOR_DIR); $(MAKE) realclean
X	cd $(UTILITY_DIR); $(MAKE) realclean
X	cd $(SAR_UTILITY_DIR); $(MAKE) realclean
X	if [ -d $(PROJECT_DIR) ]; then cd $(PROJECT_DIR); $(MAKE) realclean; fi
X	if [ -d $(DEBUGGER_DIR) ]; then cd $(DEBUGGER_DIR); $(MAKE) realclean; fi
X	if [ -d $(ASSEM_DIR) ]; then cd $(ASSEM_DIR); $(MAKE) realclean; fi
X	if [ -d $(COMPILER_DIR) ]; then cd $(COMPILER_DIR); $(MAKE) realclean; fi
X	if [ -d $(MACHINE_DIR) ]; then cd $(MACHINE_DIR); $(MAKE) realclean; fi
X	if [ -d $(BUILTIN_DIR) ]; then cd $(BUILTIN_DIR); $(MAKE) realclean; fi
X	rm -f *.o *~ blue red core
SHAR_EOF
  $shar_touch -am 0512223696 'Red/Makefile' &&
  chmod 0640 'Red/Makefile' ||
  echo 'restore of Red/Makefile failed'
  shar_count="`wc -c < 'Red/Makefile'`"
  test 11939 -eq "$shar_count" ||
    echo "Red/Makefile: original size 11939, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= Red/README ==============
if test -f 'Red/README' && test X"$1" != X"-c"; then
  echo 'x - skipping Red/README (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting Red/README (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'Red/README' &&
X-------------------------------------------------------------------------------
XBlue System README				   - michael koelling, Nov.1995
X-------------------------------------------------------------------------------
X
XThis is the Readme file for the Blue/Red system.  It is part of the Blue or Red
Xsource code.
X
XContents:
X
X (1) What is Blue/Red?
X (2) How to install Blue/Red
X
X
X(1) What is Blue, what is Red?
X    ==========================
X
XI haven't really written this part yet.  In short: Blue is an integrated
Xprogram development environment, Red is its editor.  The whole environment
Xcan be built, or Red can be built as a stand alone, general purpose text 
Xeditor.
X
X
X(2) How to install Blue/Red
X    =======================
X
X
X1. Uncompress/Untar
X   ----------------
X
XIf you received Red or Blue in a compressed format (.gz suffix), use "gunzip" 
Xto uncompress the file (gunzip red.tar.gz).
X
XThen "untar" the tar file.
X
XExample:
X
X	$ ls
X	red.tar.gz
X	$ gunzip red.tar.gz
X	$ tar xf red.tar
X
X
X2. Edit the Makefile
X   -----------------
X
XSome definitions in the Makefile might have to be adapted to your system.
XThese are only very few definitions right at the beginning of the top level 
XMakefile.  You do not have to change anything else (hopefully).
X
XThese definitions are:
X
XCC 			- The path of the C++ compiler. 
X			  (It has only been tested with g++ so far.)
XLD 			- The linker.  If you use g++ for compiling, 
X			  you can also use it for linking.
XX11_INCLUDE_PATH	- X Windows includes
XX11_LIB_PATH		- X Windows libraries
XMOTIF_INCLUDE_PATH	- Motif includes
XMOTIF_LIB_PATH		- Motif libraries
X
XSome hints how to set them are in the Makefile.
X
XIf you don't have g++, it might be worth getting and installing it.  You can
Xtry compiling with another C++ compiler, but I have never tried that -- see
Xhow far you get.
X
XIf you don't have Motif -- well, too bad.  There is no way around that.
X
X
X3. Build the executable
X   --------------------
X
XType "make" to make the complete system (if you have the complete Blue sources)
Xor "make red" to build the Red stand alone version (if you got the file 
Xred.tar.gz, you can only make red, since it does not contain the sources of the
Xcomplete system).
X
X
X4. Set up the environment
X   ----------------------
X
XYou have to make sure that Blue/Red finds its X Resource file (which
Xis a file called "Blue" in the top level directory).
X
XThere are three possibilities, how you can install this file:
X
X 1. If you are a system administrator installing Red/Blue publicly, you should
X    copy the file "Blue" into the directory /usr/lib/X11/app-defaults.
X    This is where all X applications look for their default files.
X
X 2. If you want to install Red/Blue just for yourself, put "Blue" into your
X    home directory.  Here any X application (incuding Red/Blue) will find its
X    resource file as well.
X
X 3. If you don't like to have the resource file in your home directory, you
X    can put it anywhere you like (or leave it where it is), and set the
X    environment variable XENVIRONMENT to the full path name of the file.
X    (E.g. put
X
X	XENVIRONMENT=/user/staff/mik/blue/Blue
X	export XENVIRONMENT
X
X    into your profile).
X
XFinally, move red (the executable) into your command path (into a public "bin"
Xdirectory, or your private one, or wherever you want it).
X
X
X5. Setting up the manual pages
X   ---------------------------
X
XThe Red online manual is written as WWW pages and uses a web browser for
Xdisplay.  The manual pages are included in the distribution in a directory 
Xcalled "red-manual".
X
XIn the current setup, the manual pages are loaded from a Web server at the
XUniversity of Sydney, Australia, using Netscape.  If you have installed
XNetscape on your system, you can leave the setup as it is.  The speed of
Xdisplay can be much increased, though, by using your local copies of the
Xmanual pages.
X
XBoth, the browser to be used and the URL of the manual pages can be set in the
XBlue/Red resource file.
X
XChanging the browser:
X
X  Open the resource file (the file named "Blue" from the top level 
X  directory) and search for the following line:
X
X    Blue.manBrowser: netscape
X
X  Change the word "netscape" to the name of your browser, e.g.:
X
X    Blue.manBrowser: xmosaic
X
X
XUsing a local manual:
X
X  Using a local copy of the manual is recommended for efficiency and to
X  avoid inconsistencies between the versions of the code and the manual.
X
X  Move the directory "red-manual" (which you find in the top level
X  directory) to a location where it is accessible for a web browser.
X
X  E.g.:
X
X  $ mv red-manual ~/lib/html
X
X  Then edit the "manURL" resource in the resource file (the file named 
X  "Blue") to indicate that new location.  Change the line
X
X    Blue.manURL: http://www.cs.su.oz.au/~mik/red-manual/red-main-page.html
X
X  to
X
X    Blue.manURL: http://www.my.addr.ess.edu/~john/red-manual/red-main-page.html
X
X  It is important to leave the "red-main-page.html" at the end.
X
X
Xmk, Nov 1995
SHAR_EOF
  $shar_touch -am 0512222696 'Red/README' &&
  chmod 0640 'Red/README' ||
  echo 'restore of Red/README failed'
  shar_count="`wc -c < 'Red/README'`"
  test 4922 -eq "$shar_count" ||
    echo "Red/README: original size 4922, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= Red/Utility/Makefile ==============
if test ! -d 'Red/Utility'; then
  echo 'x - creating directory Red/Utility'
  mkdir 'Red/Utility'
fi
if test -f 'Red/Utility/Makefile' && test X"$1" != X"-c"; then
  echo 'x - skipping Red/Utility/Makefile (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting Red/Utility/Makefile (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'Red/Utility/Makefile' &&
X#
X# Makefile for Blue Utilities.			-mik- March 1995
X#
X
XRED_OBJECTS = debug.o stdfunc.o utility.o messages.o dialog.o \
X	  get_string_dlg.o question_dlg.o fs_dialog.o list.o textregion.o main.o
X
XBLUE_OBJECTS = $(RED_OBJECTS) support.o
X
X# RO_FLAG (Red-Only Flags) will be set from outside for red-only compilation
XRO_FLAG = 
X
XUTILITY_DIR = ../Utility
XPROJECT_DIR = ../Project
XEDITOR_DIR  = ../Red
XDEBUGGER_DIR = ../Debugger
XBITMAP_DIR  = ../Bitmaps
X
Xifdef RO_FLAG
Xall: $(RED_OBJECTS)
Xelse
Xall: $(BLUE_OBJECTS)
Xendif
X
Xclean:
X	rm -f *~ blue core
X
Xrealclean:
X	rm -f *.o *~ blue core
X
Xdebug.o: debug.h debug.cc main.h $(EDITOR_DIR)/red.h
X	$(CC) $(CCFLAGS) $(RO_FLAG) -o debug.o debug.cc
X
Xsupport.o: support.h support.cc $(PROJECT_DIR)/defines.h 
X	$(CC) $(CCFLAGS) $(RO_FLAG) -o support.o support.cc
X
Xtextregion.o: textregion.h textregion.cc
X	$(CC) $(CCFLAGS) $(RO_FLAG) -o textregion.o textregion.cc
X
Xutility.o: utility.h utility.cc \
X	   debug.h fs_dialog.h \
X	   $(BITMAP_DIR)/blue_icon.xbm $(BITMAP_DIR)/edit_icon.xbm \
X	   $(BITMAP_DIR)/debug_icon.xbm $(BITMAP_DIR)/alpha.xbm \
X	   $(BITMAP_DIR)/longline.xbm \
X	   $(BITMAP_DIR)/arrow.xbm $(BITMAP_DIR)/noarrow.xbm \
X	   $(BITMAP_DIR)/stop.xbm $(BITMAP_DIR)/error.xbm \
X	   $(BITMAP_DIR)/exec.xbm $(BITMAP_DIR)/arrowhead_right.xbm \
X	   $(BITMAP_DIR)/arrowhead_left.xbm $(BITMAP_DIR)/red_logo.xbm
X	$(CC) $(CCFLAGS) $(RO_FLAG) -o utility.o utility.cc
X
Xmessages.o: messages.h messages.cc dialog.h question.h $(EDITOR_DIR)/defines.h
X	$(CC) $(CCFLAGS) $(RO_FLAG) -o messages.o messages.cc
X
Xdialog.o: dialog.h dialog.cc
X	$(CC) $(CCFLAGS) $(RO_FLAG) -o dialog.o dialog.cc
X
Xget_string_dlg.o: get_string_dlg.h get_string_dlg.cc debug.h
X	$(CC) $(CCFLAGS) $(RO_FLAG) -o get_string_dlg.o get_string_dlg.cc
X
Xquestion_dlg.o: question_dlg.h question_dlg.cc utility.h debug.h
X	$(CC) $(CCFLAGS) $(RO_FLAG) -o question_dlg.o question_dlg.cc
X
Xfs_dialog.o: fs_dialog.h fs_dialog.cc messages.h debug.h
X	$(CC) $(CCFLAGS) $(RO_FLAG) -o fs_dialog.o fs_dialog.cc
X
Xlist.o: list.h list.cc debug.h types.h
X	$(CC) $(CCFLAGS) $(RO_FLAG) -o list.o list.cc
X
Xstdfunc.o: stdfunc.h stdfunc.cc 
X	$(CC) $(CCFLAGS) $(RO_FLAG) -o stdfunc.o stdfunc.cc
X
Xifdef RO_FLAG
Xmain.o: main.h main.cc $(EDITOR_DIR)/red.h \
X	$(UTILITY_DIR)/debug.h \
X	$(UTILITY_DIR)/utility.h $(UTILITY_DIR)/messages.h
X	$(CC) $(CCFLAGS) $(RO_FLAG) -o main.o main.cc
Xelse
Xmain.o: main.h main.cc $(PROJECT_DIR)/blue.h $(EDITOR_DIR)/red.h \
X	$(DEBUGGER_DIR)/debugger.h $(UTILITY_DIR)/debug.h \
X	$(UTILITY_DIR)/utility.h $(UTILITY_DIR)/messages.h
X	$(CC) $(CCFLAGS) $(RO_FLAG) -o main.o main.cc
Xendif
SHAR_EOF
  $shar_touch -am 0512222696 'Red/Utility/Makefile' &&
  chmod 0640 'Red/Utility/Makefile' ||
  echo 'restore of Red/Utility/Makefile failed'
  shar_count="`wc -c < 'Red/Utility/Makefile'`"
  test 2576 -eq "$shar_count" ||
    echo "Red/Utility/Makefile: original size 2576, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= Red/Utility/debug.cc ==============
if test -f 'Red/Utility/debug.cc' && test X"$1" != X"-c"; then
  echo 'x - skipping Red/Utility/debug.cc (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting Red/Utility/debug.cc (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'Red/Utility/debug.cc' &&
X#include <iostream.h>
X
X#include "debug.h"
X#include "../Red/red.h"
X
Xbool debug_is_on (char flag)
X{
X    return (strchr (red->rsrc->debug_flags, flag) != 0);
X}
X
X#ifdef DEBUGGING
X
X  void debug (char flag, char* s)
X  {
X    if (debug_is_on (flag))
X      cout << s << "\n";
X  }
X
X  void debug_i (char flag, char* s, int i)
X  {
X    if (debug_is_on (flag))
X      cout << s << i << "\n";
X  }
X
X#endif
X
Xvoid soft_error (char *msg)
X{
X  cout << msg << "\n";
X}
X
Xvoid soft_error_i (char *msg, int i)
X{
X  cout << msg << i << "\n";
X}
X
Xvoid giveup (char *msg)
X{
X  cout << msg << "\n(giving up)\n";
X  assert (false);
X}
SHAR_EOF
  $shar_touch -am 0512222696 'Red/Utility/debug.cc' &&
  chmod 0640 'Red/Utility/debug.cc' ||
  echo 'restore of Red/Utility/debug.cc failed'
  shar_count="`wc -c < 'Red/Utility/debug.cc'`"
  test 598 -eq "$shar_count" ||
    echo "Red/Utility/debug.cc: original size 598, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= Red/Utility/debug.h ==============
if test -f 'Red/Utility/debug.h' && test X"$1" != X"-c"; then
  echo 'x - skipping Red/Utility/debug.h (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting Red/Utility/debug.h (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'Red/Utility/debug.h' &&
X#ifndef _DEBUG
X#define _DEBUG
X
X// ===========================================================================
X//
X//  debug.h
X//
X//  This file contains a collection of debug routines for the Blue system.
X//
X//  Usage:
X//    Debugging output can be generated with the -d command line option.
X//    -d is followed by a sequence of flags to indicate which debug messages
X//    to print.  E.g.
X//
X//	blue -d ec
X//
X//    sets the debug flags e (editor) and c (compiler). Debug flags currently
X//    supported are:
X//
X//	e	editor debug information	(currently unused)
X//	S	scrolling in editor
X//	c	compiler debug information	(currently unused)
X//	m	machine state information	(currently unused)
X//	x	execution information (AML instructions)
X//	o	operands of AML instructions (only useful together with x)
X//	s	stack state at beginning of each routine call
X//	t	table operations in symtab
X//	d	load/save operations of symtab
X//	D	load/save operations of symtab with more details
X//
X//    In the code, the relevant instructions are
X//
X//	debug ('X', "debug output string");
X//	debug_i ('X', "debug output string", int);
X//
X//    where X is the flag for this debugging statement.  The flag '!' in the
X//    debug statement causes the output to be always printed, regardless of
X//    the debugging flags.
X//
X// ===========================================================================
X
X
X#include <assert.h>
X
X#ifdef DEBUGGING
X
X  void debug (char flag, char* s);		// print s if flag is enabled
X
X
X  void debug_i (char flag, char* s, int i);	// print s and i if flag is 
X						//  enabled
X#else
X
X  #define debug(x,y)
X  #define debug_i(x,y,z)
X
X#endif
X
X  bool debug_is_on (char flag);			// true if debug for this flag
X						//  is enabled
X
X  void soft_error (char* msg);			// print an error message but
X						//  do not abort
X
X  void soft_error_i (char* msg, int i);		// print an error message but
X						//  do not abort
X
X  void giveup (char *msg);			// print out an error message
X						//  and exit
X
X#endif
SHAR_EOF
  $shar_touch -am 0512222696 'Red/Utility/debug.h' &&
  chmod 0640 'Red/Utility/debug.h' ||
  echo 'restore of Red/Utility/debug.h failed'
  shar_count="`wc -c < 'Red/Utility/debug.h'`"
  test 1991 -eq "$shar_count" ||
    echo "Red/Utility/debug.h: original size 1991, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= Red/Utility/dialog.cc ==============
if test -f 'Red/Utility/dialog.cc' && test X"$1" != X"-c"; then
  echo 'x - skipping Red/Utility/dialog.cc (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting Red/Utility/dialog.cc (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'Red/Utility/dialog.cc' &&
X// ============================================================================
X//  File: dialog.cc						-mik- 1995
X//
X//  Implementation of class DIALOG.  See dialog.h for description.
X//  Dialog is part of the Blue programming environment.
X// ============================================================================
X
X#include <Xm/MessageB.h>
X
X#include "dialog.h"
X#include "messages.h"
X
XDIALOG::DIALOG (Widget parent, char* msg,
X	        Boolean isError, int help_nr)
X{
X  Arg al[10];
X  int ac;
X  XmString dialog_message;
X
X  dialog_message = XmStringCreateLtoR (msg, XmSTRING_DEFAULT_CHARSET);
X
X  // create dialog
X  ac=0;
X  XtSetArg (al[ac], XmNmessageString, dialog_message); ac++;
X  XtSetArg (al[ac], XmNmwmDecorations, 2 | 8); ac++;	// border and title
X  if (isError) {
X      XtSetArg (al[ac], XmNdialogStyle, XmDIALOG_FULL_APPLICATION_MODAL); ac++;
X      dialog = XmCreateErrorDialog (parent, "DialogError", al, ac);
X      XtAddCallback (dialog, XmNhelpCallback, show_help, (XtPointer)help_nr);
X  }
X  else {
X      XtSetArg (al[ac], XmNdialogStyle, XmDIALOG_MODELESS); ac++;
X      dialog = XmCreateInformationDialog (parent, "DialogHelp", al, ac);
X      XtUnmanageChild (XmMessageBoxGetChild (dialog, XmDIALOG_HELP_BUTTON));
X  }
X  XtUnmanageChild (XmMessageBoxGetChild (dialog, XmDIALOG_CANCEL_BUTTON));
X
X  XtAddCallback (dialog, XmNokCallback, MESSAGES__close_dialog, this);
X  XtManageChild (dialog);
X  XmStringFree (dialog_message);
X}
X
X
XDIALOG::~DIALOG ()
X{
X  XtDestroyWidget (dialog);
X}
SHAR_EOF
  $shar_touch -am 0512222696 'Red/Utility/dialog.cc' &&
  chmod 0640 'Red/Utility/dialog.cc' ||
  echo 'restore of Red/Utility/dialog.cc failed'
  shar_count="`wc -c < 'Red/Utility/dialog.cc'`"
  test 1497 -eq "$shar_count" ||
    echo "Red/Utility/dialog.cc: original size 1497, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= Red/Utility/dialog.h ==============
if test -f 'Red/Utility/dialog.h' && test X"$1" != X"-c"; then
  echo 'x - skipping Red/Utility/dialog.h (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting Red/Utility/dialog.h (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'Red/Utility/dialog.h' &&
X#ifndef _DIALOG_H
X#define _DIALOG_H
X
X// ============================================================================
X//
X//  Class name: DIALOG
X//
X//  Author: M. Koelling							1995
X//
X//  Description:
X//
X//	DIALOG is part of the Blue Language integrated environment.
X//
X//	DIALOG implements a simple message dialog.  It can be an information
X//	or error dialog (they have different icons).
X//
X// ============================================================================
X
X#include <Xm/Xm.h>
X
Xclass DIALOG {
X
X  public:
X    DIALOG (Widget parent,		// Parent widget
X	    char* msg,			// The message to display
X	    Boolean isError,		// True, if it is an error dialog
X	    int help_nr);		// Number of help message (for error
X					//  dialogs only)
X
X    ~DIALOG ();
X
X  private:
X    Widget dialog;
X};
X
X#endif
X
SHAR_EOF
  $shar_touch -am 0512222696 'Red/Utility/dialog.h' &&
  chmod 0640 'Red/Utility/dialog.h' ||
  echo 'restore of Red/Utility/dialog.h failed'
  shar_count="`wc -c < 'Red/Utility/dialog.h'`"
  test 806 -eq "$shar_count" ||
    echo "Red/Utility/dialog.h: original size 806, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= Red/Utility/fs_dialog.cc ==============
if test -f 'Red/Utility/fs_dialog.cc' && test X"$1" != X"-c"; then
  echo 'x - skipping Red/Utility/fs_dialog.cc (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting Red/Utility/fs_dialog.cc (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'Red/Utility/fs_dialog.cc' &&
X// ============================================================================
X//  File: fs_dialog.cc						-mik- 1995
X//
X//  Implementation of class FS_DIALOG.  See fs_dialog.h for description.
X//  Fs_Dialog is part of the Blue programming environment.
X// ============================================================================
X
X#include <Xm/FileSB.h>
X
X#include "fs_dialog.h"
X#include "messages.h"
X#ifndef RED_ONLY
X  #include "../Project/defines.h"
X#endif
X
X// -------------------------------------------------------------------------
X//  FS_DIALOG: Contructor. Create a file selection dialog and show it on 
X//	screen.
X// -------------------------------------------------------------------------
X
XFS_DIALOG::FS_DIALOG (Widget parent_widget)
X{
X  parent = parent_widget;
X#ifndef RED_ONLY
X  project_pattern = XmStringCreateLtoR (PROJECT_PATTERN, 
X					XmSTRING_DEFAULT_CHARSET);
X#endif
X  dialog = NULL;
X  callback = NULL;
X}
X
X// -------------------------------------------------------------------------
X//  ~FS_DIALOG: Destructor. The file selection dialog is removed from screen
X//	and all data structures deallocated.
X// -------------------------------------------------------------------------
X
XFS_DIALOG::~FS_DIALOG ()
X{
X  if (dialog)
X    XtDestroyWidget (dialog);
X#ifndef RED_ONLY
X  XmStringFree (project_pattern);
X#endif
X}
X
X// -------------------------------------------------------------------------
X//  show: Show the dialog on screen
X// -------------------------------------------------------------------------
X
Xvoid FS_DIALOG::show (XtCallbackProc cb, char *dirname, bool show_projects,
X			bool new_name)
X{
X  XmString list_title;
X  XmString directory;
X  XmString prompt;
X
X  Arg al[10];
X  int ac;
X
X  if (dialog == NULL)		// first time...
X    create_dialog ();
X
X  callback = cb;
X  ac = 0;
X  if (dirname) {
X    directory = XmStringCreateLtoR (dirname, XmSTRING_DEFAULT_CHARSET);
X    XtSetArg (al[ac], XmNdirectory, directory); ac++;
X//    XmStringFree (directory);
X  }
X  if (show_projects) {
X#ifndef RED_ONLY
X    XtSetArg (al[ac], XmNfileTypeMask, XmFILE_DIRECTORY); ac++;
X    XtSetArg (al[ac], XmNpattern, project_pattern); ac++;
X    list_title = XmStringCreateLtoR ("Projects", XmSTRING_DEFAULT_CHARSET);
X    XtSetArg (al[ac], XmNfileListLabelString, list_title); ac++;
X    if (new_name)
X      prompt = XmStringCreateLtoR ("Enter new project name:", 
X					XmSTRING_DEFAULT_CHARSET);
X    else
X      prompt = XmStringCreateLtoR ("Open project:", XmSTRING_DEFAULT_CHARSET);
X    XtSetArg (al[ac], XmNselectionLabelString, prompt); ac++;
X//    XmStringFree (list_title);
X#endif
X  }
X  else {
X    XtSetArg (al[ac], XmNfileTypeMask, XmFILE_REGULAR); ac++;
X    XtSetArg (al[ac], XmNpattern, NULL); ac++;
X    list_title = XmStringCreateLtoR ("Files", XmSTRING_DEFAULT_CHARSET);
X    XtSetArg (al[ac], XmNfileListLabelString, list_title); ac++;
X//    XmStringFree (list_title);
X    if (new_name)
X      prompt = XmStringCreateLtoR ("Enter new file name:", 
X					XmSTRING_DEFAULT_CHARSET);
X    else
X      prompt = XmStringCreateLtoR ("Open file:", XmSTRING_DEFAULT_CHARSET);
X    XtSetArg (al[ac], XmNselectionLabelString, prompt); ac++;
X  }
X  XtSetValues (dialog, al, ac);
X
X  XtAddCallback (dialog, XmNokCallback, callback, (XtPointer)XmCR_OK);
X  XtAddCallback (dialog, XmNcancelCallback, callback, (XtPointer)XmCR_CANCEL);
X  XtManageChild (dialog);
X}
X
X// -------------------------------------------------------------------------
X//  hide: Hide the dialog.
X// -------------------------------------------------------------------------
X
Xvoid FS_DIALOG::hide ()
X{
X  XtUnmanageChild (dialog);
X  XtRemoveCallback (dialog, XmNokCallback, callback, (XtPointer)XmCR_OK);
X  XtRemoveCallback (dialog, XmNcancelCallback, callback, (XtPointer)XmCR_CANCEL);
X  callback = NULL;
X}
X
X// =========================================================================
X//				private functions
X// =========================================================================
X
X// -------------------------------------------------------------------------
X//  create_dialog: Create the file selection dialog. Called only once.
X// -------------------------------------------------------------------------
X
Xvoid FS_DIALOG::create_dialog ()
X{
X  Arg al[10];
X  int ac;
X
X  ac=0;
X  XtSetArg (al[ac], XmNfileTypeMask, XmFILE_REGULAR); ac++;
X//  XtSetArg (al[ac], XmNmustMatch, True); ac++;
X  XtSetArg (al[ac], XmNdialogStyle, XmDIALOG_FULL_APPLICATION_MODAL); ac++;
X  XtSetArg (al[ac], XmNautoUnmanage, False); ac++;
X  XtSetArg (al[ac], XmNresizePolicy, XmRESIZE_GROW); ac++;
X  XtSetArg (al[ac], XmNmwmFunctions, 1 | 32); ac++;	// remove "close"
X  dialog = XmCreateFileSelectionDialog (parent, "DialogFileSelection", al, ac);
X
X  XtAddCallback (dialog, XmNhelpCallback, show_help, (XtPointer)HlpFileSelect);
X}
SHAR_EOF
  $shar_touch -am 0512222696 'Red/Utility/fs_dialog.cc' &&
  chmod 0640 'Red/Utility/fs_dialog.cc' ||
  echo 'restore of Red/Utility/fs_dialog.cc failed'
  shar_count="`wc -c < 'Red/Utility/fs_dialog.cc'`"
  test 4765 -eq "$shar_count" ||
    echo "Red/Utility/fs_dialog.cc: original size 4765, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= Red/Utility/fs_dialog.h ==============
if test -f 'Red/Utility/fs_dialog.h' && test X"$1" != X"-c"; then
  echo 'x - skipping Red/Utility/fs_dialog.h (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting Red/Utility/fs_dialog.h (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'Red/Utility/fs_dialog.h' &&
X#ifndef _FS_DIALOG_H
X#define _FS_DIALOG_H
X
X// ============================================================================
X//
X//  Class name: FS_DIALOG
X//
X//  Author: M. Koelling							1995
X//
X//  Description:
X//
X//	FS_DIALOG is part of the Blue Language integrated environment.
X//
X//	FS_DIALOG implements the file selection dialog used to open or save
X//	a new file.
X//
X// ============================================================================
X
X#include <Xm/Xm.h>
X
Xclass FS_DIALOG {
X
X  public:
X    FS_DIALOG (Widget parent_widget);	// Parent window
X
X    ~FS_DIALOG ();
X
X    void show (XtCallbackProc cb,	// Callback for buttons
X		char *dirname,		// Directory to start in
X		bool show_projects,	// If true, show directory selection
X		bool new_name);		// If true, enter a new name
X
X    void hide ();
X
X  private:
X    void create_dialog ();		// create the dialog widgets
X
X    XmString project_pattern;		// pattern for project dir names
X    Widget dialog, parent;
X    XtCallbackProc callback;
X};
X
X#endif
X
SHAR_EOF
  $shar_touch -am 0512222696 'Red/Utility/fs_dialog.h' &&
  chmod 0640 'Red/Utility/fs_dialog.h' ||
  echo 'restore of Red/Utility/fs_dialog.h failed'
  shar_count="`wc -c < 'Red/Utility/fs_dialog.h'`"
  test 1006 -eq "$shar_count" ||
    echo "Red/Utility/fs_dialog.h: original size 1006, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= Red/Utility/get_string_dlg.cc ==============
if test -f 'Red/Utility/get_string_dlg.cc' && test X"$1" != X"-c"; then
  echo 'x - skipping Red/Utility/get_string_dlg.cc (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting Red/Utility/get_string_dlg.cc (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'Red/Utility/get_string_dlg.cc' &&
X// ============================================================================
X//  File: get_string_dlg.cc					-mik- 1995
X//
X//  Implementation of class GET_STRING_DLG.  See get_string_dlg.h for description.
X//  Get_String_Dlg is part of the Blue programming environment.
X// ============================================================================
X
X#include <Xm/SelectioB.h>
X
X#include "get_string_dlg.h"
X
X// ============================= CALLBACKS =================================
X
X// GET_STRING DIALOG: cancel is for all of them
X
Xvoid get_string_dlg_cancel_cb (Widget w, XtPointer dlg, XtPointer call_data)
X{
X  delete (GET_STRING_DLG*)dlg;
X}
X
X// ========================== END OF CALLBACKS ==============================
X
X// -------------------------------------------------------------------------
X//  GET_STRING_DLG: Contructor. Create a file selection dialog and show it on 
X//	screen.
X// -------------------------------------------------------------------------
X
XGET_STRING_DLG::GET_STRING_DLG (Widget parent, char* prompt, 
X				XtCallbackProc callback)
X{
X  Arg al[10];
X  int ac;
X  XmString dialog_message;
X
X  dialog_message = XmStringCreateLtoR (prompt, XmSTRING_DEFAULT_CHARSET);
X
X  // create the input dialog
X  ac=0;
X  XtSetArg (al[ac], XmNdialogStyle, XmDIALOG_FULL_APPLICATION_MODAL); ac++;
X  XtSetArg (al[ac], XmNselectionLabelString, dialog_message); ac++;
X  XtSetArg (al[ac], XmNautoUnmanage, False); ac++;
X//  XtSetArg (al[ac], XmNtextString, ""); ac++;
X  dialog = XmCreatePromptDialog (parent, "DialogGetString", al, ac);
X
X  XtUnmanageChild (XmSelectionBoxGetChild (dialog, XmDIALOG_HELP_BUTTON));
X
X  XtAddCallback (dialog, XmNokCallback, callback, this);
X  XtAddCallback (dialog, XmNcancelCallback, get_string_dlg_cancel_cb, this);
X
X  XtManageChild (dialog);
X  XmStringFree (dialog_message);
X}
X
X// -------------------------------------------------------------------------
X//  ~GET_STRING_DLG: Destructor. The dialog is removed from screen
X//	and all data structures deallocated.
X// -------------------------------------------------------------------------
X
XGET_STRING_DLG::~GET_STRING_DLG ()
X{
X  XtDestroyWidget (dialog);
X}
SHAR_EOF
  $shar_touch -am 0512222696 'Red/Utility/get_string_dlg.cc' &&
  chmod 0640 'Red/Utility/get_string_dlg.cc' ||
  echo 'restore of Red/Utility/get_string_dlg.cc failed'
  shar_count="`wc -c < 'Red/Utility/get_string_dlg.cc'`"
  test 2146 -eq "$shar_count" ||
    echo "Red/Utility/get_string_dlg.cc: original size 2146, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= Red/Utility/get_string_dlg.h ==============
if test -f 'Red/Utility/get_string_dlg.h' && test X"$1" != X"-c"; then
  echo 'x - skipping Red/Utility/get_string_dlg.h (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting Red/Utility/get_string_dlg.h (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'Red/Utility/get_string_dlg.h' &&
X#ifndef _GET_STRING_DLG_H
X#define _GET_STRING_DLG_H
X
X// ============================================================================
X//
X//  Class name: GET_STRING_DLG
X//
X//  Author: M. Koelling							1995
X//
X//  Description:
X//
X//	GET_STRING_DLG is part of the Blue Language integrated environment.
X//
X//	GET_STRING_DLG implements a dialog to get a string from the user.
X//
X// ============================================================================
X
X#include <Xm/Xm.h>
X
Xclass GET_STRING_DLG {
X
X  friend void get_string_dlg_cancel_cb (Widget w, XtPointer dlg, 
X			XtPointer call_data);
X
X  public:
X    GET_STRING_DLG (Widget parent,
X		    char* prompt,		// The text of the prompt
X		    XtCallbackProc callback);
X
X    ~GET_STRING_DLG ();
X
X  private:
X    Widget dialog;
X};
X
X#endif
X
SHAR_EOF
  $shar_touch -am 0512222696 'Red/Utility/get_string_dlg.h' &&
  chmod 0640 'Red/Utility/get_string_dlg.h' ||
  echo 'restore of Red/Utility/get_string_dlg.h failed'
  shar_count="`wc -c < 'Red/Utility/get_string_dlg.h'`"
  test 783 -eq "$shar_count" ||
    echo "Red/Utility/get_string_dlg.h: original size 783, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= Red/Utility/list.cc ==============
if test -f 'Red/Utility/list.cc' && test X"$1" != X"-c"; then
  echo 'x - skipping Red/Utility/list.cc (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting Red/Utility/list.cc (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'Red/Utility/list.cc' &&
X// ============================================================================
X//
X//  File: list.cc						-mik- 1995
X//
X//  Implementation of class LIST.  See list.h for description.
X//  LIST is part of the Blue programming environment.
X//
X// ============================================================================
X
X#include "list.h"
X#include "types.h"
X#include "debug.h"
X
X// -------------------------------------------------------------------------
X//  LIST: Construct an new, empty list.
X// -------------------------------------------------------------------------
X
XLIST::LIST ()
X{
X  head = last = NULL;
X  scan_level = -1;					// for nested scans
X  scan_ptr[0] = scan_ptr[1] = scan_ptr[2] = NULL;
X  num_elems = 0;
X}
X
X// -------------------------------------------------------------------------
X//  ~LIST: List items should be deleted from outside before deleting the 
X//	list, since we don't know here what type the elements are.
X//	So check that list is empty.
X// -------------------------------------------------------------------------
X
XLIST::~LIST ()
X{
X  if (head !=NULL) {
X    soft_error ("Warning: non empty list deleted!");
X  }
X}
X
X// -------------------------------------------------------------------------
X//  append: Append a new element to the end of this list.
X// -------------------------------------------------------------------------
X
Xvoid LIST::append (void* elem)
X{
X  NODE *node = new NODE ();
X
X  node->elem = elem;
X  if (last == NULL) {
X    node->next = node->prev = NULL;
X    head = last = node;
X  }
X  else {
X    last->next = node;
X    node->prev = last;
X    node->next = NULL;
X    last = node;
X  }
X  num_elems++;
X}
X
X// -------------------------------------------------------------------------
X//  prepend: Add an element at the head of this list.
X// -------------------------------------------------------------------------
X
Xvoid LIST::prepend (void* elem)
X{
X  NODE *node = new NODE ();
X
X  node->elem = elem;
X  if (head == NULL) {
X    node->next = node->prev = NULL;
X    head = last = node;
X  }
X  else {
X    node->next = head;
X    node->prev = NULL;
X    head->prev = node;
X    head = node;
X  }
X  num_elems++;
X}
X
X// -------------------------------------------------------------------------
X//  remove: Unlink this element from this list.  The element is NOT deleted.
X//	PRE: The element must be on the list!!
X// -------------------------------------------------------------------------
X
Xvoid LIST::remove (void* elem)
X{
X  NODE* tmp = head;
X
X  assert (scan_level == -1);		// make sure we're not scanning
X
X  while (tmp) {				// find elem in list
X    if (tmp->elem == elem) break;
X    tmp = tmp->next;
X  }
X  assert (tmp);				// if tmp == NULL the element was 
X					//  not in the list
X
X  if (tmp == head)			// fix up next pointer
X    head = tmp->next;
X  else
X    tmp->prev->next = tmp->next;
X
X  if (tmp == last)			// fix up prev pointer
X    last = tmp->prev;
X  else
X    tmp->next->prev = tmp->prev;
X
X  delete tmp;				// delete node
X  num_elems--;
X}
X
X// -------------------------------------------------------------------------
X//  pop_head: Remove and return head of list.  Return NULL if empty.
X// -------------------------------------------------------------------------
X
Xvoid *LIST::pop_head ()
X{
X  NODE* tmp;
X  void* elem;
X
X  if (head){
X    if (head == last) {
X      elem = head->elem;
X      delete head;
X      head = last = NULL;
X    }
X    else {
X      tmp = head;
X      head = head->next;
X      head->prev = NULL;
X      elem = tmp->elem;
X      delete tmp;
X    }
X    num_elems--;
X    return elem;
X  }
X  else
X    return NULL;
X}
X
X// -------------------------------------------------------------------------
X//  init_scan: Init a scan over the list elements.  "direction" indicates
X//	whether a forward or backward scan is planned.  NOTE: Do NOT remove
X//	elements in the middle of a scan!!!
X// -------------------------------------------------------------------------
X
Xvoid LIST::init_scan (ScanDirection direction)
X{
X  scan_level++;
X  assert (scan_level < 3);		// can do only 3 scans at a time...
X
X  if (direction == ScanForward)
X    scan_ptr[scan_level] = head;
X  else
X    scan_ptr[scan_level] = last;
X}
X
X// -------------------------------------------------------------------------
X//  next_element: Return a list element and advance scan pointer to the next
X//	element.  If there is no more element, the result is NULL.
X// -------------------------------------------------------------------------
X
Xvoid *LIST::next_element ()
X{
X  void *elem;
X
X  if (scan_ptr[scan_level]) {
X    elem = scan_ptr[scan_level]->elem;
X    scan_ptr[scan_level] = scan_ptr[scan_level]->next;
X    return elem;
X  }
X  else
X    return NULL;
X}
X
X// -------------------------------------------------------------------------
X//  prev_element: Return a list element and set scan pointer to the previous
X//	element.  If there is no more element, the result is NULL.
X// -------------------------------------------------------------------------
X
Xvoid *LIST::prev_element ()
X{
X  void *elem;
X
X  if (scan_ptr[scan_level]) {
X    elem = scan_ptr[scan_level]->elem;
X    scan_ptr[scan_level] = scan_ptr[scan_level]->prev;
X    return elem;
X  }
X  else
X    return NULL;
X}
X
X// -------------------------------------------------------------------------
X//  remove_current: To be used only during scan: Remove the current element
X//	 (the last element returned by next_element or prev_element).
X//	Remember that the scan pointer actually points to the next element,
X//	so we have to remove the previos element we gave out!
X// -------------------------------------------------------------------------
X
Xvoid LIST::remove_current (ScanDirection direction)
X{
X  void *elem;
X  NODE* del;
X
X  assert (scan_level >= 0);		// make sure we're in a scan
X
X  if (direction == ScanForward)
X    if (scan_ptr[scan_level] == NULL)
X      del = last;
X    else
X      del = scan_ptr[scan_level]->prev;
X  else
X    if (scan_ptr[scan_level] == NULL)
X      del = head;
X    else
X      del = scan_ptr[scan_level]->next;
X
X  if (del == head)			// fix up next pointer
X    head = del->next;
X  else
X    del->prev->next = del->next;
X
X  if (del == last)			// fix up prev pointer
X    last = del->prev;
X  else
X    del->next->prev = del->prev;
X
X  delete del;				// delete node
X  num_elems--;
X}
X
X// -------------------------------------------------------------------------
X//  end_scan: End a scan. Must be called at end of each scan.
X// -------------------------------------------------------------------------
X
Xvoid LIST::end_scan ()
X{
X  assert (scan_level >= 0);		// make sure we're in a scan
X  scan_level--;
X}
X
X// -------------------------------------------------------------------------
X//  num_elements: Number of elements currently on this list.
X// -------------------------------------------------------------------------
X
Xint LIST::num_elements ()
X{
X  return num_elems;
X}
SHAR_EOF
  $shar_touch -am 0512222696 'Red/Utility/list.cc' &&
  chmod 0640 'Red/Utility/list.cc' ||
  echo 'restore of Red/Utility/list.cc failed'
  shar_count="`wc -c < 'Red/Utility/list.cc'`"
  test 6820 -eq "$shar_count" ||
    echo "Red/Utility/list.cc: original size 6820, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= Red/Utility/list.h ==============
if test -f 'Red/Utility/list.h' && test X"$1" != X"-c"; then
  echo 'x - skipping Red/Utility/list.h (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting Red/Utility/list.h (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'Red/Utility/list.h' &&
X#ifndef _LIST_H
X#define _LIST_H
X
X// ============================================================================
X//
X//  Class name: LIST
X//
X//  Author: M. Koelling							1995
X//
X//  Description:
X//
X//	LIST is an implementation of a double linked list that can hold
X//	elements of any type.
X//
X// ============================================================================
X
X
X// ScanDirection is used to indicate whether to start at the beginning or at the
X//  end when scanning the list.
X
Xenum ScanDirection { ScanForward, ScanBackward };
X
X
X// Node is used to link the list elements.
X
Xclass NODE {
X  public:
X    NODE *next;		// pointer to next node in list
X    NODE *prev;		// pointer to previous node in list
X    void *elem;		// pointer to list element
X};
X
X
Xclass LIST {
X
X  public:
X
X    LIST ();			// Construct an new, empty list.
X
X    ~LIST ();			// Delete this list and all items in it.
X
X    void append (void* elem);	// Append a new element to the end of this list.
X
X    void prepend (void* elem);	// Add an element at the head of this list.
X
X    void remove (void* elem);	// Unlink this element from this list.  The
X				//  element MUST be a member of the list.
X				//  The element is NOT deleted.
X
X    void *pop_head ();		// Remove and return head of list (or NULL if
X				//  list is empty).
X
X    void init_scan (		// Init a scan over the list elements.
X      ScanDirection direction);	//  "direction" indicates whether a forward
X				//  or backward scan is planned.  NEVER remove
X				//  elements with "remove" while scanning!
X				//  (Use only "remove_current");
X				// Up to 3 scans may be nested, but a nested
X				//  scan MUST be completed before the first
X				//  scan can continue.
X
X    void *next_element ();	// Return a list element and advance scan
X				//  pointer. Return NULL at end.
X
X    void *prev_element ();	// Return a list element and set scan pointer
X				//  back. Return NULL at end.
X
X    void remove_current (	// To be used only during scan: Remove the 
X      ScanDirection direction);	//  current element (the last element returned
X				//  by next_element or prev_element).  The 
X				//  parameter indicates the current scan dir.
X
X    void end_scan ();		// End a scan.  MUST be called after each scan.
X
X    int num_elements ();	// Number of elements currently on this list.
X
X
X  private:
X
X    NODE* head;		// Head of list
X    NODE* last;		// Last node of list
X    NODE* scan_ptr[3];	// Pointers used while scanning lists
X    int scan_level;	// counter for nested scans
X    int num_elems;	// Number of elements currently on this list
X};
X
X#endif
SHAR_EOF
  $shar_touch -am 0512222696 'Red/Utility/list.h' &&
  chmod 0640 'Red/Utility/list.h' ||
  echo 'restore of Red/Utility/list.h failed'
  shar_count="`wc -c < 'Red/Utility/list.h'`"
  test 2571 -eq "$shar_count" ||
    echo "Red/Utility/list.h: original size 2571, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= Red/Utility/main.cc ==============
if test -f 'Red/Utility/main.cc' && test X"$1" != X"-c"; then
  echo 'x - skipping Red/Utility/main.cc (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting Red/Utility/main.cc (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'Red/Utility/main.cc' &&
X//
X//  blue - file main.cc  --  
X//
X
X#include <iostream.h>
X
X#include <sys/param.h>
X#include <Xm/Xm.h>
X
X#include "main.h"
X
X#include "utility.h"
X#include "messages.h"
X#include "../Red/red.h"
X#ifndef RED_ONLY
X  #include "../Project/blue.h"
X  #include "../Compiler/compiler.h"
X//  #include "../Debugger/debugger.h"
X  #include "../Utility/stdfunc.h"
X#endif
X
X// GLOBALS:
X
XXtAppContext context;		// used in controller_cb.i
XApplicationData appdata;
XWidget toplevel;
X
X// There are a few more global variables, defined in their individual
X// definition files. They are: 
X//
X//		UTILITY* utility;
X//		MESSAGES* messages;
X//		RED* red;
X//
X// and, in the full version:
X//		BLUE* blue;
X//		DEBUGGER* debugger;
X//		AME* machine;
X//		COMPILER* compiler;
X
X
Xmain (int argc, char *argv[])
X{
X  char *fname;
X
X  /* create the toplevel shell */
X
X  toplevel = XtAppInitialize (&context, "Blue", options, XtNumber(options),
X			      &argc, argv, fallbacks, NULL, 0);
X
X  /* read in the application resources */
X
X  XtVaGetApplicationResources (toplevel, &appdata, resources, XtNumber(resources),
X			       /* varargs list for non-user-definable resc here */
X			       NULL);
X
X  /* create the global objects */
X
X  utility = new UTILITY (toplevel);
X  messages = new MESSAGES ();
X  red = new RED (toplevel, &appdata);
X
X  /* read command line agruments and start Red */
X  /* (better: pass command line int Red on creation and do it there... */
X
X#ifdef RED_ONLY
X  int i;
X  Boolean opened = False;
X
X  for (i=1; i<argc; i++)		    // first arg is program name
X    if (argv[i][0] == '-')
X      cerr << "red: option unknown: " << argv[i] << '\n';
X    else {
X      fname = new char [strlen(argv[i])];
X      strcpy (fname, argv[i]);
X      red->edit_file (fname, appdata.iconic);
X      opened = True;
X    }
X
X  if (!opened)					// if no valid name in command line
X    red->edit_file (NULL, appdata.iconic);	// open empty buffer
X
X#else
X
X  /* start up Blue */
X
X  compiler = new COMPILER ();
X
X  if (argc == 1)				// only program name
X      blue = new BLUE (toplevel, &appdata);
X  else if (argv[1][0] == '-') {
X      cerr << "blue: option unknown: " << argv[1] << '\n';
X      exit (1);
X  }
X  else if (argc > 2) {
X      cerr << "blue: too many parameters\n";
X      cerr << "usage:\n";
X      cerr << "   blue [ options ] project-name\n";
X      exit (1);
X  }
X  else {
X      fname = new char [strlen(argv[1])];
X      strcpy (fname, argv[1]);
X      blue = new BLUE (toplevel, &appdata);
X      blue->open_initial_project (fname);
X  }
X#endif
X
X  XtAppMainLoop (context);
X}
X
X#ifndef RED_ONLY
X
Xextern "C" {
X  void cleanup_and_exit ()
X  {
X    cout << "Cleaning up...\n";
X
X    delete utility;
X    delete messages;
X    delete red;
X    delete compiler;
X    exit (0);
X  }
X}
X#endif
SHAR_EOF
  $shar_touch -am 0512222696 'Red/Utility/main.cc' &&
  chmod 0640 'Red/Utility/main.cc' ||
  echo 'restore of Red/Utility/main.cc failed'
  shar_count="`wc -c < 'Red/Utility/main.cc'`"
  test 2721 -eq "$shar_count" ||
    echo "Red/Utility/main.cc: original size 2721, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= Red/Utility/main.h ==============
if test -f 'Red/Utility/main.h' && test X"$1" != X"-c"; then
  echo 'x - skipping Red/Utility/main.h (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting Red/Utility/main.h (text)'
  sed 's/^X//' << 'SHAR_EOF' > 'Red/Utility/main.h' &&
X#ifndef _MAIN_H
X#define _MAIN_H
X
X// ===========================================================================
X//
X//  main.h
X//
X//  This file contains type definitions of the main program. These are
X//  definitions for X Windows, that can't be put into C++ objects.
X//
X//  This file is used for both, main.cc and editmain.cc.
X//
X// ===========================================================================
X
X#define DefaultBrowser	"netscape"
X#define DefaultURL  "http://www.cs.su.oz.au/~mik/red-manual/red-main-page.html"
X
X#define XtNeditFont	"editFont"
X#define XtCEditFont	"EditFont"
X#define XtNinfoFont	"infoFont"
X#define XtCInfoFont	"InfoFont"
X#define XtNManBrowser	"manBrowser"
X#define XtCManBrowser	"ManBrowser"
X#define XtNManURL	"manURL"
X#define XtCManURL  	"ManURL"
X#define XtNmotd1	"motd1"
X#define XtCmotd1  	"Motd1"
X#define XtNmotd2	"motd2"
X#define XtCmotd2  	"Motd2"
X#define XtNredIconic	"redIconic"
X#define XtCRedIconic	"RedIconic"
X#define XtNdebug	"debug"
X#define XtCDebug	"Debug"
X
X#include "types.h"
X	// defines ApplicationData
X
Xstatic XtResource resources[] = {	// description of resources
X   {					// (see Xt PM, page 86)
X     XtNeditFont,
X     XtCEditFont,
X     XtRFontStruct,
X     sizeof(XFontStruct*),
X     XtOffset(ApplicationDataPtr, editfont),
X     XtRString,
X     "9x15",
X   },
X   {
X     XtNinfoFont,
X     XtCInfoFont,
X     XtRFontStruct,
X     sizeof(XFontStruct*),
X     XtOffset(ApplicationDataPtr, infofont),
X     XtRString,
X     "*Helvetica-Bold-R-Normal*-12-*",
X   },
X   {
X     XtNManBrowser,
X     XtCManBrowser,
X     XtRString,
X     sizeof(char*),
X     XtOffset(ApplicationDataPtr, man_browser),
X     XtRString,
X     DefaultBrowser,
X   },
X   {
X     XtNManURL,
X     XtCManURL,
X     XtRString,
X     sizeof(char*),
X     XtOffset(ApplicationDataPtr, man_url),
X     XtRString,
X     DefaultURL,
X   },
X   {
X     XtNmotd1,
X     XtCmotd1,
X     XtRString,
X     sizeof(char*),
X     XtOffset(ApplicationDataPtr, motd1),
X     XtRString,
X     "",
X   },
X   {
X     XtNmotd2,
X     XtCmotd2,
X     XtRString,
X     sizeof(char*),
X     XtOffset(ApplicationDataPtr, motd2),
X     XtRString,
X     "",
X   },
X   {
X     XtNredIconic,
X     XtCRedIconic,
X     XtRBoolean,
X     sizeof(Boolean),
X     XtOffset(ApplicationDataPtr, iconic),
X     XtRImmediate,
X     (XtPointer) False,
X    },
X   {
X     XtNdebug,
X     XtCDebug,
X     XtRString,
X     sizeof(char*),
X     XtOffset(ApplicationDataPtr, debug_flags),
X     XtRString,
X     "",
X    }
X};
X
X						// for command line options
Xstatic XrmOptionDescRec options[] = {		// (see Xt PM, page 93)
X
X    {"-iconic",		"*redIconic",	XrmoptionNoArg, "True"},
X    {"-font",		"*editFont",	XrmoptionSepArg, NULL},
X    {"-d",		"*debug",	XrmoptionSepArg, NULL},
X};
X
X
XString fallbacks [] = {				// used when no other resource
X    "*infoArea.traversalOn:	False",		// description can be found
X    "*toggleArea.traversalOn:	False",
X    "*buttonArea.traversalOn:	False",
X    "*PrefDialog*buttonArea.traversalOn:True",
X    "*toolBar.traversalOn:	False",
X    "*controlArea.traversalOn:	False",
X    "*listArea.traversalOn:	False",
X    "*benchWindow.traversalOn:	False",
X
X    "Blue.editFont:	8x13",
X    "Blue*infoFont:	*Helvetica-Bold-R-Normal*-12-*",
X
X    "*menuBar*fontList:		*Helvetica-Bold-R-Normal*-14-*",
X    "*menuBar.marginHeight:	0",
X
X    "*toolBar*fontList:		*Helvetica-Bold-R-Normal*-12-*",
X    "Blue*toolBar*marginHeight:	4",
X    "Blue*toolBar*marginWidth:	0",
X    "Blue*toolBar.marginHeight:	0",
X    "Blue*show.alignment:	XmALIGNMENT_BEGINNING",
X    "Blue*inheritButton.alignment:	XmALIGNMENT_BEGINNING",
X    "Blue*usesButton.alignment:	XmALIGNMENT_BEGINNING",
X
X    "Red*toolBar*marginHeight:	4",
X    "Red*toolBar*marginWidth:	4",
X    "Red*toolBar.marginWidth:	0",
X    "Red*toolBar.marginHeight:	0",
X
X    "*buttonArea*fontList:	*Helvetica-Bold-R-Normal*-14-*",
X    "*buttonArea*marginHeight:	4",
X    "*buttonArea*marginWidth:	4",
X    "*buttonArea.marginWidth:	0",
X    "*buttonArea.marginHeight:	0",
X    "*buttonArea.packing:	XmPACK_COLUMN",
X    "*buttonArea*shadowThickness:	2",
X    "*buttonArea*DefaultButtonShadowThickness:	1",
X
X    "*Spacing:			0",
X
X    "Blue*editButton.labelString: 	Edit",
X    "Blue*compileButton.labelString:	Compile",
X    "Blue*createButton.labelString: 	Create",
X    "Blue*newButton.labelString: 	New",
X    "Blue*removeButton.labelString: 	Remove",
X
X    "Blue*viewArea.borderWidth:	1",
X
X    "Red*Open.labelString: Open...",
X    "Red*FindItem.labelString: Find...",
X    "Red*FindNextItem.labelString: Find Next",
X    "Red*ReplaceItem.labelString: Replace...",
X    "Red*PrefItem.labelString: Preferences...",
X    "Red*KeyItem.labelString: Key Bindings...",
X    "Red*DescribeItem.labelString: Describe Key...",
X    "Red*ManualItem.labelString: Manual...",
X
X    "*scrolledWindow.shadowThickness:	2",
X    "*scrollBar.width:	18",
X    "*VertScrollBar.width:18",
X    "*HorScrollBar.height:18",
X    "*indicatorSize:	18",
X
X    "Blue.width:	1000",
X    "Blue.height:	750",
X    "Blue.minWidth:	400",
X    "Blue.minHeight:	330",
X
X    "Red.width:		688",
X    "Red.height:	500",
X    "Red.minWidth:	400",
X    "Red.minHeight:	260",
X
X    "Red*savedLabel.labelString:	not saved",
X    "Red*statusArea.borderWidth:	1",
X
X  // DIALOGS
X
X    "*OkButton.labelString:		Ok",
X    "*CancelButton.labelString:	Cancel",
X    "*HelpButton.labelString:	Help",
X
X    "Blue*DialogHelp.dialogTitle:		Red: Help",
X    "Blue*DialogHelp*fontList:			*Helvetica-Bold-R-Normal*-14-*",
X
X    "Blue*DialogError.dialogTitle:		Red: Error",
X    "Blue*DialogError*fontList:			*Helvetica-Bold-R-Normal*-14-*",
X
X    "Blue*DialogFileSelection.dialogTitle:	Red: File Selection",
X    "Blue*DialogFileSelection*fontList:		*Helvetica-Bold-R-Normal*-14-*",
X
X    "Blue*DialogFuncCall*fontList:		*Helvetica-Bold-R-Normal*-14-*",
X    "Blue*DialogFuncCall*Comment.fontList:	*Helvetica-Bold*-14-*",
X    "Blue*DialogFuncCall*Comment.alignment:	XmALIGNMENT_BEGINNING",
X    "Blue*DialogFuncCall*FuncName.alignment:	XmALIGNMENT_END",
X
X    "Blue*DialogFind*fontList:			*Helvetica-Bold-R-Normal*-14-*",
X    "Blue*DialogFind*LineBreakButton.labelString:Line Break",
X    "Blue*DialogFind*LineBreakButton.fontList:	*Helvetica-Bold-R-Normal*-12-*",
X    "Blue*DialogFind*TabButton.labelString:	Tab",
X    "Blue*DialogFind*TabButton.fontList:	*Helvetica-Bold-R-Normal*-12-*",
X    "Blue*DialogFind*caseButton.labelString:	Case sensitive",
X    "Blue*DialogFind*wordButton.labelString:	Match whole word",
X    "Blue*DialogFind*directionButton.labelString:Search backwards",
X
X    "Red*DialogQuestion.dialogTitle:		Red: Question",
X    "Red*DialogQuestion*fontList:		*Helvetica-Bold-R-Normal*-14-*",
X
X    "Red*DialogPref.dialogTitle:		Red: Preferences",
X    "Red*DialogPref.toggleArea*fontList:	*Helvetica-Bold-R-Normal*-17-*",
X    "Red*DialogPref.toggleArea.background:	gray80",
X    "Red*DialogPref*showTbButton.labelString:	Show toolbar",
X    "Red*DialogPref*beepButton.labelString:	Beep with warnings",
X    "Red*DialogPref*backupButton.labelString:	Make backup when saving",
X    "Red*DialogPref*rememberButton.labelString: Remember window locations over sessions",
X
X    "Red*DialogFunction.dialogTitle:			Red: Functions",
X    "Red*DialogFunction*fontList:			*Helvetica-Bold-R-Normal*-14-*",
X    "Red*DialogFunction*horizontalSpacing:		20",
X    "Red*DialogFunction*verticalSpacing:		20",
X    "Red*DialogFunction.CategoryMenu.labelString:	Categories:",
X    "Red*DialogFunction*FunctionList.width:		300",
X    "Red*DialogFunction*FunctionList.visibleItemCount:	12",
X    "Red*DialogFunction*FunctionList.background:	gray85",
X    "Red*DialogFunction*KeyList.width:			180",
X    "Red*DialogFunction*KeyList.visibleItemCount:	4",
X    "Red*DialogFunction*KeyList.background:		gray85",
X    "Red*DialogFunction*KeyLabel*fontList:		*Helvetica-Bold-R-Normal*-12-*",
X    "Red*DialogFunction*KeyLabel.labelString:		Key Bindings:",
X    "Red*DialogFunction*descrArea.background:		gray85",
X    "Red*DialogFunction*descrArea.borderWidth:		1",
X
X
X    NULL
X};
X
X#endif
SHAR_EOF
  $shar_touch -am 0512222696 'Red/Utility/main.h' &&
  chmod 0640 'Red/Utility/main.h' ||
  echo 'restore of Red/Utility/main.h failed'
  shar_count="`wc -c < 'Red/Utility/main.h'`"
  test 7919 -eq "$shar_count" ||
    echo "Red/Utility/main.h: original size 7919, current size $shar_count"
  rm -f _sharnew.tmp
fi
# ============= Red/Utility/messages.cc ==============
if test -f 'Red/Utility/messages.cc' && test X"$1" != X"-c"; then
  echo 'x - skipping Red/Utility/messages.cc (file already exists)'
  rm -f _sharnew.tmp
else
  > _sharnew.tmp
  echo 'x - extracting Red/Utility/messages.cc (binary)'
  sed 's/^X//' << 'SHAR_EOF' > _sharuue.tmp &&
Xbegin 600 Red/Utility/messages.cc
XM+R\@/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]
XM/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/0HO+R`@1FEL93H@
XM;65S<V%G97,N8V,)"0D)"0DM;6EK+2`Q.3DU"B\O"B\O("!);7!L96UE;G1A
XM=&EO;B!O9B!C;&%S<R!-15-304=%4RX@(%-E92!M97-S86=E<RYH(&9O<B!D
XM97-C<FEP=&EO;BX*+R\@($UE<W-A9V5S(&ES('!A<G0@;V8@=&AE($)L=64@
XM<')O9W)A;6UI;F<@96YV:7)O;FUE;G0N"B\O"B\O("!4:&4@8VQA<W,@;65S
XM<V%G97,@:&%N9&QE<R!T:&4@9&ES<&QA>2!O9B!A;&P@;65S<V%G92!D:6%L
XM;V<@8F]X97,N("!4:&5S90HO+R`@:6YC;'5D92!E<G)O<B!A;F0@:&5L<"!D
XM:6%L;V=S+B`@2&5L<"!D:6%L;V=S(&%R92!N;VXM;6]D86P@9&EA;&]G<PHO
XM+R`@8V]N<VES=&EN9R!O9B!A(&UE<W-A9V4@86YD(&%N($]+(&)U='1O;BX@
XM($5R<F]R(&1I86QO9W,@87)E(&UO9&%L(&1I86QO9W,*+R\@(&-O;G-I<W1I
XM;F<@;V8@82!M97-S86=E+"!A;B!/2R!A;F0@82!(96QP(&)U='1O;BX@($5V
XM97)Y(&5R<F]R(&UE<W-A9V4@:&%S"B\O("!A;B!A<W-O8VEA=&5D(&AE;'`@
XM;65S<V%G92X*+R\*+R\@($UE<W-A9V5S(&%R92!D:7-P;&%Y960@8GD@8V%L
XM;&EN9R!T:&4@<VAO=U]H96QP(&]R('-H;W=?97)R;W(@<F]U=&EN92!W:71H
XM"B\O("!T:&4@87!P<F]P<FEA=&4@;65S<V%G92!N=6UB97(N("!4:&ES(&-L
XM87-S(&1E9FEN97,@86QL('1H92!A8W1U86P@;65S<V%G90HO+R`@=&5X=',@
XM86YD('!E<F9O<FUS('1H92!T<F%N<V9O<FUA=&EO;B!F<F]M(&YU;6)E<B!T
XM;R!T97AT+B`@179E<GD@97)R;W(*+R\@(&UE<W-A9V4@86YD(&ET<R!A<W-O
XM8VEA=&5D(&AE;'`@;65S<V%G92!H879E('1H92!S86UE(&YU;6)E<BX@(%-O
XM(&%L;"!T:&4*+R\@(&AE;'`@;65S<V%G97,@=7`@=&\@3E)?15)23U(@87)E
XM(&AE;'`@;65S<V%G97,@9F]R(&5R<F]R(&1I86QO9W,N"B\O"B\O(#T]/3T]
XM/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]
XM/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T*"B-I;F-L=61E(")M97-S86=E
XM<RYH(@HC:6YC;'5D92`B<75E<W1I;VY?9&QG+F@B"B-I;F-L=61E("(N+B]2
XM960O9&5F:6YE<RYH(@H*+R\@=&AI<R!I<R!T:&4@1TQ/0D%,(&UE<W-A9V5S
XM(&]B:F5C=`I-15-304=%4R`J;65S<V%G97,["@H*+R\@/3T]/3T]/3T]/3T]
XM/3T]/3T]/3T]/3T]/3T]/3T@0T%,3$)!0TM3(#T]/3T]/3T]/3T]/3T]/3T]
XM/3T]/3T]/3T]/3T]/3T]/0H*=F]I9"!S:&]W7VAE;'`@*%=I9&=E="!W+"!8
XM=%!O:6YT97(@;7-G7VYU;6)E<BP@6'10;VEN=&5R(&-A;&Q?9&%T82D*>PH@
XM('=H:6QE("@A6'1)<U-H96QL("AW*2D*("`@('<@/2!8=%!A<F5N="`H=RD[
XM"@H@(&UE<W-A9V5S+3YS:&]W7VAE;'`@*'<L($UE<W-A9V5)9"@H:6YT*6US
XM9U]N=6UB97(I*3L*?0H*+R\@+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM
XM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM
XM+0H*=F]I9"!-15-304=%4U]?8VQO<V5?9&EA;&]G("A7:61G970@=RP@6'10
XM;VEN=&5R('5S97)?9&%T82P@6'10;VEN=&5R(&-A;&Q?9&%T82D*>PH@(&UE
XM<W-A9V5S+3YC;&]S95]D:6%L;V<@*"A$24%,3T<@*BEU<V5R7V1A=&$I.PI]
XM"@HO+R`]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/2!%3D0@3T8@0T%,3$)!
XM0TM3(#T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/0H*34534T%'15,Z
XM.DU%4U-!1T53("@I"GL*("!E<G)O<B`](&YE=R!C:&%R*B!;3E)?3T9?15)2
XM3U)373L*("!H96QP(#T@;F5W(&-H87(J(%M.4E]/1E](14Q073L*"B`@97)R
XM;W);17)R3&]A9%!R;VIE8W1=(#T@"B`@("`B5&AI<R!P<F]J96-T(&ES(&1A
XM;6%G960A7&Y<;B(*("`@(")3;VUE(&9I;&5S(&)E;&]N9VEN9R!T;R!T:&ES
XM('!R;VIE8W0@8V%N(&YO="!B92!R96%D(&]R(&%R95QN(@H@("`@(F-O<G)U
XM<'1E9"X@(%-O;64@8VQA<W-E<R!O9B!T:&ES('!R;VIE8W0@;6EG:'0@8F4@
XM;6ES<VEN9RXB.PH@(&AE;'!;17)R3&]A9%!R;VIE8W1=("`](`H@("`@(D]N
XM92!O<B!M;W)E(&]F('1H92!F:6QE<R!B96QO;F=I;F<@=&\@=&AI<R!P<F]J
XM96-T(&-O=6QD(&YO="!B92!R96%D7&XB"B`@("`B87,@97AP96-T960N("!4
XM:&ES(&UE86YS('1H870@=&AE('!R;VIE8W0@9&ED(&YO="!P<F]P97)L>2!L
XM;V%D+EQN(@H@("`@(E-T<F%N9V4@=&AI;F=S(&-A;B!H87!P96X@:68@>6]U
XM('1R>2!T;R!U<V4@=&AE('!R;VIE8W0@86YY=V%Y+EQN(@H@("`@(EEO=2!S
XM:&]U;&0@8VAE8VL@=&AE(&%C8V5S<R!R:6=H=',@;VX@9&ES:R!A;F0@;6%K
XM92!S=7)E('EO=2!A<F5<;B(*("`@(")A;&QO=V5D('1O(')E860@86QL(&9I
XM;&5S+B`@268@=&AI<R!S=&EL;"!D;V5S(&YO="!W;W)K+"!T:&4@<V%F97-T
XM7&XB"B`@("`B=&AI;F<@=&\@9&\@:7,@=&\@9FEN9"!A(')E8V5N="!B86-K
XM=7`@;V8@=&AE('!R;VIE8W0@86YD(')E='5R;B!T;R!T:&%T+B(["@H@(&5R
XM<F]R6T5R<E-A=F50<F]J96-T72`]"B`@("`B0V]U;&0@;F]T('-A=F4@<')O
XM:F5C="$B.PH@(&AE;'!;17)R4V%V95!R;VIE8W1=("`](`H@("`@(E1H92!A
XM='1E;7!T('1O('-A=F4@=V%S(&YO="!S=6-C97-S9G5L+B`@66]U<B!P<F]J
XM96-T(&AA<R!N;W0@8F5E;B!S879E9%QN(@H@("`@(BAO<B!W87,@<&%R=&EA
XM;&QY('-A=F5D*2X@(%1H92!R96%S;VX@8V]U;&0@8F4@=&AA="!Y;W4@9&\@
XM;F]T(&AA=F5<;B(*("`@(")W<FET92!P97)M:7-S:6]N(&EN('1H:7,@<')O
XM:F5C="!O<B!T:&%T('1H92!D:7-K(&ES(&9U;&PN(CL*"B`@97)R;W);17)R
XM4V%V94-O9&5=(#T*("`@(")#;W5L9"!N;W0@<V%V92!T:&4@8V]D92!F;W)<
XM;G1H:7,@8VQA<W,A(CL*("!H96QP6T5R<E-A=F5#;V1E72`@/2`*("`@(")4
XM:&4@871T96UP="!T;R!S879E('1H92!C;VUP:6QE9"!C;V1E('=A<R!N;W0@
XM<W5C8V5S<V9U;"Y<;B(*("`@(")4:&4@<F5A<V]N(&-O=6QD(&)E('1H870@
XM>6]U(&1O(&YO="!H879E('=R:71E7&XB"B`@("`B<&5R;6ES<VEO;B!I;B!T
XM:&ES('!R;VIE8W0@;W(@=&AA="!T:&4@9&ES:R!I<R!F=6QL+B(["@H@(&5R
XM<F]R6T5R<DYE=U!R;VIE8W1=(#T*("`@(")%<G)O<B!I;B!A='1E;7!T('1O
XM(&-R96%T95QN(@H@("`@(F$@;F5W('!R;VIE8W0A(CL*("!H96QP6T5R<DYE
XM=U!R;VIE8W1=("`](`H@("`@(E1H92!A='1E;7!T('1O(&-R96%T92!A(&YE
XM=R!P<F]J96-T('=A<R!N;W0@<W5C8V5S<V9U;"X@(%1H92!C<F5A=&EO;EQN
XM(@H@("`@(F]F(&$@9&ER96-T;W)Y(&9O<B!T:&%T('!R;VIE8W0@9F%I;&5D
XM+B`@5&AE<F4@8V]U;&0@8F4@<V5V97)A;"!R96%S;VYS7&XB"B`@("`B9F]R
XM('1H:7,Z(%QN7&XB"B`@("`B("`@+2!A(&1I<F5C=&]R>2!W:71H('1H870@
XM;F%M92!A;')E861Y(&5X:7-T<RQ<;B(*("`@("(@("`M('EO=2!H879E(&YO
XM('=R:71E('!E<FUI<W-I;VX@:6X@=&AE(&1I<F5C=&]R>2!W:&5R92!Y;W4@
XM=V%N=&5D('1O7&XB"B`@("`B("`@("`@(&-R96%T92!T:&4@;F5W('!R;VIE
XM8W0L7&XB"B`@("`B("`@+2!T:&4@9FEL92!S>7-T96T@:7,@9G5L;"Q<;B(*
XM("`@("(@("`M('-O;64@;W1H97(@<')O8FQE;2XN+EQN7&XB"B`@("`B66]U
XM(&-A;B!T<GD@86=A:6X@=VET:"!A;F]T:&5R('!R;VIE8W0@;F%M92!O<B!I
XM;B!A;F]T:&5R(&1I<F5C=&]R>2XB.PH*("!E<G)O<EM%<G)396QE8W1&:7)S
XM=%T@/2`B4V5L96-T(&$@8VQA<W,@9FER<W0@86YD('1H96Y<;F-H;V]S92!T
XM:&ES(&9U;F-T:6]N(CL*("!H96QP6T5R<E-E;&5C=$9I<G-T72`@/2`*("`@
XM(")4:&5R92!A<F4@<V5V97)A;"!F=6YC=&EO;G,@*'-U8V@@87,@7")E9&ET
XM7"(@;W(@7")C;VUP:6QE7"(I('=H:6-H7&XB"B`@("`B;F5E9"!A(&-L87-S
XM(&%S(&%N(&%R9W5M96YT+B`@5&\@=7-E('1H97-E(&9U;F-T:6]N<RP@<V5L
XM96-T(&$@8VQA<W-<;B(*("`@(")F:7)S="!B>2!C;&EC:VEN9R!O;B!I="!A
XM;F0@=&AE;B!E;G9O:V4@=&AE(&9U;F-T:6]N+B(["@H@(&5R<F]R6T5R<E-A
XM=F5":6YD:6YG<UT@/2`B0V]U;&0@;F]T('-A=F4@:V5Y(&)I;F1I;F=S(2([
XM"B`@:&5L<%M%<G)3879E0FEN9&EN9W-=("`](`H@("`@(E)E9"!T<FEE9"!T
XM;R!C<F5A=&4@82!F:6QE(&YA;65D(%PB+G)E9"UK97DM8FEN9&EN9W-<(B!I
XM;B!Y;W5R(&AO;65<;B(*("`@(")D:7)E8W1O<GDN("!4:&ES(&%T=&5M<'0@
XM9F%I;&5D+B`@5&AE(')E87-O;B!C;W5L9"!B92!T:&%T(&$@9FEL95QN(@H@
XM("`@(G=I=&@@=&AA="!N86UE(&%L<F5A9'D@97AI<W1S(&%N9"!C86X@;F]T
XM(&)E(')E<&QA8V5D("AB96-A=7-E(&ET7&XB"B`@("`B:7,@<')O=&5C=&5D
XM(&)Y(&ET<R!A8V-E<W,@<FEG:'1S*2!O<B!T:&%T('EO=2!D;R!N;W0@:&%V
XM92!W<FET95QN(@H@("`@(G!E<FUI<W-I;VX@:6X@>6]U<B!O=VX@:&]M92!D
XM:7)E8W1O<GDN("!#:&5C:R!T:&ES(&%N9"!T<GD@86=A:6XN7&Y<;B(*("`@
XM(")&;W(@;F]W+"!Y;W5R(&ME>2!B:6YD:6YG<R!A<F4@:6X@=7-E+"!B=70@
XM=&AE>2!W:6QL(&)E(&QO<W0@=VAE;B!<;B(*("`@(")Y;W4@97AI="!2960N
XM("!)9B!Y;W4@8V%N(&9I>"!T:&4@<')O8FQE;2!B969O<F4@97AI=&EN9R!2
XM960L('EO=5QN(@H@("`@(F-A;B!T<GD@=&\@<V%V92!A9V%I;B!B>2!M86MI
XM;F<@86YO=&AE<B!C:&%N9V4@=&\@=&AE(&ME>2!B:6YD:6YG<RXB.PH*("!E
XM<G)O<EM%<G)296%D4')E9G-=(#T@"B`@("`B5&AE(%)E9"!P<F5F97)N8V5S
XM(&9I;&4@:6X@>6]U<B!H;VUE(&1I<F5C=&]R>2!I<R!N;W0@82!V86QI9%QN
XM(@H@("`@(G!R969E<F5N8V5S(&9I;&4N("!)9VYO<FEN9R!I="X@("A9;W4@
XM<VAO=6QD(&1E;&5T92!T:&%T(&9I;&4N*5QN7&XB"B`@("`B66]U('=I;&P@
XM9V5T(&1E9F%U;'0@<')E9F5R96YC97,N(CL*("!H96QP6T5R<E)E8610<F5F
XM<UT@/2`*("`@(")9;W4@8V%N(&9I;F0@=&AE('!R969E<F5N8V5S(&9I;&4@
XM:6X@>6]U<B!H;VUE(&1I<F5C=&]R>2!U;F1E<B!T:&4@;F%M95QN(@H@("`@
XM4%)%1E].04U%(BX@(%1H:7,@9FEL92!I<R!E>'!E8W1E9"!T;R!H879E(&$@
XM8V5R=&%I;B!F;W)M870N("!);B!Y;W5R7&XB"B`@("`B:&]M92!D:7)E8W1O
XM<GDL(&$@9FEL92!W:71H('1H870@;F%M92!E>&ES=',L(&)U="!I="!D;V5S
XM(&YO="!H879E('1H92!<;B(*("`@(")E>'!E8W1E9"!F;W)M870N("!4:&4@
XM96%S:65S="!T:&EN9R!T;R!D;R!I<R!T;R!O<&5N('1H92!P<F5F97)N8V5S
XM7&XB"B`@("`B9&EA;&]G(&EN(%)E9"`H:6X@=&AE(%PB3W!T:6]N<UPB(&UE
XM;G4I+"!S970@=&AE('!R969E<F5N8V5S(&%S('EO=5QN(@H@("`@(G=A;G0@
XM=&AE;2P@86YD(&-L:6-K(%PB3TM<(BX@(%1H:7,@=VEL;"!S879E(&$@;F5W
XM('!R969E<F5N8V5S(&9I;&4@:6Y<;B(*("`@(")T:&4@8V]R<F5C="!F;W)M
XM870N(CL*"B`@97)R;W);17)R4F5A9$ME>7-=(#T@"B`@("`B5&AE(%)E9"!K
XM97D@8FEN9&EN9W,@9FEL92!I;B!Y;W5R(&AO;64@9&ER96-T;W)Y(&ES(&YO
XM="!A('9A;&ED7&XB"B`@("`B:V5Y(&)I;F1I;F=S(&9I;&4N("!)9VYO<FEN
XM9R!I="X@("A9;W4@<VAO=6QD(&1E;&5T92!T:&%T(&9I;&4N*5QN7&XB"B`@
XM("`B66]U('=I;&P@9V5T(&1E9F%U;'0@:V5Y(&)I;F1I;F=S+B(["B`@:&5L
XM<%M%<G)296%D2V5Y<UT@/0H@("`@(EEO=2!C86X@9FEN9"!T:&4@:V5Y(&)I
XM;F1I;F=S(&9I;&4@:6X@>6]U<B!H;VUE(&1I<F5C=&]R>2!U;F1E<B!T:&4@
XM;F%M95QN(@H@("`@2T)?1DE,15].04U%(BX@(%1H:7,@9FEL92!I<R!E>'!E
XM8W1E9"!T;R!H879E(&$@8V5R=&%I;B!F;W)M870N("!);B!Y;W5R7&XB"B`@
XM("`B:&]M92!D:7)E8W1O<GDL(&$@9FEL92!W:71H('1H870@;F%M92!E>&ES
XM=',L(&)U="!I="!D;V5S(&YO="!H879E('1H92!<;B(*("`@(")E>'!E8W1E
XM9"!F;W)M870N("!)="!I<R!P;W-S:6)L92!T:&%T('1H:7,@:7,@;F\@:V5Y
XM(&)I;F1I;F=S(&9I;&4@870@86QL+%QN(@H@("`@(F]R('1H870@:70@8V]M
XM97,@9G)O;2!A;B!O;&0@4F5D('9E<G-I;VX@86YD(&-A;B!N;W0@8F4@8V]N
XM=F5R=&5D+B`@26X@86YY7&XB"B`@("`B8V%S92P@:70@8V%N(&YO="!B92!U
XM<V5D+B`@1&5L971E('1H870@9FEL92P@;W(@:G5S="!S970@;F5W(&ME>2!B
XM:6YD:6YG<R!I;EQN(@H@("`@(E)E9"`M('1H870@=VEL;"!O=F5R=W)I=&4@
XM=&AA="!F:6QE('=I=&@@82!N97<L('9A;&ED('9E<G-I;VXN(CL*"B`@97)R
XM;W);17)R1FEN:7-H1FER<W1=(#T@"B`@("`B1FEN:7-H('1H92!F:7)S="!R
XM;W5T:6YE(&-A;&P@9FER<W0@8F5F;W)E7&XB"B`@("`B<W1A<G1I;F<@82!N
XM97<@;VYE+B(["B`@:&5L<%M%<G)&:6YI<VA&:7)S=%T@/0H@("`@(EEO=2!H
XM879E(&-A;&QE9"!A(')O=71I;F4@;V8@86X@:6YS=&%N8V4N("!4:&4@9&EA
XM;&]G('1O7&XB"B`@("`B96YT97(@=&AE(')O=71I;F4@<&%R86UE=&5R<R!I
XM<R!S=&EL;"!A8W1I=F4@*'EO=2!H879E(&YO=%QN(@H@("`@(GEE="!F:6YI
XM<VAE9"!I="DN("!4:&5N('EO=2!T<FEE9"!T;R!C86QL('1H92!N97AT(')O
XM=71I;F4N7&XB"B`@("`B66]U(&-A;B!N;W0@9&\@=&AA="X@(%EO=2!M=7-T
XM(&9I;FES:"!T:&4@9FER<W0@<F]U=&EN92!C86QL7&XB"B`@("`B9FER<W0N
XM("!)9B!Y;W4@9&\@;F]T('=A;G0@=&\@97AE8W5T92!T:&4@9FER<W0@<F]U
XM=&EN95QN(@H@("`@(F-A;&PL(&-L:6-K(%PB0V%N8V5L7"(@:6X@=&AE(%)O
XM=71I;F4@0V%L;"!$:6%L;V<N(CL*"B`@97)R;W);17)R3F]T0V]M<&EL961=
XM(#T@"B`@("`B0V%N(&YO="!C<F5A=&4@86X@;V)J96-T(&)E8V%U<V4@=&AE
XM(&-L87-S(&ES7&XB"B`@("`B;F]T(&-O;7!I;&5D+B(["B`@:&5L<%M%<G).
XM;W1#;VUP:6QE9%T@/0H@("`@(EEO=2!H879E('1R:65D('1O(&-R96%T92!A
XM;B!I;G-T86YC92!O9B!A(&-L87-S("AA(&YE=R!O8FIE8W0I+EQN(@H@("`@
XM(E1O(&1O('1H:7,L('1H92!C;&%S<R!H87,@=&\@8F4@8V]M<&EL960@9FER
XM<W0L(&)E8V%U<V4@=&AE(&-L87-S7&XB"B`@("`B9&5S8W)I8F5S('=H870@
XM=&AE(&]B:F5C="!L;V]K<R!L:6ME+B`@268@=&AE(&-L87-S(&ES(&YO="!C
XM;VUP:6QE9"Q<;B(*("`@(")T:&4@<WES=&5M(&AA<R!N;R!I9&5A('=H870@
XM=&AE(&]B:F5C="!L;V]K<R!L:6ME('1H870@:7,@8F5I;F=<;B(*("`@(")C
XM<F5A=&5D("T@<V\@:70@8V%N(&YO="!B92!C<F5A=&5D+EQN7&XB"B`@("`B
XM0VQI8VL@7")C;VUP:6QE7"(@9FER<W0L('1H96X@*&EN(&-A<V4@=&AE(&-O
XM;7!I;&%T:6]N(&ES('-U8V5S<V9U;"E<;B(*("`@(")T<GD@=&\@8W)E871E
XM(&%N(&EN<W1A;F-E(&%G86EN+B(["@H@(&5R<F]R6T5R<DQI;FMI;F==(#T@
XM"B`@("`B17)R;W(@:6X@;&EN:VEN9R!T:&4@;V)J96-T(5QN(@H@("`@(BA3
XM;W)R>2XN+BDB.PH@(&AE;'!;17)R3&EN:VEN9UT@/0H@("`@(E=H96X@=')Y
XM:6YG('1O(&QI;FL@=&AE(&]B:F5C="`H<F5S;VQV92!R969E<F5N8V5S('1O
XM(&]T:&5R(&-L87-S97,I7&XB"B`@("`B86X@97)R;W(@;V-C=7)E9"X@(%1H
XM:7,@<V5E;7,@=&\@8F4@:6X@:6YT97)N86P@97)R;W(@;V8@=&AE($)L=65<
XM;B(*("`@(")S>7-T96TN("!0;&5A<V4@<F5P;W)T('1H:7,@87,@86X@97)R
XM;W(@=&\@=&AE(&1E=F5L;W!E<G,N(CL*"B`@97)R;W);17)R3F].86UE72`]
XM(`H@("`@(DYO(&YA;64@<W!E8VEF:65D+B(["B`@:&5L<%M%<G).;TYA;65=
XM(#T*("`@(")9;W4@87)E(&%B;W5T('1O(&-R96%T92!A;B!O8FIE8W0N("!!
XM;&P@:6YT97)A8W1I=F5L>2!C<F5A=&5D(&]B:F5C='-<;B(*("`@(")M=7-T
XM(&AA=F4@82!N86UE+B`@66]U(&AA=F4@=&\@<W!E8VEF>2!T:&4@;F%M92!I
XM;B!T:&ES(&1I86QO9R!I;B!T:&5<;B(*("`@(")F:65L9"!T:&%T(&ES(&QA
XM8F5L960@7").86UE(&]F(&EN<W1A;F-E7"(N("!9;W4@;6%Y(&YO="!L96%V
XM92!T:&ES7&XB"B`@("`B9FEE;&0@96UP='DN(CL*"B`@97)R;W);17)R0W)T
XM36%N:69E<W1=(#T@"B`@("`B0V%N;F]T(&-R96%T92!M86YI9F5S="!O8FIE
XM8W0N(CL*("!H96QP6T5R<D-R=$UA;FEF97-T72`]"B`@("`B5&AE(&-L87-S
XM('EO=2!S96QE8W1E9"!T;R!C<F5A=&4@86X@:6YS=&%N8V4@;V8@:7,@82!M
XM86YI9F5S="!C;&%S<UQN(@H@("`@(BAS=6-H(&%S(&%N(&5N=6UE<F%T:6]N
XM*2X@($]B:F5C=',@;V8@;6%N:69E<W0@8VQA<W-E<R!C86YN;W0@8F4@7&XB
XM"B`@("`B8W)E871E9"!D>6YA;6EC86QL>2X@($%L;"!O8FIE8W1S(&QI<W1E
XM9"!I;B!T:&%T(&-L87-S(&5X:7-T(%QN(@H@("`@(F%U=&]M871I8V%L;'D@
XM869T97(@8V]M<&EL871I;VX@;V8@=&AE(&-L87-S+B(["@H@(&5R<F]R6T5R
XM<E)U;G1I;65=(#T@"B`@("`B4G5N=&EM92!E<G)O<B$B.PH@(&AE;'!;17)R
XM4G5N=&EM95T@/0H@("`@(D%N(&5R<F]R(&]C8W5R960@=VAI;&4@>6]U<B!P
XM<F]G<F%M('=A<R!E>&5C=71E9"X@(%1H92!E>&5C=71I;VX@:&%S(&)E96Y<
XM;B(*("`@(")I;G1E<G)U<'1E9"X@($%N(&5D:71O<B!W:6YD;W<@:&%S(&)E
XM96X@;W!E;F5D('1H870@:6YD:6-A=&5S('=H870@97AA8W1L>5QN(@H@("`@
XM(G1H92!P<F]B;&5M(&ES+"!A;F0@=VAE<F4@=&AE(&5R<F]R(&]C8W5R960N
XM7&Y<;B(*("`@(")4:&4@9&5T86EL960@97)R;W(@;65S<V%G92!I<R!D:7-P
XM;&%Y960@:6X@=&AE(&EN9F]R;6%T:6]N(&%R96$@870@=&AE7&XB"B`@("`B
XM8F]T=&]M(&]F('1H870@961I=&]R('=I;F1O=RXB.PH*"B\O($5.1"!/1B!%
XM4E)/4E,*"B`@:&5L<%M(;'!.64E=(#T@"B`@("`B5&AI<R!F=6YC=&EO;B!I
XM<R!N;W0@>65T(&EM<&QE;65N=&5D7&XB"B`@("`B4V]R<GDN+BY<;EQN(@H@
XM("`@(B`@("`@("`@("`@("`@("`@("`M;6EK+2(["@H@(&AE;'!;2&QP1FEL
XM95-E;&5C=%T@/2`*("`@(")4:&ES(&ES('1H92!F:6QE('-E;&5C=&EO;B!B
XM;W@N("!)="!I<R!U<V5D('1O('-P96-I9GD@9FEL92!N86UE<R!T;UQN(@H@
XM("`@(F]P96X@82!F:6QE(&]R('1O('-A=F4@82!F:6QE+EQN7&XB"B`@("`B
XM3U!%3DE.1R!!($9)3$4Z7&Y<;B(*("`@("(@(%1O(&]P96X@82!F:6QE+"!E
XM:71H97(@='EP92!T:&4@9FEL92!N86UE(&EN=&\@=&AE("XN+EQN7&XB"B`@
XM("`B4T%624Y'($$@1DE,13I<;EQN(@H@("`@(B`@5&\@<V%V92!A(&9I;&4L
XM("XN+B(["@H@(&AE;'!;2&QP1FEN9%T@/2`B5&AI<R!I<R!T:&4@1FEN9"!D
XM:6%L;V<N("!4:&ES(&1I86QO9R!I<R!U<V5D('1O("XN+EQN(CL*"B`@:&5L
XM<%M(;'!0<F5F72`]"B`@("`B5&AE(%!R969E<F5N8V5S($1I86QO9UQN7&XB
XM"B`@("`B5&AE(%!R969E<F5N8V5S(&)O>"!L971S('EO=2!C:&%N9V4@<V]M
XM92!A<W!E8W1S(&]F('1H92!B96AA=FEO=7(@;V8@4D5$+EQN(@H@("`@(D%L
XM;"!S971T:6YG<R!A<'!L>2!T;R!A;&P@961I="!W:6YD;W=S+EQN7&XB"B`@
XM("`B4')E9F5R96YC97,@87)E('-A=F5D(&%N9"!R96UA:6X@=&AE('-A;64@
XM:6X@9G5T=7)E('-E<W-I;VYS+EQN7&XB"B`@("`B4VAO=R!T;V]L8F%R.B`@
XM5VAE;B!O;BP@=&AE('1O;VQB87(@*&QI<W0@;V8@8G5T=&]N<R!A="!T:&5<
XM;B(*("`@("(@("`@("`@("`@("`@("!T;W`@;V8@=&AE(&5D:70@=VEN9&]W
XM*2!I<R!S:&]W;BY<;EQN(@H@("`@(D)E97`@=VET:"!W87)N:6YG<SH@(%=H
XM96X@;VXL(%)E9"!B965P<R!E=F5R>2!T:6UE(&ET(%QN(@H@("`@(B`@("`@
XM("`@("`@("`@(&1I<W!L87ES(&$@=V%R;FEN9RY<;EQN(@H@("`@(DUA:V4@
XM8F%C:W5P('=H96X@<V%V:6YG.B`@5VAE;B!O;BP@4F5D('=I;&P@;6%K92!A
XM(&)A8VMU<%QN(@H@("`@(B`@("`@("`@("`@("`@(&]F('1H92!O<FEG:6YA
XM;"!V97)S:6]N(&]F(&$@9FEL92!B969O<F4@;W9E<G=R:71I;F<@:70N7&XB
XM"B`@("`B("`@("`@("`@("`@("`@5&AE(&)A8VMU<"!F:6QE(&YA;64@8V]N
XM<VES=',@;V8@=&AE(&]R:6=I;F%L(&9I;&5<;B(*("`@("(@("`@("`@("`@
XM("`@("!N86UE('=I=&@@82!<(BY^7"(M<W5F9FEX+EQN7&XB"B`@("`B06QW
XM87ES(&5N9"!F:6QE('=I=&@@3F5W;&EN92!C:&%R86-T97(Z("!3;VUE(&%P
XM<&QI8V%T:6]N(&5X<&5C="!A;&Q<;B(*("`@("(@("`@("`@("`@("`@("!T
XM:&5I<B!I;G!U="!F:6QE<R!T;R!E;F0@=VET:"!A(%PB3F5W3&EN95PB(&-H
XM87)A8W1E<BY<;B(*("`@("(@("`@("`@("`@("`@("`H66]U(&=E="!A(%PB
XM3F5W3&EN95PB(&-H87)A8W1E<B!B>2!T>7!I;F<@7")%;G1E<EPB(&]R7&XB
XM"B`@("`B("`@("`@("`@("`@("`@7")2971U<FY<(BXI("!)9B!T:&ES(&]P
XM=&EO;B!I<R!O;BP@4F5D('=I;&P@861D(&$@3F5W3&EN95QN(@H@("`@(B`@
XM("`@("`@("`@("`@(&%T('1H92!E;F0@;V8@=&AE(&9I;&4@=VAA;B!S879I
XM;F<@:68@:70@9&]E<R!N;W0@:&%V92!O;F4N(CL*"B`@:&5L<%M(;'!5<V5R
XM1G5N8UT@/2`*("`@(")4:&4@57-E<B!&=6YC=&EO;B!$:6%L;V=<;EQN(@H@
XM("`@(E1H92!U<V5R(&9U;F-T:6]N(&1I86QO9R!I<R!U<V5D('1O(&=E="!I
XM;F9O<FUA=&EO;B!A;F0@<V5T(&ME>2!B:6YD:6YG<UQN(@H@("`@(F9O<B!U
XM<V5R(&9U;F-T:6]N<RX@($5V97)Y=&AI;F<@>6]U(&-A;B!D;R!W:71H(%)%
XM1"!I<R!D;VYE(&)Y(&-A;&QI;F<@85QN(@H@("`@(G5S97(@9G5N8W1I;VXN
XM("!4:&4@:6YF;W)M871I;VX@>6]U(&-A;B!G970@=7-I;F<@=&AI<R!D:6%L
XM;V<@:7,Z7&XB"B`@("`B("`@+2!W:&%T(&9U;F-T:6]N<R!A<F4@879A:6QA
XM8FQE7&XB"B`@("`B("`@+2!A('-H;W)T(&1E<V-R:7!T:6]N(&]F(&5A8V@@
XM9G5N8W1I;VY<;B(*("`@("(@("`M(&ME>7,@8F]U;F0@=&\@=&AA="!F=6YC
XM=&EO;B`H8V%L;&EN9R!T:&%T(&9U;F-T:6]N(&EF('EO=2!P<F5S<R!T:&5M
XM*5QN7&XB"B`@("`B16QE;65N=',@3V8@5&AE($1I86QO9UQN7&XB"B`@("`B
XM0V%T96=O<FEE<SI<;B(*("`@("(@("!5<V5R(&9U;F-T:6]N<R!A<F4@9W)O
XM=7!E9"!I;G1O(&1I9F9E<F5N="!C871E9V]R:65S+B`@5&AI<R!I<R!A('!O
XM<"UU<%QN(@H@("`@(B`@(&UE;G4@=&AA="!L971S('EO=2!C:&]S92!A(&-A
XM=&5G;W)Y('1O(&1I<W!L87DN("!4:&4@9G5N8W1I;VYS(&]F('1H871<;B(*
XM("`@("(@("!C871E9V]R>2!W:6QL(&)E(&1I<W!L87EE9"!I;B!T:&4@9G5N
XM8W1I;VX@;&ES="Y<;EQN(@H@("`@(D9U;F-T:6]N($QI<W1<;B(*("`@("(@
XM("!4:&4@9G5N8W1I;VX@;&ES="!D:7-P;&%Y<R!T:&4@9G5N8W1I;VYS(&]F
XM('1H92!C=7)R96YT(&-A=&5G;W)Y+B`@0VQI8VM<;B(*("`@("(@("!O;B!A
XM(&9U;F-T:6]N('1O('9I97<@:6YF;W)M871I;VX@9F]R('1H870@9G5N8W1I
XM;VXN7&Y<;B(*("`@("));F9O<FUA=&EO;B!296=I;VY<;B(*("`@("(@("!4
XM:&4@:6YF;W)M871I;VX@<F5G:6]N(&ES('1H92!B;W@@870@=&AE(&)O='1O
XM;2!O9B!T:&4@9&EA;&]G('=I;F1O=RY<;B(*("`@("(@("!)="!I<R!U<V5D
XM('1O(&1I<W!L87D@82!B<FEE9B!D97-C<FEP=&EO;B!O9B!T:&4@<V5L96-T
XM960@9G5N8W1I;VXN7&Y<;B(*("`@(")+97D@0FEN9&EN9W-<;B(*("`@("(@
XM("!4:&4@7")+97D@0FEN9&EN9W-<(B!L:7-T(&1I<W!L87ES('1H92!K97ES
XM(&]R(&ME>2!C;VUB:6YA=&EO;G,@=&AA=%QN(@H@("`@(B`@(&-A;&P@*%PB
XM87)E(&)O=6YD('1O7"(I('1H92!S96QE8W1E9"!F=6YC=&EO;BY<;EQN(@H@
XM("`@(D%D9"!+97D@0G5T=&]N7&XB"B`@("`B("`@57-E('1H:7,@8G5T=&]N
XM('1O(&%D9"!A(&ME>2!B:6YD:6YG("AT:&%T(&ES.B!T;R!M86ME(&$@:V5Y
XM(&-A;&P@=&AE7&XB"B`@("`B("`@<V5L96-T960@9G5N8W1I;VXI+EQN7&XB
XM"B`@("`B1&5L971E($ME>2!"=71T;VY<;B(*("`@("(@("!5<V4@=&AI<R!F
XM=6YC=&EO;B!T;R!D96QE=&4@82!K97D@8FEN9&EN9RX@(%-E;&5C="!T:&4@
XM9G5N8W1I;VX@9FER<W0L7&XB"B`@("`B("`@=&AE;B!S96QE8W0@=&AE(&5N
XM=')Y(&EN('1H92!<(DME>2!":6YD:6YG7"(@;&ES="!T;R!B92!D96QE=&5D
XM+"!T:&5N(%QN(@H@("`@(B`@(&-L:6-K('1H92!B=71T;VXN7&Y<;B(*("`@
XM(")#;&]S92!"=71T;VY<;B(*("`@("(@("!4:&ES(&)U='1O;B!E;F1S('1H
XM:7,@9&EA;&]G+B`@270@:7,@=&AE(&1E9F%U;'0@8G5T=&]N("AI+F4N('!R
XM97-S:6YG7&XB"B`@("`B("`@7")%;G1E<EPB(&%C=',@;&EK92!A(&-L:6-K
XM(&EN=&\@=&AI<R!B=71T;VXI+EQN7&XB"B`@("`B1&5F875L=',@0G5T=&]N
XM7&XB"B`@("`B("`@5&AI<R!B=71T;VX@<F5S971S(&%L;"!K97D@8FEN9&EN
XM9W,@=&\@=&AE('-T86YD87)D(&)I;F1I;F=S(&1E<V-R:6)E9%QN(@H@("`@
XM(B`@(&EN('1H92!2960@57-E<B!-86YU86PN7&Y<;B(*("`@(")(96QP($)U
XM='1O;EQN(@H@("`@(B`@(%-H;W=S('1H:7,@=&5X="!T:&%T('EO=2!A<F4@
XM8W5R<F5N=&QY(')E861I;F<N(CL*"B`@:&5L<%M(;'!!8F]U=%T@/2`B4B`@
XM12`@1%QN7&XB"@D)(E9E<G-I;VX@(E)%1%]615)324].(EQN7&XB"@D)(E)E
XM9"!I<R!T:&4@=&5X="!E9&ET;W(@;V8@=&AE($)L=64@<')O9W)A;6UI;F<@
XM<WES=&5M+EQN7&XB"@D)(E=R:71T96X@8GDZ7&XB"@D)(B`@("!-:6-H865L
XM($OV;&QI;F=<;B(*"0DB("`@($)A<W-E<B!$97!T+B!O9B!#;VUP=71E<B!3
XM8VEE;F-E7&XB"@D)(B`@("!5;FEV97)S:71Y(&]F(%-Y9&YE>2(["@H@(&AE
XM;'!;2&QP0V]P>7)I9VAT72`]"0H@(")#;W!Y<FEG:'0@3F]T:6-E7&XB"B`@
XM(CT]/3T]/3T]/3T]/3T]7&Y<;B(*("`B0V]P>7)I9VAT("AC*2`Q.3DV($UI
XM8VAA96P@2_9L;&EN9RP@0F%S<V5R($1E<&%R=&UE;G0@;V8@0V]M<'5T97(@
XM4V-I96YC92PB"B`@(B!5;FEV97)S:71Y(&]F(%-Y9&YE>2Y<;B(*("`B06QL
XM(')I9VAT<R!R97-E<G9E9"Y<;B(*("`B(%QN(@H@(")097)M:7-S:6]N('1O
XM('5S92P@8V]P>2P@;6]D:69Y+"!A;F0@9&ES=')I8G5T92!T:&ES('-O9G1W
XM87)E(&%N9"!I='-<;B(*("`B9&]C=6UE;G1A=&EO;B!F;W(@86YY('!U<G!O
XM<V4L('=I=&AO=70@9F5E+"!A;F0@=VET:&]U="!W<FET=&5N(&%G<F5E;65N
XM="!I<UQN(@H@(")H97)E8GD@9W)A;G1E9"P@<')O=FED960@=&AA="!T:&4@
XM86)O=F4@8V]P>7)I9VAT(&YO=&EC92!A;F0@=&AE(&9O;&QO=VEN9UQN(@H@
XM(")T=V\@<&%R86=R87!H<R!A<'!E87(@:6X@86QL(&-O<&EE<R!O9B!T:&ES
XM('-O9G1W87)E+EQN(@H@("(@7&XB"B`@(DE.($Y/($5614Y4(%-(04Q,(%1(
XM12!!551(3U(@3U(@5$A%(%5.259%4E-)5%D@3T8@4UE$3D59($)%($Q)04),
XM12!43R!!3ED@4$%25%E<;B(*("`B1D]2($1)4D5#5"P@24Y$25)%0U0L(%-0
XM14-)04PL($E.0TE$14Y404PL($]2($-/3E-%455%3E1)04P@1$%-04=%4R!!
XM4DE324Y'($]55%QN(@H@(")/1B!42$4@55-%($]&(%1(25,@4T]&5%=!4D4@
XM04Y$($E44R!$3T-5345.5$%424].+"!%5D5.($E&(%1(12!!551(3U(@3U(@
XM5$A%7&XB"B`@(E5.259%4E-)5%D@3T8@4UE$3D59($A!4R!"145.($%$5DE3
XM140@3T8@5$A%(%!/4U-)0DE,2519($]&(%-50T@@1$%-04=%+EQN(@H@("(@
XM7&XB"B`@(E1(12!!551(3U(@04Y$(%1(12!53DE615)32519($]&(%-91$Y%
XM62!34$5#249)0T%,3%D@1$E30TQ!24T@04Y9(%=!4E)!3E1)15,L7&XB"B`@
XM(DE.0TQ51$E.1RP@0E54($Y/5"!,24U)5$5$(%1/+"!42$4@24U03$E%1"!7
XM05)204Y42453($]&($U%4D-(04Y404))3$E465QN(@H@(")!3D0@1DE43D53
XM4R!&3U(@02!005)424-53$%2(%!54E!/4T4N("!42$4@4T]&5%=!4D4@4%)/
XM5DE$140@2$52155.1$52($E37&XB"B`@(D].($%.(%PB05,@25-<(B!"05-)
XM4RP@04Y$(%1(12!!551(3U(@04Y$(%1(12!53DE615)32519($]&(%-91$Y%
XM62!(059%($Y/7&XB"B`@(D]"3$E'051)3TX@5$\@4%)/5DE$12!-04E.5$5.
XM04Y#12P@4U504$]25"P@55!$051%4RP@14Y(04Y#14U%3E13+"!/4EQN(@H@
XM(")-3T1)1DE#051)3TY3+B(["@H@(&AE;'!;2&QP36]U<V5=(#T*("`@(")5
XM<VEN9R!T:&4@;6]U<V4@:6X@4F5D7&Y<;B(*("`@("),969T(&)U='1O;CI<
XM;B(*("`@("(@("`@8VQI8VLZ('-E="!C=7)S;W)<;B(*("`@("(@("`@9')A
XM9SH@('-E;&5C="!R96=I;VX@;V8@=&5X=%QN(@H@("`@(B`@("!D;W5B;&4M
XM8VQI8VLZ('-E;&5C="!W;W)D7&XB"B`@("`B("`@('1R:7!L92UC;&EC:SH@
XM<V5L96-T(&QI;F5<;B(*("`@("(@("`@979E<GD@861D:71I;VYA;"!C;&EC
XM:SI<;B(*("`@("(@("`@("`@("`@("`@("`H=VET:&]U="!S:&EF="DZ(&%D
XM9"!A;F]T:&5R(&QI;F4@=&\@<V5L96-T:6]N7&XB"B`@("`B("`@("`@("`@
XM("`@("`@*'=I=&@@<VAI9G0I.B!A9&0@86YO=&AE<B!W;W)D('1O('-E;&5C
XM=&EO;EQN7&XB"B`@("`B36ED9&QE(&)U='1O;CI<;B(*("`@("(@("`@8VQI
XM8VLZ($EN<V5R="!P87-T92!B=69F97(@870@8VQI8VL@<&]S:71I;VY<;EQN
XM(@H@("`@(E)I9VAT(&)U='1O;CI<;B(*("`@("(@("`@8VQI8VLZ(%-E;&5C
XM="!T97AT(&9R;VT@8W5R<V]R('1O(&-L:6-K('!O<VET:6]N(&]R(&5X=&5N
XM9%QN(@H@("`@(B`@("`@("`@("`@('-E;&5C=&EO;B!I9B!I="!E>&ES=&5D
XM(&)E9F]R92(["@H@(&AE;'!;2&QP17)R;W)S72`](`H@("`@(E1O(')E<&]R
XM="!E<G)O<G,L('!L96%S92!M86EL(&$@9&5S8W)I<'1I;VX@;V8@=&AE(&5R
XM<F]R7&XB"B`@("`B86YD('1H92!V97)S:6]N(&YU;6)E<B!O9B!2960@=&\@
XM(&UI:T!C<RYS=2YO>BYA=5QN7&XB"B`@("`B*%1H:7,@:7,@=F5R<VEO;B`B
XM4D5$7U9%4E-)3TXB*5QN7&XB"B`@("`B268@>6]U(&%R92!A="!T:&4@56YI
XM=F5R<VET>2!O9B!3>61N97DL('!L96%S92!S96YD('1H95QN(@H@("`@(F-O
XM<F4@9FEL92!A<R!W96QL("AC;VUM86YD.B!<(FYE=&9I;&4@;6EK(&-O<F5<
XM(BDN(CL*"B`@:&5L<%M(;'!296%D3VYL>5T@/2`*("`@(")787)N:6YG.B!9
XM;W4@87)E(&-H86YG:6YG('1H92!T97AT(&]F(&$@9FEL92!T:&%T(&ES(')E
XM860M;VYL>2%<;B(*("`@(")9;W4@=VEL;"!N;W0@8F4@86)L92!T;R!S879E
XM(&EN=&\@=&AE('-A;64@9FEL92X@("A9;W4@8V%N('5S95QN(@H@("`@(E-A
XM=F4@07,@=&\@<V%V92!U;F1E<B!A(&YE=R!N86UE+BDB.PH*("!H96QP6TAL
XM<$-A;G12961E9FEN95T@/2`*("`@(")9;W4@8V%N(&YO="!R961E9FEN92!T
XM:&4@8FEN9&EN9W,@;V8@<')I;G1A8FQE(&ME>7,N7&XB"B`@("`B66]U(&-A
XM;B!O;FQY(')E9&5F:6YE('1H92!B:6YD:6YG(&9O<B!F=6YC=&EO;B!K97ES
XM+"!O<EQN(@H@("`@(FME>2!C;VUB:6YA=&EO;G,@=&AA="!I;F-L=61E('1H
XM92!!;'0@;W(@0V]N=')O;"!K97DN(CL*"B`@:&5L<%M(;'!#:&%N9VEN9U!R
XM969=(#T@"B`@("`B66]U<B!K97D@8FEN9&EN9W,@9FEL92!I<R!I;B!A(&9O
XM<FUA="!O9B!A;B!O;&1E<B!V97)S:6]N7&XB"B`@("`B;V8@4F5D+B`@5&AI
XM<R!F:6QE('=I;&P@;F]W(&)E(&-O;G9E<G1E9"!T;R!T:&4@;F5W(&9O<FUA
XM="XB.PH*("!H96QP6TAL<$9U;F-#86QL72`]"B`@("`B5&AI<R!I<R!T:&4@
XM4F]U=&EN92!#86QL($1I86QO9RX@($ET(&ES('5S960@=VAE;B!C86QL:6YG
XM(&$@<F]U=&EN95QN(@H@("`@(FEN=&5R86-T:79E;'D@=&AA="!H87,@<&%R
XM86UE=&5R<RX@($EN('1H:7,@9&EA;&]G+"!Y;W4@8V%N('-P96-I9GE<;B(*
SHAR_EOF
  : || echo 'restore of Red/Utility/messages.cc failed'
fi
echo 'End of archive part 2'
echo 'File Red/Utility/messages.cc is continued in part 3'
echo 3 > _sharseq.tmp
exit 0


